1.在 Servlet 内实现跳转
在前面的章节中已经提到,Servlet 是充当控制者(Controller)的角色的,可以用来处理来自 JSP 页面的输入参数,以及从 JavaBean 中读取来自数据库的数据,最后跳转到目标页面。因此,Servlet 为了实现控制者的这一角色,必须要能够实现跳转
2.常用的 Servlet 内跳转有 2 种
(1) 重定向(对应 JSP 内置对象中的 sendRedirect)
response.sendRedirect("URL 地址");
(2)服务器内 跳转(对应 JSP 中的 forward 标签)
ServletContext application = this.getServletContext();
RequestDispatcher rd = application.getRequestDispatcher("URL 地址");
rd.forward(request, response);
这两种在 Servlet 内的跳转与 JSP 中提到的跳转是等效的。只是因为一个是位于 JSP 页面中,一个是位于 Servlet 内。需要注意的是,两种情况下的 URL 地址写法不一样。在第一种中,如果写绝对路径,必须将虚拟目录根目录写在里面,如prj07/page.jsp;第二种方法中,不需要将虚拟目录根目录写在里面,如/page.jsp
- 以“初始化servlet”为例。很多网站中,首页上就存在很多从数据库中查询的数据结果,但是查询数据库的代码又不能写在JSP内,因此,可以用servlet查询数据库,得到结果,跳转到JSP显示。
- 两种方法的适用场合
重定向redirect:当不需要传递参数或者需要跳转到另一个服务器页面时使用重定向redirect
服务器内跳转forward
当需要从 A 页面跳转到 B 页面时,存在着大量暂态数据(即在 B 页面显示过后就可以不用的数据)时,为了节省内存,可以使用服务器内跳转,可以避免把很多内容存储在 session中,从而导致服务器内存消耗过大的情况
5.ServletContext高级功能
ServletContext 是 application 对象所对应的接口,它具有一些高级功能,其中最常见的是获取绝对路径
ServletContext 能够直接获取当前工程中资源在服务器硬盘上的绝对路径
6.
- 使用过滤器
- 需要过滤器的情况
- 情况一: 为了解决中文乱码问题
- 情况二:很多的门户网站都会有登录页面,这是为了业务需求,同时也是为了使用户控制更加的安全。
- 情况三:许多的网站都存在着各种不同的权限,比如,只有管理员才可以对网站的某些数据进行维护和修改,一般的普通用户是无法完成该功能的。
9.过滤器属于一种小巧的、可插入的 Web 组件,它能够对 Web 应用程序的前期处理和后期处理进行控制,可以拦截请求和响应,查看、提取或者以某种方式操作正在客户端和服务器之间进行交换的数据
10.Servlet 过滤器可以当作一个只需要在 web.xml 文件中配置就可以灵活使用、可以重用的模块化组件。它能够对 JSP、HTML、Servlet 文件进行过滤
例(一)在Servlet内实现 跳转==forward服务器内跳转
http://localhost:8088/prj07/servlet/InitServlet
InitServlet.java
package com.demo;
import java.io.IOException;
import java.io.PrintWriter;
import javax.security.auth.message.callback.PrivateKeyCallback.Request;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class InitServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String message="欢迎光临,,";
request.setAttribute("msg", message);
ServletContext application=this.getServletContext();
RequestDispatcher rd=application.getRequestDispatcher("/index.jsp");