SpringMvc配置web.xml和SpringMvc.xml基础解析以及下载Interceptor写法

基于eclipse的开发,建立
在这里插入图片描述
项目,注意勾选在这里插入图片描述

  1. 目录结构以及导入的包在这里插入图片描述
    导入的包
    在这里插入图片描述
  2. web.xml的基本配置
  • DispatcherServlet 前端控制器/调度器 指定 DispatcherServlet 配置文件的位置:
    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 在 Servlet 上指定一个 contextConfigLocation 初始化参数  contextConfigLocation 指定了一个 XML 文件的地址,定义了 根应用上下文。
会被 ContextLoaderListener 加载。-->
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:springmvc.xml</param-value>
        </init-param>
<!--   load-on-startup 元素标记容器是否应该在启动的时候加载这个servlet,(实例化并调用其init()方法)。
        当值为0或者大于0时,表示容器在应用启动时就加载并初始化这个servlet; -->
        <load-on-startup>1</load-on-startup>
    </servlet>
  • 将 DispatcherServlet 映射到 “/”
<servlet-mapping>
    <servlet-name>springmvc</servlet-name>
    <url-pattern>/</url-pattern>
</servlet-mapping>
  • encodingFilter 解决乱码,配置utf-8过滤器 注意字符过滤器要写在过滤控制器前
<filter>
        <filter-name>encodingFilter</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>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
  1. SpringMvc.xml配置
    在这里插入图片描述
<!-- 1.开启SpringMVC注解驱动 -->
	<mvc:annotation-driven />
	<!-- 2.静态资源 默认servlet配置 -->
	<mvc:default-servlet-handler />

	<!-- 3.配置jsp 显示ViewResolver视图解析器 -->
	<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/WEB-INF/jsp/" />
		<property name="suffix" value=".jsp" />
	</bean> 

	<!-- 4.扫描web相关的bean -->
	<context:component-scan base-package="com.tsh.controller" />

	<!-- 上传文件的解释器 -->
	<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
		<property name="maxUploadSize" value="#{1024*1024*5}"></property> <!-- byte为单位 -->
	</bean>

  1. Interceptor配置
  • 写入SpringMvc.xml 写法固定
<!-- 配置拦截器组 -->
	<mvc:interceptors>
		<!-- 拦截器 -->
		<mvc:interceptor>
			<!-- 要拦截的配置 -->
			<mvc:mapping path="/form/download/**"  />
			<!-- 设置不拦截的配置 -->
			<!-- <mvc:exclude-mapping path="/login"/> -->
			<!-- 配置拦截器 -->
			<bean class="com.tsh.interceptor.downloadInterceptor" />  
		</mvc:interceptor>
		<!-- 拦截器 -->
		<mvc:interceptor>
			<!-- 要拦截的配置 -->
			<mvc:mapping path="/form2/upload/**"  />
			<!-- 设置不拦截的配置 -->
			<!-- <mvc:exclude-mapping path="/form/"/> -->
			<!-- 配置拦截器 -->
			<bean class="com.tsh.interceptor.uploadInterceptor" />  
		</mvc:interceptor>
</mvc:interceptors>
  • Interceptor的downloadInterceptor.java代码
  • 注意,重定向的请求不能生效,因为response的请求再提交之后不能再进行修改!**
public class downloadInterceptor implements HandlerInterceptor{
    
    
	@Override
	public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object arg2) throws Exception {
    
    
		System.out.println("进入文件下载拦截器");
		if (request.getRequestURI().contains("vip")) {
    
    
			System.out.println("允许下载");
			return true;
		} else {
    
    
			System.out.println("只有会员才能下载!");
//			request.setCharacterEncoding("utf-8");
//			request.getSession().setAttribute("msg", "只有会员才能下载");
			System.out.println(request.getServletContext().getContextPath());
//			response.sendRedirect(request.getServletContext().getContextPath()+"/WebContent/WEB-INF/jsp/hello1.jsp");
		}
		return false;
	}
	
	@Override
	public void postHandle(HttpServletRequest request, HttpServletResponse response, Object arg2, ModelAndView arg3)
			throws Exception {
    
    
		System.out.println("下载成功--postHandle");
		
		/**/
//		request.setCharacterEncoding("utf-8");
//		request.getSession().setAttribute("msg", "下载完成");
//		response.sendRedirect("jsp/hello.jsp");
		return;
		
	}
	
	@Override
	public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object arg2, Exception arg3)
			throws Exception {
    
    
		// TODO Auto-generated method stub
		System.out.println("下载--afterCompletion");	
	}
}
  • downloadController.java
@Controller
@RequestMapping("/form")
public class downloadController {
    
    

	@RequestMapping("download/**")
	public void downLoad(HttpServletRequest request, HttpServletResponse response) throws IOException {
    
    
		// 设置下载名称()
		response.setHeader("Content-Disposition", "filename=welcome.png");
		// 设置下载类型
		response.setHeader("Content-Type", "application/png");
		// 准备需要被下载的文件(告诉他下载路径)
		File file = new File("C:\\Users\\asus\\Pictures\\Sketchpad.png");

//		System.out.println("download start");

		// 读文件流(输入流inputStream)
		FileInputStream fileInputStream = new FileInputStream(file);
		// 获取输出流(outPutStream)
		ServletOutputStream servletOutputStream = response.getOutputStream();
		// 开启边读边写操作
		byte[] b = new byte[1024];
		// 记录下读档的位置
		int len = 0;
		while ((len = fileInputStream.read(b)) != -1) {
    
    
			servletOutputStream.write(b, 0, len);
		}

		// 下载完成后刷新
		servletOutputStream.flush();
		// 关闭输出流
		servletOutputStream.close();
		// 关闭输入流
		fileInputStream.close();

	}
}

猜你喜欢

转载自blog.csdn.net/weixin_45769992/article/details/116858720