servlet
什么是servlet
用java编写运行在web容器的小程序;
servlet的生命周期
实例化:构造方法;
初始化init();
处理请求service();n次
服务终止destory();
使用servlet
注释
继承HttpServlet
重写方法
@WebServlet("/hello2")---->注释
public class Hello2Servlet extends HttpServlet {---->继承HttpServlet
//重写 doGet 方法
@Override----->重写方法
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//设置响应类型
response.setContentType("text/html;charset=utf-8");
//得到打印流
PrintWriter out = response.getWriter();
//在浏览器打印输出
out.print("<h2>我是 Servlet3.0</h2>");
}
}
servlet执行原理:
接收请求,实例化servlet,通过webServlet找到对应方法,浏览器对象通过request发送到后台
后台通过reponse将数据传到浏览器;
什么是HTTP协议
规定请求和响应的传输格式
HTTP协议的组成
1,请求行
2,请求头
3,请求体(只有post才有)
式 | post | get |
---|---|---|
地址栏 | 数据在请求体中发送,所以地址上不显示 参数 | 因为是请求行中发送数据,所以在地址栏上可以看 参数 |
大小 | 理论上没有限制大小 | 不同的浏览器有区别, 2K |
安全性 | 安全性更高 | 安全性更低 |
缓存 | POST 邮寄, 发送数据不使用本地缓存 | GET 拿,从服务器上获取数据,会使用缓存。如果 本地浏览器已经缓存页面,而且服务器的数据没有 修改, 不再从服务上得到数据。 |
HttpServletRequest
.getMethod();---得到请求方式
.getRequestURL();----得到请求地址
.getContextPath();----得到项目名称
得到前端的参数:--get或post都可以通过以下方法获得数据
.getParament(String name);得到一个参数
.getParamentValues(String name);得到下拉框
.getParamentNames();得到全部
.getParamnetMap();得到Map<String ,String[]>结合BeanUtils.populate(user, map);一起使用
请求域
三个:请求域;会话域;上下文域
方法:
.setAttribute(key,value);
.getAttribute(key);
.removeAttribute(key);
作用域 | 接口名 | 作用范围 | 生命周期 |
---|---|---|---|
请求域 | HttpServletRequest | 一个用户的一次请求 | 每次请求就结束 |
会话域 | HttpSession | 一个用户的所有请求 | 会话过期结束 |
上下文域 | ServletContext | 所有用户的所有请求 | 服务器关闭才结束 |
cookie是浏览请保存对象的域;
转发和重定向区别
向 | 转发 | 重定向reponse.sendRedirect(); |
---|---|---|
根目录 | 服务端的根目录 http://localhost:8080/项目地址/ | 浏览器的根目录 http://localhost:8080 |
地址栏 | 不会变 | 会 |
跳转者 | 在服务端进行跳转 | 在浏览器端跳转 |
请求域 | 不会丢失 | 会丢失 |
错误号码
状态码 | 含义 |
---|---|
200 | 正确的从服务器得到响应的数据 |
302 | 表示页面重定向 |
304 | 使用的是本地缓存,并没有从服务器上再次下载网页 |
404 | 找不到服务器上指定的资源 |
405 | 如果客户端使用 GET/POST 方法提交,而服务器端没有 doGet/doPost 方法,就 会出现 405 错误 |
500 | 服务器出现内部错误,一般是 Servlet 中的代码有错误 |