SpringMVC后续4

文件上传下载

导入maven

XML 复制代码
<dependency>
      <groupId>commons-fileupload</groupId>
      <artifactId>commons-fileupload</artifactId>
      <version>1.3.2</version>
    </dependency>

配置MultipartResolver

XML 复制代码
<bean id="multipartResolver"
      class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
    <!-- 设置上传文件的最大尺寸为5MB -->
    <property name="maxUploadSize" >
        <value>5242880</value>
    </property>
</bean>

创建表单

java 复制代码
<form action="uploadFile" method="post" enctype="multipart/form-data">
    文件:<input type="file" name="file"><br>
    <input type="submit" value="上传">
</form>

创建Controller

java 复制代码
@RequestMapping("uploadFile")
    public String uploadFile(@RequestParam("file") CommonsMultipartFile file, HttpServletRequest request){

        //文件上传的位置   服务器路径
    String path = request.getSession().getServletContext().getRealPath("resources/upload");
    //System.out.println(path);
    if(!file.isEmpty()){
        try {
            FileUtils.copyInputStreamToFile(file.getInputStream(), new File(path, file.getOriginalFilename()));
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    return "index";
    }

配置文件问题

静态资源问题

方式一:修改前端控制器 不推荐 web.xml

XML 复制代码
<servlet>
  <servlet-name>SpringMVC</servlet-name>
  <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  <load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
  <servlet-name>SpringMVC</servlet-name>
  <url-pattern>*.do</url-pattern>
</servlet-mapping>

方式二:追加默认放行的资源 不推荐 (有多少写多少)

XML 复制代码
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
  <servlet-name>default</servlet-name>
  <url-pattern>*.js</url-pattern>
</servlet-mapping>

方式三:修改SpringMVC-servlet.xml文件

追加mvc的命名空间

XML 复制代码
xmlns:mvc="http://www.springframework.org/schema/mvc"
http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd
                        //mvc驱动
                        //mapping:映射路径
                        //location:真实路径
                         <mvc:annotation-driven/>
    <mvc:resources mapping="/resources/**" location="/resources/"/>
XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans
                        http://www.springframework.org/schema/beans/spring-beans.xsd
                        http://www.springframework.org/schema/context
                        http://www.springframework.org/schema/context/spring-context.xsd
                        http://www.springframework.org/schema/mvc
                        http://www.springframework.org/schema/mvc/spring-mvc.xsd">


    <context:annotation-config/>
    <context:component-scan base-package="com.hwq"></context:component-scan>

    <mvc:annotation-driven/>
    <mvc:resources mapping="/resources/**" location="/resources/"/>

<!--    视图解析器-->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>

</beans>

异常处理

局部异常

作用于当前控制器

java 复制代码
@ExceptionHandler({Exception.class})
public String excpetion(Exception a){
    System.out.println("抛出异常");
    a.printStackTrace();
    return "redirect:error.jsp";
    //return "error";
}

全局异常

作用于整个项目

XML 复制代码
<!-- 异常解析器 -->
	  <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
	  		<property name="exceptionMappings">
	  			<props>
	  				<prop key="java.lang.Exception">redirect:error.jsp</prop>
	  			</props>
	  		</property>
	  </bean>

拦截器

第一步:创建类,继承拦截器适配器类或实现拦截器接口

第二步:重写方法

java 复制代码
public class MyInterceptor implements HandlerInterceptor {
    /*
    登录拦截

    false表示拦截,不向下执行
    true表示放行
     */
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("拦截器执行了");
        //判断是否合法    登录路径   session有数据
        //request.getRequestURI().equals("/login");
        //request.getSession().getAttribute("user");

        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

        System.out.println("postHandle");
    }
    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("拦截器执行结束了");
    }
}

第三步:配置拦截器

XML 复制代码
<!--    拦截器配置-->
    <mvc:interceptors>
        <mvc:interceptor>
            <mvc:mapping path="/*"/>
            <bean id="myInterceptor" class="com.hwq.interceptor.MyInterceptor"></bean>
        </mvc:interceptor>
    </mvc:interceptors>
相关推荐
半花7 分钟前
i18n国际语言化配置
前端
编程贝多芬10 分钟前
Promise 的场景和最佳实践
前端·javascript
Asort11 分钟前
JavaScript 从零开始(四):基础语法详解——从变量声明到数据类型的完全指南
前端·javascript
木木jio14 分钟前
前端大文件分片上传 —— 基于 React 的工程化实现
前端·javascript
南雨北斗17 分钟前
JS的对象属性存储器
前端
Lotzinfly17 分钟前
12个TypeScript奇淫技巧你需要掌握😏😏😏
前端·javascript·面试
开源之眼22 分钟前
React中,useState和useReducer有什么区别
前端
普郎特33 分钟前
"不再迷惑!用'血缘关系'彻底搞懂JavaScript原型链机制"
前端·javascript
可观测性用观测云42 分钟前
前端错误可观测最佳实践
前端
恋猫de小郭43 分钟前
Android 将强制应用使用主题图标,你怎么看?
android·前端·flutter