JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍
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与过滤器的流程

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,对请求进行拦截

<?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 http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
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="hello">点击跳转</a>
之后点击上面的链接,就会被Servlet拦截,之后进行处理。我们的Servlet其实就是实现了页面重定向的操作,所以,之后就会跳转到hello.jsp的页面
PS:除了使用web.xml配置的方式之外,也可以使用注解来标记
在Servlet那个类上使用@WebServlet注解就可以,下面这段代码与之前在web.xml文件定义的也是一样的效果,点击之后也会跳转到hello.jsp中去
@WebServlet("/hello")
public class FirstServlet{
...
}
url-pattern补充
1. 精确匹配:
| 形式 | 匹配的url |
|---|---|
| /hello | http://localhost:8080/servletdemo/hello |
| /hello.html | http://localhost:8080/servletdemo/hello.html |
之前我们写的链接的href属性,只写了hello,其实访问的url地址就是http://localhost:8080/servletdemo/hello
2. 路径匹配:
以“/”字符开头,并以“/*”结尾的字符串用于路径匹配
| 形式 | 匹配的url |
|---|---|
| /user/* | http://localhost:8080/user/hello http://localhost:8080/user/he http://localhost:8080/user/hello/aa |
| /hello.html | http://localhost:8080/servletdemo/hello.html |
3. 扩展名匹配:
简单来说,就是url以什么结尾的
4. 缺省匹配:
就是相当于不写,匹配所有的url
<servlet-mapping>
<servlet-name>MyServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Filter过滤器实现
1.实现Filter接口,重写方法
新建一个类,让它实现Filter接口
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
/**
* @author StarsOne
* @date Create in 2019/9/14 0014 21:35
* @description
*/
public class FirstFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("过滤器1已过滤...");
//必须要有doFilter方法,之后过滤结束就会跳转到匹配的url的Servlet中进行业务逻辑处理
filterChain.doFilter(servletRequest,servletResponse);
}
@Override
public void destroy() {
}
}
配置web.xml文件
规则和Servlet的配置差不多,这里就不过多解释了
<filter>
<filter-name>FirstFilter</filter-name>
<filter-class>FirstFilter</filter-class>
</filter>
<!--如果有多个,过滤器的顺序就是按照web.xml中的过滤器顺序进行过滤 -->
<filter-mapping>
<filter-name>FirstFilter</filter-name>
<!--指定过滤全部的url -->
<url-pattern>/*</url-pattern>
</filter-mapping>
测试
测试,会发现点击链接后,控制台输出了两次,这也是侧面说明了请求重定向,客户端发出了两次请求
JSP学习笔记(5)——Servlet、监听器、过滤器、MVC模式介绍的更多相关文章
- ASP.Net MVC开发基础学习笔记:一、走向MVC模式
一.ASP.Net的两种开发模式 1.1 ASP.Net WebForm的开发模式 (1)处理流程 在传统的WebForm模式下,我们请求一个例如http://www.aspnetmvc.com/bl ...
- JSP学习笔记(6)—— 自定义MVC框架
仿照SpringMVC,实现一个轻量级MVC框架,知识涉及到了反射机制.注解的使用和一些第三方工具包的使用 思路 主要的总体流程如下图所示 和之前一样,我们定义了一个DispatchServlet,用 ...
- Head First Servlets & JSP 学习笔记 第十三章 —— 过滤器的威力
过滤器可能是最强大的Web应用开发工具了! 与Servlet非常类似,过滤器就是Java组件,请求发送到Servlet之前,可以用过滤器截获和处理请求:另外Servlet结束工作之后,但在响应发回给客 ...
- 【Spring学习笔记-MVC-1.0】Spring MVC架构介绍
作者:ssslinppp 1. 核心架构图 2. 核心架构的具体流程步骤 3. 具体的核心开发步骤 4. 常用注解 5. <mvc:annotation-driven>配置 6 ...
- .NET CORE学习笔记系列(1)——ASP.NET MVC Core 介绍和项目解读
ASP.NET MVC Core 项目文件夹解读 一.项目文件夹总览 1.1.Properties——launchSettings.json 启动配置文件,你可以在项目中“Properties”文件夹 ...
- jsp学习笔记:mvc开发模式
jsp学习笔记:mvc开发模式2017-10-12 22:17:33 model(javabe)与view层交互 view(视图层,html.jsp) controller(控制层,处理用户提交的信息 ...
- jsp学习---mvc模式介绍和el表达式,jstl标签库的使用入门
一.mvc模式介绍 下图是常用的mvc分层模式: 项目中的包命名规则,一般如下: com.amos.domain 封装JavaBean,一般我喜欢用model命名这个包com.amos.dao 封装d ...
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- java web jsp学习笔记--概述-常用语法,指令,动作元素,隐式对象,域对象
JSP学习笔记 1.什么是jsp JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术.JSP/Servlet规范.JS ...
- Java学习笔记之---Servlet
Java学习笔记之---Servlet (一)如何实现Servlet 1.实现javax.servlet.Servlet接口: 2.继承javax.servlet.GenericServlet类: 3 ...
随机推荐
- 19 个 JavaScript 编码小技巧
这篇文章适合任何一位基于JavaScript开发的开发者.我写这篇文章主要涉及JavaScript中一些简写的代码,帮助大家更好理解一些JavaScript的基础.希望这些代码能从不同的角度帮助你更好 ...
- SSM框架的详细解说
文章转载自:http://blog.csdn.net/zhshulin 使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就 ...
- Asp.Net Core WebAPI+PostgreSQL部署在Docker中
PostgreSQL是一个功能强大的开源数据库系统.它支持了大多数的SQL:2008标准的数据类型,包括整型.数值值.布尔型.字节型.字符型.日期型.时间间隔型和时间型,它也支持存储二进制的大对像, ...
- 【linux】【qt5界面】【系统托盘图标的实现】
前言: 博主最近在做一个聊天软件,虽然技术不咋滴,但遇到点干货肯定是要跟大家分享的啦.下面就给大家分享一个qt实现程序隐藏才系统托盘的技巧. 装备: 系统:linux, qt版本:5.9.2,GCC: ...
- 解决树莓派烧录系统后没有boot文件,只出现盘符问题
首先,如果下图情况,说明你没有烧录好,继续向下看 放一张安装成功的图片 出现这个的原因是因为前期没有烧录好,它会回滚到img文件中,如果中途退出,它会写入到img文件中 正确文件大小(Raspbian ...
- 建立apk定时自动打包系统第三篇——代码自动更新、APP自动打包系统
我们的思路是每天下班后团队各成员在指定的时间(例如下午18:30)之前把各自的代码上传到SVN,然后服务器在指定的时间(例如下午18:30)更新代码.执行ant 打包命令.最后将apk包存放在指定目录 ...
- Redis 学习笔记(篇九):主从复制
Redis 中,可以通过执行 savleof 命令或者设置 slaveof 选项,让一个服务器去复制另一个服务器,我们称被复制的服务器为主服务器,而对主服务器进行复制的服务器则被称为从服务器. Red ...
- JavaScript最常见的错误种类
1.报错为: Uncaught ReferenceError:未捕获引用错误(引用错误:使用了没有定义的变量) 错误之前的代码会执行,之后代码不会执行 2.报错为: Uncaught Syntaxer ...
- C笔记_常用快捷键
1.第一部分 Ctrl + up/down 以光标所在行为中心上下移动文本: Ctrl + left/right 左右跳过一个单词或符号: Ctrl + end 跳至文本末尾: Ctrl + dele ...
- Postman系列五:Postman中电商网站cookie、token检验与参数传递实战
一:Postman中电商网站cookie实战 Postman接口请求使用cookie两种方式: 1.直接在header(头域)中添加cookie,适用于已知请求cookie头域的情况 2.使用Post ...