SSM框架中易忘记知识点

3 篇文章 0 订阅
2 篇文章 0 订阅

在这里插入图片描述

1、过滤器处理中文乱码

在前端页面中输入中文字符,POST方式提交给服务器,服务器端渠道的值会乱码,解决这个问题,可以在web.xml中配置过滤器来对所有请求添加编码集的设置。

<!--2、过滤器,控制编码格式-->
  <filter>
    <filter-name>characterEncodingFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>characterEncodingFilter</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>

由于此过滤器对所有请求过滤掉,所以需要在 applicationContext-mvc.xml中排除掉静态资源的过滤。

<!--3、对于过滤器,排除静态资源-->
    <mvc:resources mapping="/images/**" location="/images/"/>
    <mvc:resources mapping="/js/**" location="/js/"/>
    <mvc:resources mapping="/jsp/**" location="/jsp/"/>

2、自定义类型转换器

三步走:

1、自定义转换类,实现Converter接口,对接收到的字符串类型日期进行转换

package com.ityj.ssm.utils;

import org.springframework.core.convert.converter.Converter;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class MyDateFormatConverter implements Converter<String,Date> {
    @Override
    public Date convert(String str) {
        String type = "yyyy-MM-dd";
        if (str.contains("/")){
            type = "yyyy/MM/dd";
        }
        Date parse = null;
        SimpleDateFormat sdf = new SimpleDateFormat(type);
        try {
            parse = sdf.parse(str);
        } catch (ParseException e) {
            e.printStackTrace();
        }
        if (parse==null) {
            throw new RuntimeException();
        }
        return parse;
    }
}

2、在applicationContext-mvc.xml中配置容器,并把自定义的转换器加入

<!--5、配置日期类型转换器-->
    <bean id="conversionServiceFactoryBean" class="org.springframework.context.support.ConversionServiceFactoryBean">
        <property name="converters">
            <set>
                <bean class="com.ityj.ssm.utils.MyDateFormatConverter"/>
            </set>
        </property>
    </bean>

3、开启对转换器的应用

<mvc:annotation-driven conversion-service="conversionServiceFactoryBean">
    
</mvc:annotation-driven>

3、SpringMVC文件上传步骤

1、在applicationContext-mvc.xml配置文件解析器对象

<!--6、配置文件解析器对象,id必须为multipartResolver,不能自定义  maxUploadSize单位是字节-->
    <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
        <!--上传文件的最大大小,单位为字节 -->
        <property name="maxUploadSize" value="17367648787"></property>
    </bean>

2、编写前端页面

  • input的type设置为file
  • form表单的method设为post,
  • form表单的enctype设置为multipart/form-data,以二进制的形式传输数据。
<form action="${pageContext.request.contextPath}/hello/fileupLoadTest" enctype="multipart/form-data" method="post">
    <input type="file" name="file"><br><br>
    <input type="submit" value="上传">
</form>

3、编写控制器controller

使用MultipartFile对象作为参数,接收前端发送过来的文件,将文件写入本地文件中,就完成了上传操作

 @RequestMapping("/fileupLoadTest")
    public String fileupLoadTest(@RequestParam("file") MultipartFile file, HttpServletRequest req)
            throws IllegalStateException, IOException {

        // 判断文件是否为空,空则返回失败页面
        if (file.isEmpty()) {
            return "failed";
        }
        // 获取文件存储路径(绝对路径)
        String path = req.getServletContext().getRealPath("/WEB-INF/file");
        // 获取原文件名
        String fileName = file.getOriginalFilename();
        // 创建文件实例
        File filePath = new File(path, fileName);
        // 如果文件目录不存在,创建目录
        if (!filePath.getParentFile().exists()) {
            filePath.getParentFile().mkdirs();
            System.out.println("创建目录" + filePath);
        }
        // 写入文件
        file.transferTo(filePath);
        return "success";
    }

4、异常处理

1、编写自定义实体类MyException

package com.ityj.ssm.domain;

public class MyException extends Exception {
    private String errMsg;

    public String getErrMsg() {
        return errMsg;
    }

    public void setErrMsg(String errMsg) {
        this.errMsg = errMsg;
    }

    public MyException(String errMsg) {
        this.errMsg = errMsg;
    }

    public MyException(String message, String errMsg) {
        super(message);
        this.errMsg = errMsg;
    }

    public MyException() {
    }

    @Override
    public String toString() {
        return "MyException{" +
                "errMsg='" + errMsg + '\'' +
                '}';
    }
}

2、前端代码调用

    <a href="${contextPath}/hello/exceptiontest">异常处理练习</a><br/>

3、控制器controller编写,制造异常

@RequestMapping(path = "/exceptiontest")
    public ModelAndView exceptionTest() throws MyException {
        List<User> users = userService.selectAllUsers();
        ModelAndView mv = new ModelAndView();
        mv.setViewName("success");
        try{
            int a = 1/0;
        } catch (Exception e) {
            e.printStackTrace();
            throw new MyException("数字转换出现异常了。。。");
        }
        mv.addObject("users",users);
        return mv;
    }

4、在applicationContext-mvc.xml配置文件解析器对象

<!--7、配置自定义的异常处理器-->
<bean class="com.ityj.ssm.utils.MyExceptionResolver"/>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值