Servlet框架封装后的使用方式

搭建环境

web.xml 配置

  • 配置监听器
    • @Controller : 在控制器类上编写的 注解,用来管理 控制器对象
    • @Service : 在业务层类上编写的 注解,用来管理业务层对象
    • @Repository : 在持久层类上编写的 注解,用来管理持久层对象
    • @Component : 在 除 上述 三层 之外的 其他 层 使用的注解, 用来管理 对象, 通用注解
    • @Resource : 用来 注入 对象
    • @Transactional : 启用事务管理 , 通常用在业务逻辑层 类上
<!-- 用来初始化 ApplicationContext,  让项目支持 @Controller,   @Service , @Repository,  @Component ,  @Resource  注解  -->

<listener>
    <listener-class>org.haredot.listener.ClassLoaderListener</listener-class>
</listener>
  • 配置 核心 控制器

核心 控制器 用来 完成 请求的分发 、跳转 、参数注入 等功能 ,支持的注解有 @RequestMapping , @RequestParam , @RequestPart, @RequestBody , @ResponseBody

  • @RequestMapping : 用来 映射请求 地址 和 请求方式, 默认请求方式为 GET, POST
  • @RequestParam : 用来接收 表单 类型的参数 (form表单参数 和 查询请求参数)
  • @RequestPart : 用来 接收 上传的文件对象, 注释的参数类型必须 是 Part
  • @RequestBody : 用来 接受 JSON 格式的 参数
  • @ResponseBody : 用来 标记 控制器 返回 JSON 格式的数据
<servlet>
    <servlet-name>servlet</servlet-name>
    <servlet-class>org.haredot.web.dispatcher.DispatcherServlet</servlet-class>
    <!-- 随 tomcat 启动初始化 init 方法,  init 方法 完成了 Web容器的加载  -->
    <load-on-startup>1</load-on-startup>
    <!-- 支持 文件上传 -->
    <multipart-config></multipart-config>
</servlet>

<servlet-mapping>
    <servlet-name>servlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

  • 配置 字符集编码 过滤器

    解决 请求 中文乱码问题

    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.haredot.filter.CharacterEncodingFilter</filter-class>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • 配置 Form 表单内容过滤器

    解决 PUT , PATCH , DELETE 不支持 表单传参问题

    <filter>
        <filter-name>formContentFilter</filter-name>
        <filter-class>org.haredot.filter.FormContentFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>formContentFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
  • 配置 默认Servlet处理器

    解决静态资源无法访问问题

    <servlet-mapping>
        <servlet-name>default</servlet-name>
        <url-pattern>/static/*</url-pattern>
    </servlet-mapping>
    

转发到 JSP 页面

@Controller
public  class  UserController {
    
    @RequestMapping("/user")
    public  ModelAndView  user() {
      
        return  new ModelAndView("user") ;
    }
}

ModelAndView 传入的 视图名 为 user , 则 默认转发到 /WEB-INF/pages/user.jsp , 前缀默认为 /WEB-INF/pages/ , 后缀默认为 .jsp , 可以在 配置 核心控制器的时候,进行修改

<servlet>
    <servlet-name>servlet</servlet-name>
    <servlet-class>org.haredot.web.dispatcher.DispatcherServlet</servlet-class>
    <!-- 随 tomcat 启动初始化 init 方法,  init 方法 完成了 Web容器的加载  -->
    <load-on-startup>1</load-on-startup>
    <!-- 支持 文件上传 -->
    <multipart-config></multipart-config>
    <init-param>
        <param-name>prefix</param-name>
        <!--修改为 /WEB-INF/jsp/ -->
        <param-value>/WEB-INF/jsp/</param-value>
    </init-param>
    <init-param>
        <param-name>suffix</param-name>
        <param-value>.jsp</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>servlet</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>

转发到 某个请求

@Controller
public  class  UserController {
    
    @RequestMapping("/user")
    public  ModelAndView  user() {
      
        return  new ModelAndView("forward:/login") ;
    }
}

重定向到某个请求

@Controller
public  class  UserController {
    
    @RequestMapping("/user")
    public  ModelAndView  user() {
      
        return  new ModelAndView("redirect:/login") ;
    }
}

接收表单参数

@Controller
public  class  UserController {
    
    @RequestMapping("/user")
    public  ModelAndView  user(@RequestParam("id") Long id ,  @RequestParam(value="sex",  required=false, defaultValue="m") String sex) {
      
        ...
    }
}
  • RequestParam 中常见的 成员
  • value : 必传, 用来 设置 请求参数对应的 key
  • required : 默认为 true , 是否要求改参数必传, 如果没有传,则会报错
  • defaultValue : 配合 required = false 使用, 当参数不传的时候,设置的默认值

接收 文件上传对象

@Controller
public  class  UserController {
    
    @RequestMapping(value="/user", method= RequestMethod.POST)
    public  ModelAndView  user(@RequestPart("photo") Part part) {
      
        ...
    }
}

接收 JSON 请求参数

@Controller
public  class  UserController {
    
    @RequestMapping(value="/user", method= RequestMethod.PUT)
    public  ModelAndView  user(@RequestBody User user) {
      
        ...
    }
}

获取 HttpServletRequest 等对象

@Controller
public  class  UserController {
    
    @RequestMapping(value="/user", method= RequestMethod.PUT)
    public  ModelAndView  user(HttpServletRequest request,  HttpServletResponse response,  HttpSession session,  ServletContext  application) {
        // 上述 四个对象 均可以直接注入到 控制器 对应的方法中,直接使用  
        ...
    }
}

也可以使用 工具类 WebUtils 中提供的对应方法 获取

返回 JSON

@Controller
public  class  UserController {
    
    @RequestMapping("/user")
    @ResponseBody
    public  User user(@RequestBody User user) {
      
        return user ;
    }
}

@ResponseBody 标记的方法 可以将 返回值 (必须是可以转换为JSON的对象,不能是ModelAndView) 转换为 JSON

文件下载

@Controller
public  class  UserController {
    
    @RequestMapping("/user")
    public  ResponseEntity user() {
        // 获取要下载的 流数据
        byte[]  data = ... ; 
        // 要下载的文件名
        String filename = "a.jpg" ;
        
        return ResponseEntity.builder()
                .contentType("image/jpeg")   // 设置文件的媒体类型, 如果做附件下载,也可以省略该设置
                .attachment(true)   // 是否采用附件进行下载, 默认预览(如果要下载的资源不支持预览,则自动下载)
                .filename(filename)  // 设置下载的文件名, 支持中文
                .body(data) ;   // 设置要下载的数据,该属性必须最后调用
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值