请求和响应过程:1、tomcat服务器会根据请求url中的资源路径,创建对应的Servlet实现类对象
2、tomcat服务器会自动创建request和response对象,request对象中封装请求消息数据
3、tomcat将request和response两个对象传递给service方法,并且调用service方法
4、程序员可以勇敢request对象获取请求消息数据,通过response对象设置响应消息数据
5、服务器在给浏览器作出响应之前,会从response对象中拿程序员设置的响应消息数据
Request对象的继承体系结构:
ServletRequest->HttpServletRequest->RequestFacade
request的功能
1、获取请求消息
获取请求行数据
例如:GET /Web_servlet/demo?name = user HTTP/1.1
方法:1、String getMethod()获取请求方式,GET
2、String getContextPath() 获取虚拟目录,/Web_ servlet
3、String getServeltPath()获取servlet路径,/demo
4、String getQueryString()获取get请求参数,name=user
5、String getRequestURI()获取请求URI,/Web_servlet/demo
6、String getRequesrURL()获取请求URL,http://localhost/Web_servlet/demo
7、String getProtocol()获取协议及版本,HTTP/1.1
8、String getRemoteAddr()获取客户端IP地址
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { /*request.getRequestDispatcher("/hello.jsp").forward(request,response);*/ String method = request.getMethod(); System.out.println(method); String contextPath = request.getContextPath(); System.out.println(contextPath); String servletPath = request.getServletPath(); System.out.println(servletPath); String queryString = request.getQueryString(); System.out.println(queryString); String requestURI = request.getRequestURI(); System.out.println(requestURI); StringBuffer requestURL = request.getRequestURL(); System.out.println(requestURL); String protocol = request.getProtocol(); System.out.println(protocol); String remoteAddr = request.getRemoteAddr(); System.out.println(remoteAddr); }
获取请求头数据
方法:1、String getHeader(String name):通过请求头的名称获取请求头的值
2、Enumeration<String> getHeaderNames():获取所有的请求头名称
获取请求体数据
通过POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
步骤:1、获取流对象
BufferedReader getReader():获取字符输入流,只能操作字符数据
ServletInputStream getInputStream():获取字节输入流,可以操作所有类型的数据
2、再从流对象中拿数据
2、其他功能
获取请求参数通用方法:1、String getParameter(String name)根据参数名称获取参数值
2、String[] getParameterValues(String name):根据参数名称获取参数值的数组
3、Enumeration<String[]> getParameterNames():获取所有请求的参数名称
4、Map<String ,String[] >getParameterMap():获取所有参数的map集合
注意:中文乱码问题:POST方式发送中文请求会产生乱码,解决方法:设置流的编码,request.setCharacterEncoding("UTF-8");
请求转发:一种在服务器内部的资源跳转方式
步骤:1、通过request对象获取请求转发器对象:requsetDispatcher getRequsetDispatcher(String path)
2、使用RequsetDispatcher对象来进行转发:forward(ServletRequset requset,ServletResponse response)
特点:1、浏览器地址栏路径不发送变化
2、只能转发到当前服务器内部资源中
3、转发是一次请求
共享数据:
域对象:一个有作用范围的对象,可以在范围内共享数据
request:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:1、setAttribute(String name ,Object obj):存储数据
2、getAttribute(String name):通过键获取值
3、removeAttribute(String name):通过键移除数据
获取servletContext:
方法:getServletContext();