JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍

在讲解Servlet前,先介绍一下MVC模式。

M:model 模型,相当于数据层,用于存放数据,如一个Java中的一个bean类

V:view 视图,相当于页面层,用于显示数据,如一个网页html,或者是jsp

C: controller 控制器,相当于业务层,用于处理数据

我们之前使用的JSP,其中也是可以使用java小脚本来进行数据处理。

但是,我们又想要显示数据,又要处理数据,代码都放在JSP文件中,会造成代码的污染,不方便阅读和编写。

这个时候,就出现了MVC架构,用于把数据处理、数据显示、数据存放都分离,可以更好地管理。

这样一来,我们就可以把一个JavaWeb项目分为了三个层次,JSP就用来显示数据,Servlet用来处理数据,bean类用来存放数据。

Servlet介绍

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

简单来说,Servlet就是可以拦截请求,然后进行处理,之后进行数据的返回,或者是页面导航(重定向或请求转发)

作用:

处理用户的请求数据

响应用户请求

页面导航

控制业务逻辑的处理

Filter过滤器介绍

过滤器可以动态地拦截请求和响应,以变换或使用包含在请求或响应中的信息。

可以将一个或多个过滤器附加到一个 Servlet 或一组 Servlet。过滤器也可以附加到 JavaServer Pages (JSP) 文件和 HTML 页面。

过滤器是可用于 Servlet 编程的 Java 类,可以实现以下目的:

在客户端的请求访问后端资源之前,拦截这些请求。在服务器的响应发送回客户端之前,处理这些响应。

过滤器是指当客户端请求某些web组件(JSP/Servlet)前先对请求做一些预处理操作,例如提交的表单包含中文时、用户是否已经进行了登录等,可以用过滤器对请求数据做中文转码;判断用户是否进行了登录等应用场合

官方建议以下案例使用过滤器;

身份验证过滤器(Authentication Filters)。

数据压缩过滤器(Data compression Filters)。

加密过滤器(Encryption Filters)。

触发资源访问事件过滤器。

图像转换过滤器(Image Conversion Filters)。

日志记录和审核过滤器(Logging and Auditing Filters)。

MIME-TYPE 链过滤器(MIME-TYPE Chain Filters)。

标记化过滤器(Tokenizing Filters)。

XSL/T 过滤器(XSL/T Filters),转换 XML 内容。

Lisenter监听器介绍

监听器也叫Listener,是Servlet的监听器,它可以监听客户端的请求、服务端的操作等。通过监听器,可以自动激发一些操作,比如监听在线的用户的数量。

由于用得不多,这里就先大概介绍一下监听器可以用在哪个哪些功能上

两种方式,注解 @WebListener和web.xml配置 listener

Servlet与过滤器的流程

JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍

Servlet实现 1. 编写一个Class,使其继承HTTPServlet,重写doGet和doPost方法

doGet 处理用户的get请求

doPost 处理用户的post请求

PS:如果提示没有发现这个HTTPServlet类,添加一下依赖

package controller; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; /** * @author StarsOne * @date Create in 2019/9/14 0014 20:14 * @description */ public class FirstServlet extends HttpServlet { /** * @param req 相当于request内置对象 * @param resp 相当于response内置对象 * @throws ServletException * @throws IOException */ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //调用doPost方法 doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //重定向页面 resp.sendRedirect(req.getContextPath()+"/hello.jsp"); } } 2. 打开web.xml,配置Servlet,对请求进行拦截

JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍

<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee " version="4.0"> <servlet> <servlet-name>FirstServlet</servlet-name> <!--这里要指定Servlet的类,也就是我们之前第一步编写的那个类--> <servlet-class>controller.FirstServlet</servlet-class> </servlet> <servlet-mapping> <!--这里的FirstServlet是与上面的servlet-name属性对应,可以任意取名--> <servlet-name>FirstServlet</servlet-name> <!--拦截的请求,请求为hello时,就会跳转到Servlet去执行--> <url-pattern>/hello</url-pattern> </servlet-mapping> </web-app>

关于url-pattern的补充:请看下面

3. 测试说明

我的项目中定义了两个jsp,一个是index.jsp,另外一个则是hello.jsp
index.jsp中有一个链接:

<a href="http://www.likecs.com/hello">点击跳转</a>

之后点击上面的链接,就会被Servlet拦截,之后进行处理。我们的Servlet其实就是实现了页面重定向的操作,所以,之后就会跳转到hello.jsp的页面

PS:除了使用web.xml配置的方式之外,也可以使用注解来标记

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/zwwsgs.html