JavaWeb总结(六)

获取原始表单数据

  - POST请求不仅可以传输文本信息还可以传输二进制数据 

  - 如果想得到请求中参数的原始字节数据,可以使用HttpServletRequest对象提供的getInputSteam()或getReader()方法直接访问表单数据

  获取原始表单数据的两种情况

    - 数据不是由HTML表单提交,而是来自某个客户端程序,需要自己读取和分析这些数据。

    - 数据来自于上传的文件时,需要自己读取数据

请求派发

  - 每个客户的请求可以传递给很多Servlet以及Web应用程序中的其它资源

  - 整个过程完全是在服务器端完成

  - 不需要任何客户端浏览器的行为

  - 不需要在客户端浏览器和服务器端之间传递特殊信息 

  - 通过javax.servlet.RequestDispatcher对象实现 

提示:重定向让客户端浏览器来完成,而请求派发是在服务器端做工作 

请求派发的实现

  - 调用ServletRequest对象的方法:

  - getRequestDispatcher(path):方法返回给定路径的RequestDispatcher对象 

  - getNamedDispatcher(name) :返回某个名称的Servlet的RequestDispatcher对象 

提示:RequestDispatcher对象还可以通过ServletContext对象的getRequestDispatcher()得到,路径值必须是以根目录"/"开始

- RequestDispatcher对象提供了两种方法:

- forward(ServletRequest, ServletResponse):派发请求和响应对象到RequestDispatcher 对象所确定的新资源(Servlet、JSP或者HTML等) 

- include(ServletRequest, ServletResponse)该方法关键是能包含服务器端的资源 

request.getRequestDispatcher("/sucess.html").include(request, response); 

request.getRequestDispatcher("/sucess.html").forward(request, response); 

 

forward跳转示意图

 

include包含示意图

请求范围 

  - 变量可以保存在请求范围中

  - 在请求范围之外就不能进行访问了

public class Servlet1 extends HttpServlet {
    private static final long serialVersionUID = 1L;
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        request.setAttribute("key", "value");
        //重定向跳转到Servlet2,Servlet2获取的值为null
        //response.sendRedirect("Servlet2");
        //forward跳转到Servlet2,Servlet能获取值为value
        //request.getRequestDispatcher("Servlet2").forward(request, response);
    }

    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

public class Servlet2 extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.err.println(request.getAttribute("key"));
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // TODO Auto-generated method stub
    }

}

 

我不作恶

但有权拒绝为善

我不赞同

但是我捍卫你不为善的权力

原文地址:https://www.cnblogs.com/HackerBlog/p/5956018.html