获取请求行信息的相关方法
@WebServlet(name = "RequestLineServlet",urlPatterns = "/requestLine")
public class RequestLineServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 获取请求行的相关信息
out.println("getMethod : " + request.getMethod() + "<br>");
out.println("getRequestURI : " + request.getRequestURI() + "<br>");
out.println("getQueryString:"+request.getQueryString() + "<br>");
out.println("getProtocol : " + request.getProtocol() + "<br>");
out.println("getContextPath:"+request.getContextPath() + "<br>");
out.println("getPathInfo : " + request.getPathInfo() + "<br>");
out.println("getPathTranslated : "
+ request.getPathTranslated() + "<br>");
out.println("getServletPath:"+request.getServletPath() + "<br>");
out.println("getRemoteAddr : " + request.getRemoteAddr() + "<br>");
out.println("getRemoteHost : " + request.getRemoteHost() + "<br>");
out.println("getRemotePort : " + request.getRemotePort() + "<br>");
out.println("getLocalAddr : " + request.getLocalAddr() + "<br>");
out.println("getLocalName : " + request.getLocalName() + "<br>");
out.println("getLocalPort : " + request.getLocalPort() + "<br>");
out.println("getServerName : " + request.getServerName() + "<br>");
out.println("getServerPort : " + request.getServerPort() + "<br>");
out.println("getScheme : " + request.getScheme() + "<br>");
out.println("getRequestURL : " + request.getRequestURL() + "<br>");
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
在这里插入图片描述
获取请求消息头的相关方法
@WebServlet(name = "RequestHeadersServlet",urlPatterns = "/requestHeaders")
public class RequestHeadersServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws IOException {
response.setContentType("text/html;charset=utf-8");
PrintWriter out = response.getWriter();
// 获取请求消息中所有头字段
Enumeration headerNames = request.getHeaderNames();
// 使用循环遍历所有请求头,并通过getHeader()方法获取一个指定名称的头字段
while (headerNames.hasMoreElements()) {
String headerName = (String) headerNames.nextElement();
out.print(headerName + " : "
+ request.getHeader(headerName)+ "<br>");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
1.1.3获取请求参数
前端代码
<form action="/day16/requestParams" method="POST">
用户名:<input type="text" name="username"><br>
密 码:<input type="password" name="password">
<br>
爱好:
<input type="checkbox" name="hobby" value="sing">唱歌
<input type="checkbox" name="hobby" value="dance">跳舞
<input type="checkbox" name="hobby" value="football">足球<br>
<input type="submit" value="提交">
</form>
后端代码
@WebServlet(name = "RequestParamsServlet",urlPatterns = "/requestParams")
public class RequestParamsServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response) {
String name = request.getParameter("username");
String password = request.getParameter("password");
System.out.println("用户名:" + name);
System.out.println("密 码:" + password);
// 获取参数名为“hobby”的值
String[] hobbys = request.getParameterValues("hobby");
System.out.print("爱好:");
for (int i = 0; i < hobbys.length; i++) {
System.out.print(hobbys[i] + ", ");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response) {
doGet(request, response);
}
}
传递数据的方法
- setAttribute()
该方法用于将一个对象与一个名称关联后存储进ServletRequest对象中
- getAttribute()
该方法用于从ServletRequest对象中返回指定名称的属性对象
- removeAttribute()
该方法用于从ServletRequest对象中删除指定名称的属性
- getAttributeNames()
该方法用于返回一个包含ServletRequest对象中的所有属性名的Enumeration对象,在此基础上,可以对ServletRequest对象中的所有属性进行遍历处理
- getServletContext()
获取全局域对象
- getRequestDispatcher(String path)
返回封装了某个路径所指定资源的RequestDispatcher对象。其中,参数path必须以 “/”开头,用于表示当前Web应用的根目录。需要注意的是,WEB-INF目录中的内容对RequestDispatcher对象也是可见的,因此,传递给getRequestDispatcher(String path)方法的资源可以是WEB-INF目录中的文件
- forward(ServletRequest request,ServletResponse response)
该方法用于将请求从一个Servlet传递给另外的一个Web资源。在Servlet中,可以对请求做一个初步处理,然后通过调用这个方法,将请求传递给其它资源进行响应。需要注意的是,该方法必须在响应提交给客户端之前被调用,否则将抛出IllegalStateException异常- include(ServletRequest request,ServletResponse response)
该方法用于将其它的资源作为当前响应内容包含进来
请求转发
在Servlet中,如果当前Web资源不想处理请求时,可以通过forward()方法将当前请求传递给其它的Web资源进行处理,这种方式称为请求转发
被请求页面
@WebServlet(name = "RequestParamsServlet",urlPatterns = "/requestParams")
public class RequestForwardServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
response.setContentType("text/html;charset=utf-8");
// 将数据存储到request对象中
request.setAttribute("company", "北京传智播客教育有限公司");
RequestDispatcher dispatcher = request
.getRequestDispatcher("/result");
dispatcher.forward(request, response);
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws ServletException, IOException {
doGet(request, response);
}
}
被转发页面
@WebServlet(name = "ResultServlet",urlPatterns = "/result")
public class ResultServlet extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)throws IOException {
response.setContentType("text/html;charset=utf-8");
// 获取PrintWriter对象用于输出信息
PrintWriter out = response.getWriter();
// 获取request请求对象中保存的数据
String company = (String) request.getAttribute("company");
if (company != null) {
out.println("公司名称:" + company + "<br>");
}
}
public void doPost(HttpServletRequest request,
HttpServletResponse response)throws IOException {
doGet(request, response);
}
}