随笔 - 502  文章 - 1 评论 - 6 阅读 - 37万
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

Tomcat 是个Java应用程序, 作为一个Web容器,  带有请求/响应的HTTP服务器                     

Web容器

  创建Servlet实例, 完成Servlet名称注册和URL模式对应, Web容器转发给Servlet处理,

  请求过来时 创建HttpServletRequest 和 HttpServletResponse 对象,   请求结束时销毁,

 

 Servlet

  生命周期重要的3个方法, init()  service()  destory()

  Serlvet ServletConfig GenericServlet, 3个类的关系,    GenericServlet 类会把默认的配置init(ServletConfig servletConfig) 放入Servlet中

  ServletContext   在整个Web应用程序加载容器完成之后会创建一个全局的ServletContext 对象 代表整个英雄程序, 可通过ServletConfig获取

  监听器

    ServletRequestListener ,    HttpSessionListener,    ServletConttextListener

    Session的属性变化监听,移除监听, 

  过滤器
    请求的编码格式过滤

    请求封装器,   在请求过来时替换<>这些防止xss攻击,SQL注入

复制代码
package com.example.demo.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import java.io.IOException;

@WebFilter
public class EscapeFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("EscapeFilter doFilter");
        HttpServletRequestWrapper requestWrapper = new EscapeWrapper((HttpServletRequest) request);
        chain.doFilter(requestWrapper, response);
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("EscapeFilter init");
    }

    @Override
    public void destroy() {
        System.out.println("EscapeFilter destroy");
    }

}
复制代码

Wrapper

复制代码
package com.example.demo.filter;

import org.apache.commons.lang3.StringEscapeUtils;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

public class EscapeWrapper extends HttpServletRequestWrapper {

    public EscapeWrapper(HttpServletRequest request) {
        super(request);
    }

    @Override
    public String getParameter(String name) {
        String value = getRequest().getParameter(name);
        return StringEscapeUtils.escapeHtml4(value);
        //return super.getParameter(name);
    }
}
复制代码

     响应封装器,  同请求封装器,大同小异

posted on   1161588342  阅读(160)  评论(0编辑  收藏  举报
编辑推荐:
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示