基于eclipse的开发,建立
项目,注意勾选
- 目录结构以及导入的包
导入的包
- 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>
- 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>
- 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();
}
}