# Servlet
# 生命周期
默认第一次访问的时候创建Servlet对象,执行init方法,每次请求过来之后执行Service方法,在service方法内部根据请求方式的不同调用不同的doXXX方法,Get请求调用doGet方法,Post请求调用doPost方法,当服务器关闭或者项目被移除了就销毁Servlet对象,执行destroy方法,初始化和销毁方法都只执行一次;Servet是单例,也就是说在Servlet整个生命周期中,Servlet对象有且仅有一个
# HTTP协议
超文本传输协议,基于请求和响应模型,请求先有,后有响应,一次请求只会有一次响应
# 请求行
get请求的请求参数在请求行的请求路径后面
# 请求头
key:value结构的,一般一个key对应一个value,也有一个key对应多个value的情况
user-agent:浏览器的版本信息
referer:当前这次请求从哪里发过来------防止盗取链接,做统计工作
# 请求体
get请求方式没有请求体
##### GET和POST的区别(面试点)
1,get方式提交的数据显示在地址栏中,准确的说是在请求行中的请求路径后面,没有请求体,而post方式提交的数据不会显示在地址栏中,提交的数据在请求体中
2,get方式url的长度有限制,而post没有限制
3,post方式提交数据相对安全
# 响应
# 响应行
常见的状态码:
404:资源路径找不到:一般查看:action="" @WebServlet("") 转发的路径,重定向的路径等等
302:集合Location的响应头做重定向使用
304:查找本地缓存
500:代码有误
# 响应头
key:value结构的,一般一个key对应一个value,也有一个key对应多个value的情况
常见的响应头:
Content-Type:响应体的数据格式及编码格式
Content-disposition:文件下载时使用
# 响应体
网页代码/网页能够看到的内容
## Request
# 获得客户端相关的信息
获得请求方式:
String method = request.getMethod()
获取虚拟路径(项目名):
String contextPath = request.getContextPath();
获得URI/URL:
String uri = request.getRequestURI();
StringBuffer sb = request.getRequestURL();
获得远程ip地址:
String ip = reqeust.gerRemoteAddr();
# 获取请求提交的参数
获得单个值:
String value = reqeust.getParameter(String name);
获得一组值(复选框):
String[] values = request.getParameterValues(String name);
获得所有的值封装到map集合中:
Map<String,String[]> map = request.getParameterMap();
# 提交参数乱码问题的解决
get:tomcat8及以上已自主解决
post:
request.setCharacterEncoding("UTF-8"):
注意:这句话一定要写在获取参数之前
# 作为域对象存取数据
作用的范围: 一次请求响应的范围
什么时候创建:服务器收到客户端请求时创建request对象
什么时候销毁:服务器对当前这次请求做出响应后销毁
存取数据的方法:
java
request.setAttribute(String key,Object value);
Object value = request.getAttribute(String key);
request.removeAttribute(String key)
# 转发和重定向
写法:
java
request.getRequestDispatcher("转发路径").forward(request,response);
java
response.sendRedirect("重定向的路径");//路径一般需要带虚拟路径,而虚拟路径需要动态获取request.getContextPath()
区别:
1,转发浏览器地址栏不变,重定向会发生变化
2,转发只能在当前项目内部跳转,重定向可以跳转任意范围
3,转发是一次请求一次响应,重定向是两次请求两次响应
4,路径编写:转发不需要带虚拟路径,重定向需要写虚拟路径
# ServletContext
servet的上下文,servlet和tomcat服务器环境数据交换的桥梁,代表了整个web应用
# 如何获得
java
request.getServletContext();//要能拿到request对象
this.getServletContext();// 要在继承了HttpServlet的类中才能使用
# 作为域对象存取数据
1,作用范围:
整个web应用
2,何时创建:
服务器启动时会为每一个web项目创建单独的ServletContext对象,一个web应用只有一个
3,何时销毁:
服务器关闭,项目被移除时销毁该对象
4,存取数据的方法:
java
request.setAttribute(String key,Object value);
Object value = request.getAttribute(String key);
request.removeAttribute(String key)
# 获取文件路径
java
String realPath = serveltContext.getRealPath(String path);
InputStream is = servletContext.getResourcesAsStream(String path);
|
|