当前位置:   article > 正文

JavaWeb Tomcat (四)HttpServletRequest_tomcat requestfacade怎么拿到真实的request

tomcat requestfacade怎么拿到真实的request

动力节点JavaWeb视频
从底层源码开始讲起, 讲解的非常详细,对比过尚硅谷的视频,推荐动力节点。
视频是直播的录像,有些时候比较啰嗦,尤其到EL表达式之后,1小时的内容能讲3小时。

系列文章目录

获得GET/POST请求的数据

  • HttpServletRequest类提供的方法:
Map<String,String[]> getParameterMap()     	这个是获取Map集合
Enumeration<String> getParameterNames() 	这个是获取Map集合中所有的key
String[] getParameterValues(String name) 	根据key获取Map集合的value
String getParameter(String name)  			获取value这个一维数组当中的第一个元素。这个方法最常用。
  • 1
  • 2
  • 3
  • 4
  • 示例:
    form表单,发送请求时以/开头要带项目名
    在这里插入图片描述
  • 浏览器向后端提交的数据(GET/POST只是提交的方式不一样数据是相同的):
username=servlet&pwd=123456&aihao=smoke&aihao=drink&aihao=head
  • 1
  • 代码
        out.write("<h4>通过遍历Map集合得到的结果</h4></br>");
        Map<String, String[]> parameterMaps = request.getParameterMap();
        for (String s:parameterMaps.keySet()) {
            out.write("key:"+s+"------Value:"+ Arrays.toString(parameterMaps.get(s))+"</br>");
        }
 /*       
通过遍历Map集合得到的结果
	key:username	Value:[servlet]
	key:pwd			Value:[123456]
	key:aihao		Value:[smoke, drink, head]
*/
        out.println("<h4>通过getParameterNames();getParameterValues(name)得到的结果</h4>"+"</br>");
        Enumeration<String> parameterNames = request.getParameterNames();
        while(parameterNames.hasMoreElements()){
            String name = parameterNames.nextElement();
            String[] parameterValues = request.getParameterValues(name);
            out.println("key:"+name+"------Value:"+ Arrays.toString(parameterValues)+"</br>");
        }
/*
通过getParameterNames();getParameterValues(name)得到的结果
	key:username	Value:[servlet]
	key:pwd			Value:[123456]
	key:aihao		Value:[smoke, drink, head]
*/
        out.println("<h4>通过getParameterNames();getParameter(name)得到的结果</h4>"+"</br>");
        Enumeration<String> parameterNames1 = request.getParameterNames();
        while(parameterNames1.hasMoreElements()){
            String name = parameterNames1.nextElement();
            String parameterValue = request.getParameter(name);
            out.println("key:"+name+"------Value:"+ parameterValue+"</br>");
        }
/*
通过getParameterNames();getParameter(name)得到的结果
	key:username	Value:servlet
	key:pwd			Value:123456
	key:aihao		Value:smoke
*/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37

Requst请求域

作用:共享数据。在当次的Requst请求的生命周期中,将数据以键值对的形式,从Servlet发送到另一个Servlet或者HTML中。
注意
doGet();发送到都另一个Servlet的doGet();
doPost();发送到都另一个Servlet的doPost();

  • 方法
// 向请求域中绑定数据
request.setAttribute(String name, Object o);
// 发送数据
/* Path:发送到Servlet:< url-pattern >标签中的路径
		 发送到HTML: 从根开始的路径 */
request.getRequestDispatcher(String Path).forward(request,response);
// 接收数据
Object getAttribute(String name);
// 删除数据
void removeAttribute(String name);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 与ServletContext“应用域”比较:
Requst“请求域”ServletContext“应用域”
生命周期仅在一次Request请求内有效与Servlet的生命周期相同
共享数据格式类似MAP键值对类似MAP键值对
共享范围只能发送到指定Servlet或者HTML所有Servlet共享
  • 代码:
// 将当前时间通过Request请求域发送到URI为"/receive"的Servlet
public class SendRequest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Date date = new Date();
        req.setAttribute("nowTime",date);
        req.getRequestDispatcher("/receive").forward(req,resp);
        
        //发送到HTML,发送成功会自动打开页面,数据怎么用还不知道
        req.getRequestDispatcher("/index.html").forward(req,resp);
    }
}
// 获取Request请求域中绑定的数据
public class ReceiveRequest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter writer = resp.getWriter();
        Object nowTime = req.getAttribute("nowTime");
        writer.write("现在时间是:"+ nowTime);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22

Request常用方法

Tomcat 9以下 (包含9)乱码问题:
  • 解决Post请求的中文乱码问题: request.setCharacterEncoding("UTF-8");
  • Response向浏览器发送中文的乱码问题:response.setContentType("text/html;charset=UTF-8");
请求分析
  • 获取请求方式
			String method = request.getMethod();
			System.out.println("请求方式:" + method);
  • 1
  • 2
  • 返回请求URL
			StringBuffer requestURL = request.getRequestURL();
			System.out.println("URL: " + requestURL);
  • 1
  • 2
  • 返回请求URL中调用的IP地址
		    String localAddr = request.getLocalAddr();
		    System.out.println("本地IP地址: " + localAddr);
  • 1
  • 2
  • 返回请求URL中调用的服务器端口号
			int localPort = request.getLocalPort();
			System.out.println("本地端口号:" + localPort);
  • 1
  • 2
  • URI的组成:ContextPath + ServletPath + PathInfo
  • 返回请求URL中的URI部分
			String requestURI = request.getRequestURI();
			System.out.println("请求的URI部分:" + requestURI);
  • 1
  • 2
  • 返回请求URL中项目资源路径
		  	String contextPath = request.getContextPath();
		    System.out.println("请求的项目资源路径:" + contextPath);
  • 1
  • 2
  • 返回请求URL中调用servlet的部分
		    String servletPath = request.getServletPath();
		    System.out.println("请求的servlet部分:" + servletPath);
  • 1
  • 2
客户端
  • 返回客户端IP地址
			String remoteAddr = request.getRemoteAddr();
			System.out.println("客户端IP地址:" + remoteAddr);
  • 1
  • 2
  • 返回客户端端口号
			int remotePort = request.getRemotePort();
		    System.out.println("客户端端口号:" + remotePort);
  • 1
  • 2
  • 返回客户端主机名
			String remoteHost = request.getRemoteHost();
			System.out.println("客户端主机名:" + remoteHost);
  • 1
  • 2
  • 返回登录的用户名
			String remoteUser = request.getRemoteUser();
			System.out.println("登录的用户名:" + remoteUser);
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/繁依Fanyi0/article/detail/259469
推荐阅读
相关标签
  

闽ICP备14008679号