Servlet
1.Servlet3.0 注解配置,创建web项目时不用创建web.xml
2.实现Servlet接口,继承GenericServlet或者继承HttpServlet
继承GenericServlet,实现service()方法即可,一般不用
继承HttpServlet,重写doGet和dePost方法
HttpServlet是对http协议的一种封装
3.Servlet相关配置
urlpartten:访问路径。一个Servlet可以定义多个访问路径,一般定义一个。@WebServlet({"/d4","/dd4","/ddd4"})
HTTP
超文本传输协议
特点:
1.基于TCP/IP的高级协议
2.默认端口号是80
3.一次请求对应一次响应
4.每次请求相互独立
历史版本:
1.0:效率低,速度慢,每次请求都会建立新的连接
1.1:复用连接,使用上一次的连接
请求消息数据格式
1. 请求行
请求方式 请求url 请求协议/版本
GET /login.html HTTP/1.1
请求方式:(面试题)
GET:
1.请求参数在请求行中,在url后
2.请求的url长度有限制
3.不太安全
POST:
1.请求参数在请求体中
2.请求的url长度没有限制
3.相对安全
2.请求头:客户端告诉服务器信息
请求头名称:请求头值
常见的请求头
1.user-Agent:浏览器告诉服务器,使用浏览器版本信息
可以在服务器端获取该头的信息,解决浏览器的兼容性问题
2.Referer:http://localhost/login.html
告诉服务器,从哪来。可以防盗链和统计工作
3.请求空行
空行,用于分割POST请求的请求头和请求体
4.请求体(正文)
封装POST请求的请求参数
Request
1.request和response对象的原理
都是由服务器创建。request对象获取请求消息,response对象设置响应消息
2.request对象继承体系结构:
ServletRequest -- 接口
| 继承
HttpServletRequest -- 接口
| 实现
org.apache.catalina.connector.RequestFacade 类(tomcat)
3.request功能:
1.获取请求消息数据
1. 获取请求行数据
方法:
1.获取请求方式:GET
String getmethod()
2.获取请求虚拟目录:/day14
String getContextPath()
3.获取Servlet路径:/requestDemo1
String getServletPath()
4.获取get方式请求参数:name=zhangsan
String getQueryString()
5.获取请求URI:/day14/requestDemo1
String getRequestURI()
StringBuffer getRequestURL()
URL:统一资源定位符 http://localhost/day14/requestDemo1 中华人民共和国
URI:统一资源标识符 /day14/requestDemo1 共和国
6.获取协议以及版本:HTTP/1.1
String getProtocol()
7.获取客户机的IP地址:
String getRemoteAddr()
2.获取请求头数据
方法:
String getHeader(String name):通过名称获取
Enumeration<String> getHeaderNames():获取所有的请求头名称
3.获取请求体数据
请求体:POST请求方式
1.获取流对象
BufferedReader getReader(): 获取字符输入流
SerletInputStream getInputStream(): 获取字节输入流,可以操作所有类型数据
2.从流对象中拿数据
其他功能:
获取请求参数通用方式:get和post都可以
1.String getParameter(String name):根据参数名称获取参数值 username=zs&password=123
2.String[] getParameterValues(String name):根据参数名称获取参数值的数组 hobby=xx&hobby=game
3.Enumeration<String> getParameterNames():获取所有请求参数的参数名称
4.Map<String,String[]> getParameterMap():获取所有参数的map集合
中文乱码问题:
get方式:tomcat8解决了
post方式:会乱码
解决问题:获取参数前,设置request编码
request.setCharacterEncoding("utf-8");
请求转发:在服务器内部的资源跳转方式
1.步骤
通过request对象获取请求转发器对象:
RequestDispatcher getRequestDispatcher(String path)
使用RequestDispatcher对象来进行转发:
forward(SrevletRequest request,ServletResponse response)
request.getRequestDispatcher("/requestDemo9").forward(request,response);
2.特点:
1.浏览器地址栏路径不发生变化
2.只能转发到当前服务器内部资源中
3.转发是一次请求
3.共享数据:
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
void setAttribute(String name,Object obj):存储数据
Object getAttribute(String name):通过建获取值
void removeAttribute(String name):通过键删除键值对
request.setAttribute("msg","hello");
Object msg = request.getAttribute("msg");
4.获取ServletContext:
ServletContext getServletContext()