servlet_Request_Response
Posted zenyang-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了servlet_Request_Response相关的知识,希望对你有一定的参考价值。
HTTP 超文本传输协议
http协议由http请求和http响应组成
Servlet: server applet
使用Java语言编写的运行在服务器端的小程序Servlet是一种规范,本质就是一种接口定义了Java类被浏览器访问到Tomcat的规则
Servlet 本质是一个接口类, 有抽象方法 谁使用/访问web资源,谁来实现抽象方法
一个servlet类可以映射多个路径
一个路径不能映射多个servlet类
servlet规范:包含三个技术点:servlet技术,filter(过滤器)技术,listener(监听器)技术
ServletContext对象
ServletContext是一个域对象,因为它随着服务器的启动而创建,服务器的关闭而销毁,所以存放在ServletContext中的数据是整个web应用所共享的
/获取ServletContext对象容器 //ServletContext对象生命周期 //创建 当前的web应用被部署到服务器上的时候就已经创建出来了 //销毁 web服务器关闭的时候 或者web应用被服务器移除的时候 //servlet生命周期 //创建 当前的servlet第一次被访问的时候创建 //销毁 服务器关闭的时候, 调用destory()方法的时候,当前servlet类被修改的时候,之前创建的servlet对象就被销毁的 紧接着Tomcat会创建一个新的servlet对象 //你的web应用被第二次部署的时候,之前的Tomcat创建的servlet对象会被销毁 ServletContext context = req.getServletContext(); //存储 查找 删除 //存储 setAttribute() context.setAttribute("num",1);//key value 键值对数据格式 System.out.println(context); //查找 Object num = context.getAttribute("num"); System.out.println(num); //删除 context.removeAttribute("num");
Get请求:
包含请求行:localhost:8080/虚拟路径/映射资源
请求头:
连接的方式 长连接
Connection: keep-alive
则是告诉服务器,自己支持这种操作,也就是我能读
懂你服务器发过来的上面这条信息,并且在以后发请求
的时候不用http而用https
Upgrade-Insecure-Requests: 1
Referer: http://localhost:8080/BigData/a.html referer1.防盗链 2.统计流量
请求空行
请求体:get没有请求体
//获取请求方式 String method = request.getMethod(); System.out.println("请求方式:"+method); //获取请求的URI信息 String requestURI = request.getRequestURI(); System.out.println("请求uri信息:"+requestURI); //获取请求的url信息 StringBuffer requestURL = request.getRequestURL(); System.out.println("请求URL信息:"+requestURL); //获取请求协议版本号 int localPort = request.getLocalPort(); System.out.println("请求协议版本号:"+localPort); //获取请求的web应用名称 --->虚拟目录 String contextPath = request.getContextPath(); System.out.println("虚拟路径:"+contextPath); //获取get请求的表单数据 String queryString = request.getQueryString(); System.out.println("表单数据:"+queryString); //获取客户端主机的IP地址 String remoteAddr = request.getRemoteAddr(); System.out.println("客户端主机IP:"+remoteAddr); //获取请求的资源路径 String servletPath = request.getServletPath(); System.out.println("请求资源路径:"+servletPath); //获取请求端口号的信息 tomcat int serverPort = request.getServerPort(); System.out.println("请求端口号:"+serverPort); System.out.println("--------------"); String referer = request.getHeader("referer"); System.out.println("获取跳转到服务器内部的原地址"+referer); String connection = request.getHeader("Connection"); System.out.println("获取连接方式"+connection); //迭代获取所有头名称 Enumeration<String> headerNames = request.getHeaderNames(); while (headerNames.hasMoreElements()){ String s = headerNames.nextElement(); System.out.println(s); } //获取请求体中的内容 get方式是没有的 ,但是getParameter()适用于get请求方式 String username = request.getParameter("username"); System.out.println(username); //获取请求体中 同一个name对应的多个value值 String[] hobbies = request.getParameterValues("hobby"); for (String hobby : hobbies) { System.out.println(hobby); } //获取所有的name Enumeration<String> parameterNames = request.getParameterNames(); while (parameterNames.hasMoreElements()){ String s = parameterNames.nextElement(); System.out.println(s); } //获取所有信息 Map<String, String[]> map = request.getParameterMap(); Set<String> strings = map.keySet(); for (String string : strings) { System.out.println(string +"="+ Arrays.toString(map.get(string)) );
//请求转发
内部转发客户端浏览器的地址不会发生改变,因为自始至终客户端只发送一个请求
通过内部转发路径一定要注意,因为操作过程是在服务器内部进行操作的,所以地址就不能够是客户端地址,而应该是服务器端地址,路径不能再写web应用的名称,/就web应
用的根目录通过内部转发,两个servlet或者两个界面的接收到的request内的内容是相同的因为内部转发是在服务器内部做的处理,所以内部转发是可以直接访问到WEBINF下的内容的
//获取内部转发器 RequestDispatcher dispatcher = request.getRequestDispatcher("/index.jsp"); //进行转发 dispatcher.forward(request, response); //通常是连写 request.getRequestDispatcher("/index.js p").forward(request, response);
以上是关于servlet_Request_Response的主要内容,如果未能解决你的问题,请参考以下文章