常用web组件

  • 拦截器
  • Servlet
  • 过滤器

使用思想

  • 创建自定义类
  • 实现或者继承框架里的接口或类
  • 将自定义类注册到框架中
  • 使用自定义类

拦截器

说明

  • 拦截器是SpringMVC中的一种对象,能拦截对Controller的请求
  • 拦截器框架中有系统的拦截器,还可以自定义拦截器,实现对请求的预先处理

自定义拦截器

  • 创建自定义的拦截器类实现SpringMVC框架的HandlerInterceptor接口,根据对拦截时机的需求,重写接口里的对应方法
package com.example.web.interceptor;

import org.springframework.web.servlet.HandlerInterceptor;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginInterceptor implements HandlerInterceptor {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        //实际应用中被拦截的请求在这里执行其他逻辑判断,是否放行由判断结果来定
        System.out.println("LoginInterceptor拦截器的preHandle方法执行");
        return true;
    }
}
  • 注册拦截器
package com.example.web.config;

import com.example.web.interceptor.LoginInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

@Configuration
public class MyAppConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        //创建一个拦截器对象
        LoginInterceptor loginInterceptor = new LoginInterceptor();
        //需要拦截的url
        String[] interceptorUrl = {"/user/**"};
        //需要放行的url
        String[] excludeUrl = {"/user/login"};
        registry.addInterceptor(loginInterceptor)
                .addPathPatterns(interceptorUrl)
                .excludePathPatterns(excludeUrl);
    }
}
  • Controller层
package com.example.web.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
public class InterceptorTest {
    @RequestMapping("/user/account")
    @ResponseBody
    public String account(){
        return "访问账户页面";
    }

    @RequestMapping("/user/login")
    @ResponseBody
    public String login(){
        return "访问用户登录页面";
    }

}

Servlet

  • 创建Servlet类,继承HttpServlet
package com.example.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应类型
        resp.setContentType("text/html;charset=utf-8");
        //获取输出流对象
        PrintWriter out = resp.getWriter();
        //向浏览器输出数据
        out.println("--- springboot的servlet被调用 ---");
        out.flush();
        out.close();
    }
}
  • 注册Servlet, 让框架能找到Servlet
package com.example.web.config;

import com.example.web.servlet.MyServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyWebConfig {
    //调用方法,注册servlet
    //    @Bean
    //    public ServletRegistrationBean servletRegistrationBean(){
    //        return new ServletRegistrationBean(new MyServlet(), "/servlet.do");
    //    }

    //注册servlet的方式2
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new MyServlet());
        servletRegistrationBean.addUrlMappings("/servlet1.do", "/servlet2.do");
        return servletRegistrationBean;
    }
}

过滤器

说明

  • Filter是Servlet规范中的过滤器,可以处理请求,对请求的参数,属性进行调整。常常在过滤器中处理字符编码

使用自定义过滤器

  • 创建自定义过滤器类
package com.example.web.filter;

import javax.servlet.*;
import java.io.IOException;

public class MyFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        servletResponse.setContentType("text/html;charset=utf-8");
        System.out.println("MyFilter的doFilter方法被调用");
        filterChain.doFilter(servletRequest, servletResponse);
    }
}
  • 注册Filter过滤器对象
package com.example.web.config;

import com.example.web.filter.MyFilter;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyFilterConfig {
    //定义方法,注册过滤器
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(new MyFilter());
        filterRegistrationBean.addUrlPatterns("/user/*");
        return filterRegistrationBean;
    }
}

使用自定义字符集过滤器

  • 创建servlet
package com.example.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应类型
        resp.setContentType("text/html");
        //获取输出流对象
        PrintWriter out = resp.getWriter();
        out.println("使用springboot字符过滤器");
        out.flush();
        out.close();
    }
}
  • 注册servlet和配置字符集过滤器
package com.example.web.config;

import com.example.web.servlet.MyServlet;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.filter.CharacterEncodingFilter;

@Configuration
public class MyWebConfig {
    //注册servlet
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new MyServlet());
        servletRegistrationBean.addUrlMappings("/test");
        return servletRegistrationBean;
    }

    //注册内置的字符过滤器
    @Bean
    public FilterRegistrationBean filterRegistrationBean(){
        //内置的字符过滤器
        CharacterEncodingFilter characterEncodingFilter = new CharacterEncodingFilter();
        //按需求定制字符过滤器
        characterEncodingFilter.setEncoding("utf-8");
        characterEncodingFilter.setForceEncoding(true);
        //注册按照个性化需求配置后的字符过滤器
        FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
        filterRegistrationBean.setFilter(characterEncodingFilter);
        filterRegistrationBean.addUrlPatterns("/*");
        return filterRegistrationBean;
    }
}
  • 修改application.properties文件,让自定义的过滤器起作用
#关闭springboot框架默认的字符编码格式:ISO-8859-1
server.servlet.encoding.enabled=false

使用框架内置的字符集过滤器

  • 创建servlet
package com.example.web.servlet;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class MyServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应类型
        resp.setContentType("text/html");
        //获取输出流对象
        PrintWriter out = resp.getWriter();
        out.println("**** 使用springboot字符过滤器 ****");
        out.flush();
        out.close();
    }
}
  • 注册servlet
package com.example.web.config;

import com.example.web.servlet.MyServlet;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MyWebConfig {
    //注册servlet
    @Bean
    public ServletRegistrationBean servletRegistrationBean(){
        ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
        servletRegistrationBean.setServlet(new MyServlet());
        servletRegistrationBean.addUrlMappings("/test");
        return servletRegistrationBean;
    }
}
  • 修改application.properties文件,让框架内置的字符集过滤器实现个性化定制
#让springboot默认的字符过滤器生效
server.servlet.encoding.enabled=true
#将默认的字符过滤器的编码格式设置为utf-8
server.servlet.encoding.charset=utf-8
#将请求和响应的编码格式都按照字符过滤器中的编码格式来进行解析
server.servlet.encoding.force=true

原文地址:http://www.cnblogs.com/nefu-wangxun/p/16882975.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性