九、Servlet跳转
1. Servlet跳转
1.1 对象
jsp、html页面通过表单、超链接跳转进servlet。
servlet跳转到其他servlet、jsp或其他页面。
1.2 两种跳转方式
-
客户端跳转
方法一:response.setHeader(“refresh”,“3;url=hello.jsp”); 告诉浏览器3秒后重新定向到新的资源,浏览器地址栏中是刷新之后的地址
方法二:使用重定向response.sendRidrect(“hello.jsp”); -
服务器端跳转
方法三:直接请求转发,服务器端控制权的转向,跟客户端浏览器无关,浏览器地址栏显示转发之前的地址
RequestDispatcher rd= getServletContext().getRequestDispatcher(“/hello.jsp”);
RequestDispatcher rd= request.getRequestDispatcher(“hello.jsp”);
rd.forward(request,response);//控制权的完全转向,客户端得到的返回信息是来自于转向后文件的输出
rd.include (request,response);//包含,客户端得到的返回信息是两个文件共同输出的结果
1.3 客户端、服务器端跳转比较
两种跳转各有其特点,服务器端跳转,跳转之后地址栏的信息并不会有任何改变;而客户端跳转跳转之后地址栏变为跳转之后的页面地址。
如果使用服务端跳转,则执行跳转语句时会立刻进行跳转,如果使用的是客户端跳转,则是在整个页面执行完之后才执行跳转。
由于两种跳转存在差异,所以在以后的开发中,尤其是使用了JDBC的操作中,一定要在服务器端跳转语句执行之前关闭数据库的连接,否则数据库的连接将再也无法关闭。如果数据库连接始终没有关闭,当达到一定程度时将出现“数据库已经达到最大的异常”。
2. 客户端跳转–请求重定向
2.1 请求重定向过程
包含两次请求和两次响应,服务器需要web浏览器重新发送新请求到servlet2。客户端浏览器知道要跳转–称为客户端跳转。
2.2 HttpServletReqsponse的sendRedirect()方法
2.3 实现
客户端跳转不可以共享请求范围内的参数。
两个servlet不能共享请求的数据,因为是浏览器的两次请求。
可以传递session范围的属性,无法传递request范围的属性。
3. 服务器端跳转–请求转发
3.1 请求转发的过程
对客户端不可见,有web容器完成。一次请求一次响应。
3.2 RequestDispatcher接口
3.3 实现
十、Servlet间数据共享
在不同页面或者用户之间共享数据
1. 同一个用户不同页面的数据共享
session数据不能被其他用户使用。
session数据不能被其他用户使用:
2. 不同用户的页面的数据共享
ServletContext:Servlet上下文。
不同用户可共享数据:
3. 服务器端跳转下的数据共享
把信息放到请求中。
十一、web3.0文件上传下载
1. 文件上传、下载的基本流程
2. Servlet3.0文件如何上传、下载
以前版本上传借助第三方使业务更简单。
form中,enctype=“编码类型””。文件为multipart/form-data类型。
part对象:包含文件上传
Servlet 3.0之Part对象(文件上传)
String mimetype = getServletContext().getMimeType(file);
mimetype:getMimeType(file)方法可以直接通过文件的扩展名获取mimetype。
3. 上传下载功能实现
十二、实战–信息管理系统登陆、注销功能
1. session登陆、注销流程
登陆:访问hello检查session凭证
注销: