zoukankan      html  css  js  c++  java
  • ServletHTTP请求、响应处理

    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();
    }
    }
    }

      

      

  • 相关阅读:
    【深入理解 Java 虚拟机】2. 自动内存管理
    【深入理解 Java 虚拟机】1. 走进 Java
    【JVM】体系结构和底层原理
    【JVM】JVM 入门与基础总结
    ios 个推推送集成
    iOS UIWebView 和 WKWebView 的 cookie 获取,设置,删除
    CUICatalog: Invalid asset name supplied: '(null)'
    iOS 警告收集快速消除
    ios 你必须了解的系统定义宏使用
    ios 开发常用函数
  • 原文地址:https://www.cnblogs.com/liuping/p/2221796.html
Copyright © 2011-2022 走看看