Servlet&HTTP&Request笔记

it2026-09-04  4

Servlet&HTTP&Request笔记

Servlet :

Servlet的体系结构:

Servlet – 接口 |实现 GenericServlet – 抽象类 |继承 HttpServlet – 抽象类

GenericServlet:将Servlet接口中其他的方法做了默认空实现,只将service()方法作为抽象,将来定义Servlet类时,可以继承GenericServlet,实现service()方法即可。HttpServlet:对http协议的一种封装,简化操作 定义类继承HttpServlet复写doGet/doPost方法

Servlet相关配置

urlpartten:Servlet访问路径一个Servlet可以定义多个访问路径:@WebServlet({"/d4","/dd4","/ddd4"}) 路径定义规则: /xxx:路径匹配/xxx/xxx:多层路径,目录结构*.do:扩展名匹配

HTTP:

概念:Hyper Text Transfer Protocol 超文本传输协议

传输协议:定义了客户端和服务器端通信时,发送数据的格式

特点:

基于TCP/IP的高级协议默认端口号:80基于请求/响应模型的:一次请求对应一次响应无状态的协议:每次请求之间相互独立,不能交互数据

历史版本:

1.0:每次请求响应都会建立新的连接1.1:复用连接

请求消息数据格式:

请求行: 请求方式 请求url 请求协议/版本 GET /login.html HTTP/1.1请求方式:HTTP协议有7种请求方式,常用的有两种GET: 请求参数在请求行中,在url后。请求的url长度是有限制的。不太安全。 POST: 请求参数在请求体中。请求的url长度是没有限制的。相对安全。 请求头:客户端浏览器告诉服务器一些信息 请求头名称: 请求值 常见的请求头: User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息 可以在服务器端获取该头的信息,解决浏览器的兼容性问题 Referer:http://localhost/login.html 告诉服务器,我(当前请求)从哪里来作用: 防盗链统计工作 请求空行: 空行,用于分割POST请求的请求头和请求体的请求体(正文): 封装POST请求消息的请求参数的

Request:

request对象和response对象的原理

request对象和response对象是由服务器创建的。我们来使用它们request对象是来获取请求消息,response对象是来设置响应消息

request对象继承体系结构:

ServletRequest – 接口 | 继承 HTTPServletRequest – 接口 | 实现 org.apache.catalina.connector.RequestFacade 类(tomcat)

request功能:

获取请求消息数据
获取请求行数据
GET /day14/demo1?name=zhangsan HTTP/1.1方法:

获取请求方式:GET

`String getMethod()`

(*)获取虚拟目录:/day14

String getContextPath()

获取Servlet路径:/demo1

String getServletPath()

获取get方式请求参数:name=zhangsan

String getQueryString()

(*)获取请求URI:/day14/demo1

String getRequestURI() StringBuffer getRequestURL() * URL:统一资源定位符:http://localhost/day14/demo1 * URI:统一资源标识符:/day14/demo1

获取协议及版本:HTTP/1.1

String getProtocol()

获取客户机的IP地址:

String getRemoteAddr()
获取请求头数据
方法:

通过请求头的名称获取请求头的值:

String getHeader(String name)

获取所有的请求头名称:

Enumeration<String> getHeaderNames()
获取请求体数据
请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数步骤:

获取流对象: 获取字符输入流,只能操作字符数据:

BufferedReader getReader()

获取字节输入流,可以操作所有类型数据:

ServletInputStream getInputStream()

再从流对象中拿数据

其他功能
获取请求参数通用方式:不论是get还是post请求方式都可以使用下列方法来获取请求参数
//根据参数名称获取参数值 String getParameter(String name) //根据参数名称获取参数值的数组 hobby=study&hobby=game String[] getParameterValues(String name) //获取所有请求的参数名称 Enumeration<String> getParameterNames() //获取所有参数的map集合 Map<String,String[]> getParameterMap() 中文乱码问题: * get方式:tomcat8已经将get方式乱码问题解决了 * post方式:会乱码解决:在获取参数前,设置request的编码request.setCharacterEncoding("utf-8");
请求转发:一种在服务器内部的资源跳转方式

步骤:

//通过request对象获取请求转发器对象 RequestDispatcher getRequestDispatcher(String path) //使用RequestDispatcher对象来进行转发 forward(ServletRequest request, ServletResponse response)

特点: 1. 浏览器地址栏路径不发生变化 2. 只能转发到当前服务器内部资源中 3. 转发是一次请求

共享数据:
域对象:一个有作用的范围的对象,可以在范围内共享数据request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据 方法:void setAttribute(String name, Object obj) //存储数据 Object getAttribute(String name) //通过键获取值 void removeAttribute(String name) //通过键移除键值对
获取ServletContext:
ServletContext getServletContext()
最新回复(0)