Servlet --接口
有两个实现类 GenericServlet --抽象类
HttpServlet --抽象类 父类是GenericServlet
GenericServlet将其父类的其他方法做了默认空实现,只将service()方法抽象
service方法 1.判断请求方式 String method=req.getMethod();
if("GET".equals(method)){
//get获取数据
doGet();}
else if("POST".equals(method)){
//post获取数据
doPost();}
HttpServlet:对http协议的一种封装,简化操作
步骤:1.定义继承HttpServlet 2.复写doGet/doPost方法
Servlet相关配置
1.urlpartten:Servlet访问路径
@WebServlet(路径)
路径定义规则: /xxx
/xxx/xxx多层
*.do
HTTP:概率:Hyper Text Transfer Protocol 超文本传输协议
传输协议:定义了,客户端和服务端通信时,发送数据的格式
特点:1.基于TCP/IP的高级协议
2.默认端口号:80
3.基于请求/响应模型的:一次请求对应一次响应
4.无状态的:每次请求之间相互独立,不能交互数据
历史版本:1.0/1.1
1.0:每一次请求响应都会建立新的连接
1.1:会复用这个连接
请求消息数据格式:
1.请求行
请求方式 请求url 请求协议/版本
GET /xxxxx HTTP/1.1
HTTP协议有7种请求方式,常用2种
Get:请求的url长度有限制的 不太安全
post:请求的url长度没限制
2.请求头:客户端浏览器高数服务器一些信息
请求头名称:请求头值
常见的请求头:
1.User-Agent:浏览器告诉服务器,我访问你使用的浏览器版本信息
可以在服务器获取该头的信息,解决浏览器的兼容问题
2.Referer:http://xxxxxxx
告诉服务器,从哪来?
防盗链
3.请求空行
空行,用于分割post请求的请求头和请求体的
4.请求体(正文)
封装post请求信息的请求参数的
响应消息数据格式:
Request:
1.request response对象原理
1.tomcat服务器会根据请求url中的资源路径,创建对应的ServletDemo1的对象
2.tomcat服务器,会创建request和response对象,request对象中封装请求消息数据
3.tomcat将request和response两个对象传递给service方法,并且调用service方法。
4.在service方法中,可以通过request对象获取请求消息数据,通过response对象设置
响应数据
5.服务器在给浏览器做出响应之前,会从response对象中拿设置的响应消息数据
request和response对象是由服务器创建的,我们使用他们就可以了
request对象是来获取请求消息 response设置响应信息
1.request获取请求数据
1.获取请求行数据
String getMethod() //获取请求方式 get post
String getContextPath() //获取虚拟目录 /xxx ※
String getServletPath //获取Servlet路径 /demo1
String getQueryStri //获取get方式请求参数
String getRequestURI //获取请求URI ※
String getRequestURL //获取请求URL
String getProtocol //获取协议及版本
String getRemoteAddr() //获取客户机的IP地址
URL:统一资源定位符 URI:统一资源标识符
2.获取请求头数据
String getHeader(string name)通过请求头名称获取请求头的值
Enumeration<String> getHeaderNames():获取所有的请求头名称
user-agent中有浏览器信息
String.contains比较判断
3.获取请求体数据
请求体:只有POST请求方式,才有请求体,在请求体中封装了POST请求的请求参数
步骤:1.获取流对象 BufferedReader getReader():获取字符输入流,
ServletInputStream getInputStram():获取字节输入流,操作所有类型数据
2.再从流对象中拿数据
通用方法
1.获取请求参数 Get post都可以
1.String getParameter(String name):根据参数名称获取参数值
2.String[] getParameterValues(String name):根据参数名称获取参数值的数组
3.Enumeration<String >getParameterNames() 获取所有请求的参数名称
while(parameterNames.hasMoreElements()){String name=parameterNames.nextElement()}
4.Map<String,String[]> getParameterMap() 获取所有参数的Map集合
get在tomcat8已经将get方式乱码问题解决了
post方法中文乱码解决: request.setCharacterEncoding("uft-8") 防止中文乱码
2.请求转发
一种在服务器中资源跳转的方式
1.通过request对象获取请求转发器对象:RequestDispatcher getRequestDispatcher(String paht)
2.使用这个对象的forward转发
转发是一次请求
3.共享数据
域对象:一个有作用范围的对象,可以在范围内共享数据
request域:代表一次请求的范围,一般用于请求转发的多个资源中共享数据
方法:
1.setAttribute(String name,Objecct obj):存储数据
2.Object getAttitude(String name)通过键获取值
3.removeAttribute(String name):通过键值对移除对象
4.获取ServletContext