1.HttpServletRequest
当HTTP转发给Web容器处理时,Web容器会收集相关信息,并产生HttpServletRequest对象,使用这个对象可以取得所有HTTP请求中的信息。
处理请求时最基本的就是取得请求参数,可以使用getQueryString()取得请求的查询字符串,使用getParameter()取得请求参数的值。
String username = request.getParameter("name");(获取请求参数name的值)。getParameter()方法返回的是String对象,如果传来的是如“123”这样的字符串值,而需要处理的是基本数据类型,可以使用Integer.parseInt()方法转换。其他常用方法有getParameterValues()和getParameterNames()。
String[] values = request.getParameterValues("param");(param参数有多个值)。
如果想知道请求中有多少个请求参数,可以使用getParameterNames()方法:
Enumeration e = request.getParameterNames();
while(e.hasMoreElements()) {
String param = (String)e.nextElement();
out.println(param + "<br>");
}
getHeaderNames()方法可以取得浏览器所发出的所有标头值。
import java.io.*;import java.util.*;import javax.servlet.*;import javax.servlet.http.*;public class ShowHeader extends HttpServlet { protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Servlet ShowHeader</title>"); out.println("</head>"); out.println("<body>"); Enumeration e = request.getHeaderNames(); while (e.hasMoreElements()) { String param = (String) e.nextElement(); out.println(param + ": " + request.getHeader(param) + "<br>"); } out.println("</body>"); out.close(); } @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); }}
如果想要将请求转发给其他的Servlet,可以使用HttpServletRequest的getRequestDispatcher()方法取得RequestDIspatcher对象。之后执行foward()方法转发请求。
RequestDispatcher dispatcher = request.getRequestDispatcher("some.do");
dispatcher.foward(request, response);
执行foward()之前不能对浏览器有确认(commit)的回应(也就是真正的HTTP回应给浏览器)。
在请求转发的过程中,如果有需要共享的数据或对象,可以将之设置为请求范围属性(Request Scope Attribute)。
List books = bookDAO.query("some books");
request.setAttribute("books", books);
request.getRequestDispatcher("result.view").foward(request, response);
则在负责响应的servlet中可以使用getAttribute()取得查询结果:
List books = (List)request.getAttribute("books");
2.HttpServletResponse
多数情况下,setContentType()和getWriter()是在编写响应servlet时要使用的方法。setContentType()必须在任何响应确认之前执行。
sendRedirect()可以要求浏览器重新请求另一个URL,这个方法会在回应中设置HTTP状态码301以及Location标头,浏览器接收到这个标头后会使用GET方法请求指定的URL,这个方法必须在响应未确认之前执行。
大部分情况下,我们会从HttpServletResponse对象取得PrinterWriter对象,使用println()对浏览器进行字符输出,有时需要直接对浏览器进行字节输出,可以利用getOutputStream()方法取得ServletOutputStream对象。
import java.io.*;import javax.servlet.*;import javax.servlet.http.*;public class Ebook extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String passwd = request.getParameter("passwd"); if("123456".equals(passwd)) { response.setContentType("application/pdf"); InputStream in = this.getServletContext() .getResourceAsStream("/WEB-INF/jdbc.pdf"); OutputStream out = response.getOutputStream(); byte[] buffer = new byte[1024]; int length = -1; while((length = in.read(buffer)) != -1) { out.write(buffer, 0, length); } in.close(); out.close(); } }}
来源:https://www.cnblogs.com/liuping/archive/2011/10/23/2221796.html