zoukankan      html  css  js  c++  java
  • Servlet13—— ServletRequest

    问题引入

    1、前端的页面发送的请求方式应当和服务器端需要的请求方式一致

    • 服务器需要前端发送POST请求,那前端就应该发送POST请求,若发送GET请求,服务器应当提示错误信息。
    • 服务器需要前端发送GET请求,那前端就应该发送GET请求,若发送POST请求,服务器应当提示错误信息。

    2、怎么完成以上的需求?

    在javaweb程序中想办法获取该请求是什么类型的请求,POST?还是GET?

    当我们获取到请求方式之后,在javaweb程序中可以使用java语言中if语句进行判断

    if( "POST".equals(method)){
    
    }else if("GET".equals(method)){
    
    }

    3、怎么在jaxaweb程序中获取请求方式?

    重点:HTTP的请求协议全部信息被自动封装到javax.servlet.http.HttpServletRequest对象中

    在HttpServletRequest接口类型中有一个方法叫做: String getMethod(); 可以获取请求方式。

    public interface javax.servlet.http.HttpServletRequest extends ServletRequest{

    }

    HttpServletRequest对象详解

    javax.servlet.http.HttpServletRequestSUN制定的Servlet规范,是一个接口。表示请求HTTP请求协议”的完整内容都被封装到request对象中,HttpServletRequest接口的父接口是javax.servlet.ServletRequest

    Apache软件基金会开发的“Tomcat容器”对javax.servlet.http.HttpServletRequest接口的实现类完整类名是org.apache.catalina.connector.RequestFacade,但是我们javaweb程序员不需要关心具体的请求对象类型,不需要关心是哪个容器,我们只需要面向HttpServletRequest接口调用方法即可。

    一次请求对应一个请求对象,请求开始,请求对象被创建,请求结束,请求对象被回收,下一次请求的时候是一个新的请求对象。如何理解一次请求:从用户发送请求开始,到网页最终停下来,这是一次完整的请求(除重定向之外

    ServletContext是Servlet上下文对象,该接口中也有这样几个方法:

    void setAttribute(String name, Object o) //向ServletContext范围中添加数据

    void getAttribute(String name) //向ServletContext范围中读取数据

    void removeAttribute(String name) //移除ServletContext范围中数据

    SerletContext范围是所有用户共享的一个范围对象,我们一般吧ServletContext命名为application,可见这个对象代表一个应用。一个webapp只有一个这样的对象,范围极大。

    而HttpServletRequest类型的变量通常命名为request,代表当前的本次请求。一次请求对应一个request对象,100个请求对应100个请求对象。请求范围是极小的,request只能完成在同一次请求中传递数据。 例如,如果在服务器上有AServlet和BServlet两个对象,在AServlet中用setAttribute添加一个数据,在BServlet中并不能将其取出。如想能实现取出,需要实现“跳转”,执行AServlet之后,跳转到BServlet执行,将ASerlet执行和BServlet执行放到同一个请求当中,必须使用转发技术。

    forword【转发】

    1、获取请求转发器对象

    RequestDispatcher dispatcher = request.getRequestDispatcher("/b");

    2、调用转发器对象的forword方法即可实现转发

    dispatcher.forward(request, response);

    HttpServletRequest接口中常用的方法

    1、获取参数Map

    Map<String,String[]> parameterMap = request.getParameterMap();

    2、获取参数Map的所有key,获取所有参数的name

    Enumeration<String> parameterNames = request.getParameterNames();

    3、通过参数Map集合的key获取参数Map集合的valuevalue是一个字符串类型的一维数组)用于获取复选框提交的数据

    String[] parameterValues = request.getParameterValues(String name);

    4、通过用户提交的参数name获取参数value最常用的方法)

    String value = request.getParameter(String name);

    5、向HttpServletRequest对象中存储数据(绑定)

    request.setAttribute(String name,Object obj);

    6、从HttpServletRequest对象中获取数据(读取数据)

    Object obj = request.getAttribute(String name);

    7、移除HttpServletRequest对象中的数据

    request.removeAttribute(String name);

    8、使用request对象完成转发(转发是一次请求,一次请求跨越多个Servlet

    request.getRequestDispatcher(资源路径).forward(request,response);

    9、转发的代码下边不能再编写转发的程序。

    转发的下一个资源可能是:JSPServletHTML等。

    获取客户端的IP地址

    String clientIP = request.getRemoteAddr();

    10、获取URI

    String uri = request.getRequestURI();

    11、获取URL

    StringBuffer url = request.getRequestURL();

    12、获取Servlet Path

    String servletPath = request.getServletPath();

    13、获取应用程序的根路径,获取应用上下文路径(webapp的根路径)

    String contextPath = request.getContextPath();

    14、解决请求体中的乱码问题(在从request对象中获取任何数据之前设置有效)

    request.setCharacterEncoding(“GB18030”);

    15、在服务器端获取用户发送的请求中的所有Cookie

    Cookie[] cookies = request.getCookies();

    16、获取会话对象session

    HttpSession sessoin = request.getSessoin();  获取session对象,如果获取不到则开启新session

    HttpSession sessoin = request.getSession(true);   获取session对象,如果获取不到则开启新session

    HttpSession sessoin = request.getSession(false);  获取session对象,如果获取不到则返回null

    HttpServletRequest对象是一个请求级别的对象,一次请求一个对象,所以request对象只能完整在同一次请求中进行数据的传递,可以跨越多个Servlet进行数据的传递,但是必须使用转发机制。如果request对象和ServletContext对象都可以完成此功能,我们优先选择request范围。(到此为止我们已经讲过两个范围对象:ServletContextHttpServletRequest)。request不能完成跨用户传递数据。只能完成在一次请求中传递数据。

     

    转载请注明出处:https://www.cnblogs.com/stu-jyj3621
  • 相关阅读:
    微信公众平台开发入门教程
    Android中自定义View和自定义动画
    asp.net实现大视频上传
    网页大文件上传解决方案
    php大文件上传解决方案
    asp.net大文件上传解决方案
    asp.net上传超大文件
    JSP上传整个文件夹
    超大文件上传方案(PHP)
    超大文件上传方案(ASP.NET)
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14366663.html
Copyright © 2011-2022 走看看