Servlet 生命周期
每次请求servlet sevlet都会调用service() 多次调用
@webservlet(value="demo",loadOnstartup=-1)
value等同于urlpatterns 一个servlet 可以匹配多个urlpattern
urlpattern的匹配规则
1.精确匹配 优先级最高
2.目录匹配 @WebServlet("/user/*")
3.扩展名匹配 @WebServlet("*.do") 不能以"/"开头
4.任意匹配@WebServlet("/*") 或者@WebServlet("/*"); / 会覆盖静态资源和页面
loadOnStartup 默认是你要访问的那个url页面才会初始化,改为o或正数(数字越小优先级越高) 就是启动tomacat就启动int
destory()方法 调用时机 内存释放或服务器关闭 servlet对象会被销毁 一次
请求转发
一种服务器内部资源跳转的方式
实现方式
req.getRequestDispatcher("资源b路径").forward(req,resp);
请求转发资源间共享数据 使用request对象
void setAttribute 存储数据到requesti域中
getAttribute 获取键值对
特点 :
浏览器路径不会变化
只能转发到服务器内部资源
一次请求,可以在转发的资源间使用request共享数据
Response
Response 完成重定向 : 一种资源转发的方式
resp.sendRedirect("资源b的路径") 虚拟目录需要加上
重定向的特点 :
浏览器地址栏发生变化
可以重定向任意位置的资源
两次请求 不能在多个资源中使用request共享数据
路径问题
浏览器使用需要加上虚拟目录
服务端使用 不需要加虚拟目录
动态获取虚拟目录
getContextPath
Response 响应字符数据
PrintWrite writer=resp.getWriter();
该流不需要关闭 会随着response响应关闭
需要
response.setContentType("text/html;charset=UTF-8");中文编码
Response 响应字节数据
通过response对象获取字节输出流
ServletOutputStream outputStream=resp.getOutpuStream();
outputStream.write(字节数据);I
OUtils 工具使用
导入依赖坐标
commons-io
使用 IOUtils.copy(输入流,输出流);
等同于
byte[] buff = new byte[1024]; int len=0; while((len=fis.read(buff))!=-1){ os.write(buff,0,len);