【java web server 请求和响应 】
·
访问接口:
通过 IDEA 查看:
打开 Tomcat 运行配置:Run → Edit Configurations。
选择你的 Tomcat 服务器,在 Deployment 选项卡中查看 Application context 字段的值。

- javax.servlet.Servlet 中的方法
import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
//@WebServlet(urlPatterns = {"/demo1","/demo2"})
//@WebServlet(value = {"/demo2"})
@WebServlet("/demo3")
//@WebServlet("*.do")
//@WebServlet("/day18/ServletDemo")
public class ServletDemo1 implements Servlet {
/**
* 初始化servlet的方法
* @param servletConfig
* @throws ServletException
*/
@Override
public void init(ServletConfig servletConfig) throws ServletException {
}
/**
* 获取一个servlet的配置对象
* @return
*/
@Override
public ServletConfig getServletConfig() {
return null;
}
/**
* 提供服务的方法
* @param servletRequest
* @param servletResponse
* @throws ServletException
* @throws IOException
*/
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("service被调用了0... ...");
// getMethod();
}
/**
* 获取servlet信息的一个方法
* @return
*/
@Override
public String getServletInfo() {
return null;
}
/**
* 销毁的方法:释放资源
*/
@Override
public void destroy() {
}
}
- 查看请求头中的一些信息
doPost 是Post方法调用后会执行的
doGet 是Get方法调用后会执行的
package com.demo.servlet;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/servletDemo2")
public class ServletDemo2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取请求行数据
// * GET /day14/demo1?name=zhangsan HTTP/1.1
// * 方法:
// 1. 获取请求方式 :GET
// * String getMethod()
// 2. (*)获取虚拟目录:/day14
// * String getContextPath()
// 3. 获取Servlet路径: /demo1
// * String getServletPath()
// 4. 获取get方式请求参数:name=zhangsan
// * String getQueryString()
// 5. (*)获取请求URI:/day14/demo1
// * String getRequestURI(): /day14/demo1
// * StringBuffer getRequestURL() :http://localhost/day14/demo1
//
// * URL:统一资源定位符 : http://localhost/day14/demo1
// * URI:统一资源标识符 : /day14/demo1
//
// 6. 获取协议及版本:HTTP/1.1
// * String getProtocol()
//
// 7. 获取客户机的IP地址:
// * String getRemoteAddr()
//1. 获取请求方式 :GET
String method = request.getMethod();
System.out.println(method);
//2. * 获取虚拟目录:
String contextPath = request.getContextPath();
System.out.println(contextPath);
//3. 获取Servlet路径:
String servletPath = request.getServletPath();
System.out.println(servletPath);
//4. 获取get方式请求参数:
String queryString = request.getQueryString();
System.out.println(queryString);
//5. (*)获取请求URI:
String requestURI = request.getRequestURI();
System.out.println(requestURI);
// StringBuffer requestURL = request.getRequestURL();
// System.out.println(requestURL.toString());
//6. 获取协议及版本:
String protocol = request.getProtocol();
System.out.println(protocol);
//7. 获取客户机的IP地址:
String remoteAddr = request.getRemoteAddr();
System.out.println(remoteAddr);
Enumeration<String> headerNames = request.getHeaderNames();
//2、遍历
while(headerNames.hasMoreElements()){
String name = headerNames.nextElement();
//通过name获取value
String value = request.getHeader(name);
System.out.println(name + "---" + value);
}
//1、获取一个BufferedReader字符缓冲读流
BufferedReader reader = request.getReader();
//2、循环读数据
String line = null;
while((line = reader.readLine())!=null){
System.out.println(line);
}
}
}
- 获取请求参数
http://localhost:8080/day18_war_exploded/servletDemo3?username=21312&hoppy=2,2,2
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.Part;
import java.io.IOException;
import java.util.Arrays;
import java.util.Enumeration;
import java.util.Map;
@WebServlet("/servletDemo3")
public class ServletDemo3 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//根据参数名称获取参数值
String username = request.getParameter("username");
System.out.println(username);
System.out.println("____________________");
//根据参数名称获取参数值的数组
String[] hoppies = request.getParameterValues("hoppy");
System.out.println(String.join(",", hoppies));
System.out.println("____________________");
//获取所有请求的参数名称
Enumeration<String> parameterNames = request.getParameterNames();
System.out.println(parameterNames);
// 遍历所有参数名
while (parameterNames.hasMoreElements()) {
String paramName = parameterNames.nextElement();
// 获取参数值(单个值)
String paramValue = request.getParameter(paramName);
System.out.println(paramName + " = " + paramValue);
// 如果参数可能有多个值(如复选框),使用 getParameterValues
String[] paramValues = request.getParameterValues(paramName);
if (paramValues != null && paramValues.length > 1) {
System.out.println(paramName + " = " + Arrays.toString(paramValues));
}
}
//获取所有参数的map集合
Map<String, String[]> parameterMap = request.getParameterMap();
for (String s : parameterMap.keySet()) {
System.out.println("key->" + s + " ,value->" + String.join(",", parameterMap.get(s)));
}
//解决:在获取参数前,设置request的编码
request.setCharacterEncoding("utf-8");
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
}
- 设置请求参数
@WebServlet("/servletDemo4")
public class ServletDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("12311");
//setAttribute(String name,Object obj):存储数据
//servletDemo4跟servletDemo5公用request;
request.setAttribute("name","name");
RequestDispatcher name = request.getRequestDispatcher("/servletDemo5");
name.forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/servletDemo5")
public class ServletDemo5 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//getAttribute(String name):通过键获取值
System.out.println("123");
Object name = request.getAttribute("name");
System.out.println(name);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
- 获取上下文路径,也就是配置的一级菜单,可用来区分服务。
@WebServlet("/requestDemo4")
public class RequestDemo4 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String method = request.getMethod();
System.out.println(method);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String contextPath = request.getContextPath();
System.out.println(contextPath);
}
}
- 服务器端转发(Forward)
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/requestDemo8")
public class RequestDemo8 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo8......");
// //1、通过request对象获取请求转发器对象
// RequestDispatcher requestDispatcher = request.getRequestDispatcher("/requestDemo9");
// //2、转发
// requestDispatcher.forward(request,response);
//存储数据
request.setAttribute("name","zs");
//移除键值对
request.removeAttribute("name");
request.getRequestDispatcher("/requestDemo9").forward(request,response);
// request.getRequestDispatcher("http://www.baidu.com").forward(request,response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/requestDemo9")
public class RequestDemo9 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("demo9......");
//获取数据
String name = (String) request.getAttribute("name");
System.out.println(name);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
| 特性 | 转发(Forward) | 重定向(Redirect) |
|---|---|---|
| API调用 | request.getRequestDispatcher().forward(); | response.sendRedirect() |
| 浏览器感知 | 不知道发生了转发,URL 不变 | 知道发生了跳转,URL 会改变为新的地址 |
| 请求对象 | 同一个request对象(数据可共享) | 生成新的request对象(原数据丢失) |
| 执行位置 | 服务器内部完成 | 客户端(浏览器)参与,发送两次请求 |
| 应用场景 | 页面跳转、控制器分发逻辑 | 避免表单重复提交、跨应用跳转 |
- 获取一个ServletContext对象
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet("/requestDemo10")
public class RequestDemo10 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取一个ServletContext对象
ServletContext servletContext = request.getServletContext();
System.out.println(servletContext);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
this.doPost(request,response);
}
}
用到的jar
javax.servlet.jar
更多推荐
所有评论(0)