Servlet与设计模式

news2024/11/24 0:57:13

 1 过滤器和包装器

过滤器可以拦截请求及控制响应,而servlet对此毫无感知。过滤器有如下作用:

1)请求过滤器:完成安全检查、重新格式化请求首部或体、建立请求审计日志。

2)响应过滤器:压缩响应流、追加或修改响应流、创建一个完全不同的响应。

1.1 声明和确定过滤器顺序

当多个过滤器映射到一个给定资源时,容器会使用先URL模式后servlet-name的规则。

<filter-mapping>

      <filter-name>filter3</filter-name>

      <servlet-name>helloServlet</servlet-name>

</filter-mapping>

<filter-mapping>

      <filter-name>filter1</filter-name>

      <url-pattern>/*</url-pattern>

</filter-mapping>

<filter-mapping>

      <filter-name>filter2</filter-name>

      <url-pattern>*.action</url-pattern>

</filter-mapping>

过滤器的顺序为: filter1、filter2、filter3

1.2 过滤器实战

需求:1)项目只接受/hello 请求的GET方法,对于其他请求则返回“404没有找到对应资源”。2)对所有响应,返回内容结尾都追加“filter实战”。

public class HelloServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        PrintWriter writer = resp.getWriter();
        writer.print("你好 Servlet");
        writer.close();
    }

}

public class RequestFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("拦截器初始化");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        String method = request.getMethod();
        String servletPath = request.getServletPath();
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        CustomResponseWrapper responseWrapper = new CustomResponseWrapper(response);
        responseWrapper.setContentType("text/html;charset=UTF-8");
        if ("GET".equalsIgnoreCase(method) && "/hello".equalsIgnoreCase(servletPath)) {
            filterChain.doFilter(request,responseWrapper);
        } else {
            PrintWriter writer = responseWrapper.getWriter();
            writer.print("404没有找到对应资源");
            writer.close();
        }
    }

    @Override
    public void destroy() {
        System.out.println("拦截器销毁");
    }
}

public class CustomResponseWrapper extends HttpServletResponseWrapper {

    private CustomPrintWriter pw;

    public CustomResponseWrapper(HttpServletResponse response) {
        super(response);
    }

    @Override
    public PrintWriter getWriter() throws IOException {
        if (pw == null) pw = new CustomPrintWriter(super.getWriter());
        return pw;
    }
}

public class CustomPrintWriter extends PrintWriter {
    public CustomPrintWriter(Writer out) {
        super(out);
    }

    @Override
    public void print(String s) {
        super.print(s + "——filter实战");
    }
}
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
         version="2.4">
    <servlet>
        <servlet-name>helloServlet</servlet-name>
        <servlet-class>HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>helloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <filter>
        <filter-name>reqFilter</filter-name>
        <filter-class>RequestFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>reqFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>

web.xml 

2 企业设计模式

Web系统要求着良好的性能,让用户得到更快的响应时间及支持更多的并发用户;为了让应用不同部分能同时在不同主机上运行,要以适当方式模块化;同时系统还要有一定的灵活性、可维护性和可扩展性。

2.1 处理远程对象

在对象跨网络通信时存在一些常见的问题:查找远程对象及处理本地和远程对象之间的底层网络I/O通信。也就是如何找到远程对象,以及如何调用其方法。

JNDI和RMI可以解决上述的问题。

2.1.1 JNDI

Java Naming and Directory Interface,Java命名和目录接口。可以在网络上的一个集中位置上完成查找。想被查找并访问的对象,要先向JNDI注册,再通过JNDI来查找。

2.1.2 为控制器增加JNDI。

图 WEB服务请求调用远程服务器服务过程

业务委托:完成请求的业务处理。

服务定位器:从JDNI查找需要调用的远程服务。

2.2 MVC

Model-View-Controller(模型-视图-控制器)。

模型:真正的业务逻辑和状态。了解获取和更新状态的规则。

视图:从控制器得到模型的状态。发起请求及接受响应。

控制器:从请求取得用户输入,并向模型明确输入用户的含义。

2.2.1 改进MVC控制器

控制器的3大任务及处理方案:

1)获得和处理请求参数,将这个任务交给另外一个单独的表单验证组件,由它获得表单参数、完成转换、进行验证、处理错误并创建一个对象保存参数值。

2)调用模型,采用声明方式,在定制部署描述文件中列出一些模型,控制器可以读取这些模型,并且根据请求来决定要使用哪些模型。

3)分派到视图,采用声明方式,根据URL控制器就能区分要分派到哪个视图。

前端控制器:应用所有的请求都会通过一个控制器,由它处理,并将请求分派到适当地方。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092086.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

softmax激活函数

Softmax激活函数是一种用于多类别分类问题的激活函数&#xff0c;通常用于神经网络的输出层。它将原始分数&#xff08;也称为logits&#xff09;转换为表示概率分布的数值&#xff0c;使得每个类别的概率值都在0和1之间&#xff0c;并且所有类别的概率之和等于1。这使得它适用…

2023年9月 青少年软件编程等级考试Scratch二级真题

202309 青少年软件编程等级考试Scratch二级真题&#xff08;电子学会等级考试&#xff09; 试卷总分数&#xff1a;100分 试卷及格分&#xff1a;60 分 考试时长&#xff1a;60 分钟 第 1 题 点击绿旗&#xff0c;运行程序后&#xff0c;舞台上的图形是?( ) A&#xff1a;画…

极简c++(8)抽象类与多态

类型转换规则 父类定义的指针可以指向子类对象&#xff1b; 指针会误以为&#xff0c;他们指向的对象是Base1类型&#xff0c;导致错误&#xff1b; 虚函数定义 多态 如何实现多态&#xff1a; 1.创建类的继承关系图 2.所以类对象都可以调用的这个函数 3.创建父类指针数组 …

PyTorch 深度学习之卷积神经网络(高级篇)Advanced CNN(十)

0. Revision 前面讲的比较简单的是 串行网络结构 1. GoogLeNet 1.1 Inception module w h 要一致 what is 11 convolution? 信息融合-eg.高中各门学科成绩比较(总分) 最主要工作:改变通道数量 why is 11 convolution? 减少10倍 1.2 implementation of inception module 拼…

一文1400字从0到1进行Jmeter分布式压力测试【图文并茂】

1、场景 在做性能测试时&#xff0c;单台机器进行压测可能达不到预期结果。主要原因是单台机器压到一定程度会出现瓶颈。也有可能单机网卡跟不上造成结果偏差较大。 例如4C8G的window server机器&#xff0c;使用UI方式&#xff0c;最高压测在1800并发(RT 20ms以内)左右。如果…

在C语言中,单向链表的插入操作通常包括以下哪些步骤?

#科技新势力# #极简极速学编程# 【小白从小学Python、C、Java】 【计算机等级考试500强双证书】 【C语言每日一题】 在C语言中&#xff0c;单向链表的插入操作通常包括以下哪些步骤&#xff1f; A选项&#xff1a;将新节点指针->指向->链表最后一个节点 B选项&#xff1…

2024级199管理类联考之逻辑核心基础

且与或 含义 A且B(A^B):同时存在 常见形式 A并且B既A又B不但A而且B虽然A但是BA或B:二者至少有一个成立(即A且非B,非A且B,A且B) 否定形式 且的否定 A且B否定形式&#xff1a;非(A^B) 非A 或 非B非A且非B否定形式&#xff1a;非(非A^非B) A 或 B非A且B否定形式&#xff1a;…

c# xml 参数读取读取的简单使用

完整使用之测试参数的读取&#xff08;xml&#xff09; 保存一个xml文档&#xff08;如果没有就会生成一个默认的 里面的参数用的是我们默认设置的&#xff09;&#xff0c;之后每次更改里面的某项&#xff0c;然后保存 类似于重新刷新一遍。 这里所用的xml测试参数前面需要加…

淘宝天猫2023年双11红包活动入口在哪里活动时间是什么时候开始至什么时间结束2023年天猫淘宝双十一超级红包活动?

2023年淘宝天猫双11超级红包活动领取时间是从2023年10月24日20:00开始至11月11日23:59结束&#xff0c;淘宝天猫双十一活动时间内每天都可以领取1超级红包最高可得23888元。 2023年天猫淘宝双十一红包使用时间分为2个阶段&#xff1a;第一阶段是从2023年10月31日20:00开始至11…

螺杆支撑座对注塑机的生产过程有哪些重要影响?

螺杆支撑座对注塑机的生产过程具有重要影响&#xff0c;主要体现在以下几个方面&#xff1a; 1、精度和稳定性&#xff1a;螺杆支撑座能够提高注塑机的精度和稳定性&#xff0c;从而保证塑料制品的品质和一致性。通过提供稳定的支撑和承载&#xff0c;螺杆支撑座可以减少机器运…

高防CDN:网络安全的不可或缺之选

在当今数字化时代&#xff0c;网络攻击已经成为互联网上的一种不可避免的风险。为了应对不断升级的网络威胁&#xff0c;许多企业和组织正在采用高防御CDN&#xff08;Content Delivery Network&#xff09;技术&#xff0c;以确保他们的在线资产得到保护&#xff0c;用户体验得…

python 机器视觉 车牌识别 - opencv 深度学习 机器学习 计算机竞赛

1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于python 机器视觉 的车牌识别系统 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;3分工作量&#xff1a;3分创新点&#xff1a;3分 &#x1f9ff; 更多资…

JDBC封装查询单个和查询多个

Mybatis在转化时候可以将数据库任意类型全转字符串是没有问题的 下面封装存在一个问题就是需要数据库字段类型与实体类字段类型一致 实体类 //String columnName metaData.getColumnName(i 1); 这个方法返回实际列名 String columnLabel metaData.getColumnLabel(i 1);//该…

查看系统的核心信息

查看系统的版本 cat /etc/redhat-release查看系统的主机名 hostname uname -n 查看内核 uname -r查看网卡信息 ip a ifconfig 查看网关 ip route route -n netstat -rn 查看分区black大小 df -h 查看磁盘block大小 df -i 查看磁盘和分区大小 fdisk -l查看内存大小…

竞赛选题 深度学习YOLOv5车辆颜色识别检测 - python opencv

文章目录 1 前言2 实现效果3 CNN卷积神经网络4 Yolov56 数据集处理及模型训练5 最后 1 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; **基于深度学习YOLOv5车辆颜色识别检测 ** 该项目较为新颖&#xff0c;适合作为竞赛课题方向&#xff0…

Delay-Based 拥塞控制算法

上班七天了&#xff0c;有点崩溃&#xff0c;看一篇论文提神&#xff1a;A Delay-Based Approach for Congestion Avoidance in Interconnected Heterogeneous Computer networks&#xff0c;来自 Raj Jain&#xff0c;1989 年。这篇论文基于下图展开&#xff1a; 是不是很熟…

基于DBC Signal Group生成Autosar SR接口(2)

文章目录 前言m脚本生成BUS数据类型建立Input模块及关联对应的BUS数据类型实现效果总结 前言 上一篇文章中&#xff0c;介绍了DBC中SignalGroup的提取&#xff0c;对于已经提取好的Group信息&#xff0c;就可以批量操作生成Simulink BUS及Simulink接口模型了。本文介绍这部分的…

Element el-table 表格内容 样式错乱的问题

表格切换样式错乱展示 因为切换行的高度变化可能未异步渲染 解决方法&#xff1a; 在需要使用v-if渲染的el-table-column元素上加上一个不重复的key值即可解决问题 :key“Math.random()” <el-table-columnprop""label"问题"width"630.5px":…

你不一定知道的四种遍历进程的方法(c语言)

一、前言 有时候写代码的时候&#xff0c;我们需要遍历出系统的一些进程&#xff0c;一般我们是直接在任务管理器中查看&#xff0c;不过我们也可以自己写一个&#xff0c;下面小编将会从三个方面着手&#xff0c;给大家讲讲如何遍历进程。 二、系统快照 一般会用到了3个关键…

智慧公厕管理系统

在当今快速发展的科技时代&#xff0c;智慧城市管理成为了城市发展的重要趋势。而智慧公厕管理系统作为其中的一个重要组成部分&#xff0c;为公共卫生设施的管理提供了全新的解决方案&#xff0c;引领着智慧城市管理科技的新篇章。 一、智慧公厕管理系统的概念 什么是智慧公…