Servlet
生命周期(面试点)
默认第一次访问的时候创建Servlet对象,执行init方法,每次请求过来之后执行Service方法,在service方法内
部根据请求方式的不同调用不同的doXXX方法,Get请求调用doGet方法,Post请求调用doPost方法,当服务器关
闭或者项目被移除了就销毁Servlet对象,执行destroy方法,初始化和销毁方法都只执行一次;Servet是单例,也
就是说在Servlet整个生命周期中,Servet对象有且仅有一个
HTTP协议
超文本传输协议,基于请求和响应模型,请求先有,后有响应,一次请求只会有一次响应
请求
请求行
get请求的请求参数在请求行的请求路径后面
请求头
key:value结构的,一般一个key对应一个value,也有一个key对应多个value的情况
user-agent:浏览器的版本信息
referer:当前这次请求从哪里发过来------防止盗取链接,做统计工作
请求体
get请求方式没有请求体
GET和POST的区别(面试点)
1,get方式提交的数据显示在地址栏中,准确的说是在请求行中的请求路径后面,没有请求体,而post方式提
交的数据不会显示在地址栏中,提交的数据在请求体中
2,get方式url的长度有限制,而post没有限制
3,post方式提交数据相对安全
响应
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对象
什么时候销毁:服务器对当前这次请求做出响应后销毁
存取数据的方法:
转发
request.setAttribute(String key,Object value);
Object value = request.getAttribute(String key);
request.removeAttribute(String key)
写法:
特点:
1,浏览器地址栏不变
2,只能在当前项目内部跳转
3,转发是一次请求一次响应
4,转发的路径编写:不需要带虚拟路径
request.getRequestDispatcher("转发路径").forward(request,response) |
|