1.Tomcat、Servlet与Http协议
最终tomcat将http请求进行对应的响应,动态资源部分由servlet来实现,servlet在底层维护hashmap数组<k,v>键值对的形式,需要web.xml文件中的内容,最终结果也需要tomcat来响应,这个过程中,http协议的请求包与响应包十分重要,详见专题:Http协议-WEB开发通信协议(贴链接,暂时还没有整理出来)
2.ServletConfig
config:配置
ServletConfig就是为Servlet配置信息的类,由tomcat在创建Servlet程序时候创建一个ServletConfig对象
作用:得到Servlet的配置信息如name;初始化参数(init-param);获取ServletContext对象
3.ServletContext对象-域对象
web 工程启动的时候创建ServletContext对象,可以被一个web工程中的多个Servlet程序共享,(域的概念)可以实现多个Servlet之间的数据交流,该对象唯一,相关数据存放在内存中,自然的在 web 工程停止时销毁。
获取:ServletConfig.getServletContext() 或者是 this.getServletContext()
作用:获取 web.xml 中配置的上下文参数 (context-param ),参数信息和整个 web 应用相关,而非属于某一个Servlet; 获取当前web的工程路径; 获取工程部署后在服务器硬盘上的绝对路径;实现多个Servlet之间数据交流等。
servletContext.getInitParameter("xxx");xxx指的是key值
getContextPath()获取当前web的工程路径
4.HttpServletRequest
客户端请求信息http请求所对应的对象,通过具体的API方法实现对信息的处理
常用方法:
1. getRequestURI() 获取请求的资源路径 http://localhost:8080
2. getRequestURL() 获 取 请 求 的 统 一 资 源 定 位 符 绝 对 路 径 http://localhost:8080/工程名字/请求 的资源名
3. getRemoteHost() 获取客户端的主机(ip:prot)
4. getHeader() 获取请求头
5. getParameter() 获取请求的参数 ps:遇到中文乱码:setCharacterEncoding("utf-8")
6. getParameterValues() 获取请求的参数(多个值的时候使用,例如返回一个数组)
7. getMethod() 获取请求的方式 GET 或 POST
8. setAttribute(key, value); 设置域数据
9. getAttribute(key); 获取域数据
10. getRequestDispatcher() 获取请求转发对象
5.请求转发
一个web一次请求,由多个资源(Servlet/静态)来处理,比如:aaaServlet将http请求内容转发到其他资源,tomcat(服务器)去找,这个过程中与浏览器无关,始终只有一次请求,在一个web工程中进行转发,所以不可以访问当前web工程之外的资源
getRequestDispatcher(“/转发的资源”) .forward(request,response);
此时“/资源”中的/由tomcat,也就是服务器解析,解析成localhost:8080//-->具有分析见后续的工程路径专题(链接,暂时还没有梳理出来)
一个问题:支付界面我们使用请求转发会出问题。因为浏览器地址栏会停止在第一个 servlet ,如果你刷新页面,会再次发出请求(并且会 带数据), 所以在支付页面情况下,不要使用请求转发,否则会造成重复支付
怎么解决:请求重定向方法
6.HttpServletResponse
HttpServletRequest 表示请求过来的信息,而HttpServletResponse 表示所有响应的信息, 如果需要设置返回给客户端的信息,通过 HttpServletResponse 对象掉用对应的方法即可(字节字符二选一)
1. 字节流 getOutputStream(); 往往用来处理二进制数据
OutputStream outputStream = socket.getOutputStream(); //复习 如何读取文件内容io+网络编程 // 得到文件输入流(字符输入流), 和 src/hello.html BufferedReader bufferedReader = new BufferedReader(new FileReader("src/hello.html")); String buf = ""; // 循环读取 hello.html while ((buf = bufferedReader.readLine())!=null) { outputStream.write(buf.getBytes()); } outputStream.close(); socket.close();
2. 字符流 getWriter(); 用于回传字符串
response.setContentType("text/html;charset=utf-8");//解决响应的中文乱码问题,注意要在getWriter之前设置
PrintWriter writer = response.getWriter();
writer.println("xxxxxxx");
7.请求重定向
一个 web 资源收到客户端请求后,通知客户端去访问另外一个 web 资源
请求重定向本质是两次 http 请求. 所以不能共享 Request 域中的数据,本质是两次 http 请求,会生成两个 HttpServletRequest 对象 ,同时可以重定向到 Web 工程以外的资源。
多次http请求与响应,第一次返回302状态码与新的location用于下一次的http请求。
标签:web,网页,请求,获取,转发,http,动态,Servlet From: https://www.cnblogs.com/zitw/p/17026205.html