@RequestMapping(value="/hello2.do",method= {RequestMethod.POST,RequestMethod.GET},params= {"id=","sb=hh"})
public ModelAndView hello2(ModelAndView mv) {
mv.addObject("mess", "你不會是傻逼吧");
mv.setViewName("index.jsp");
return mv;
}
@RequestMapping(value="/hello4.do",method= {RequestMethod.POST,RequestMethod.GET})
public ModelAndView hello4(ModelAndView mv) {
mv.addObject("mess", "nihao");
mv.setViewName("/index.jsp");
return mv;
}
@RequestMapping(value="/hello5.do",method={RequestMethod.POST,RequestMethod.GET})
public String hello5(HttpServletRequest request) {
request.setAttribute("mess", "nihaoaaa");
//返回类型为String这里只能用request等 传参数 用ModelAndView的addObject不行
return "forward:/index.jsp";//请求转发
//return "redirect:/index.jsp"; //重定向
}
spring-servlet.xml配置
<!-- 启动spring自动扫描,注入bean -->
<context:component-scan base-package="com.lanqiao"/>
<!-- 启用springmvc注解功能 -->
<mvc:annotation-driven />
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 视图后缀,controller中的方法返回的url字符串会添加该后缀 -->
<property name="suffix" value=".jsp"/>
<!-- 视图前缀controller中的方法返回的url字符串会添加该前缀 -->
<property name="prefix" value="/WEB-INF/jsp/"/>
</bean>
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="defaultEncoding" value="utf-8" /> <!-- 默认编码 (ISO-8859-1) -->
<property name="maxInMemorySize" value="10240" /> <!-- 最大内存大小 (10240) 设置在文件上传时允许写到内存中的最大值-->
<property name="uploadTempDir" value="/temp/" /> <!--临时文件存储目录-->
<property name="maxUploadSize" value="-1" /> <!-- 最大文件大小,-1为无限止(-1) -->
</bean>
配置web.xml
<servlet>
<servlet-name>example</servlet-name>
<!--Spring MVC里的前端控制器DispatcherServlet就是一个Servlet -->
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- 加载spring核心配置文件 -->
<param-name>contextConfigLocation</param-name>
<!--param-value是Spring MVC配置文件的路径 -->
<param-value>classpath:spring-servlet.xml</param-value>
</init-param>
<!--启动级别为1,当Tomcat启动时,应用也随之启动 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>example</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
文件上传下载
@RequestMapping(value="/upload.do",method=RequestMethod.POST)
public String fileUpLoad(String name,@RequestParam("file") CommonsMultipartFile file,HttpSession session){
if(!file.isEmpty()){
String path = session.getServletContext().getRealPath("/upload/");
File parent = new File(path);
if(!parent.exists()){
parent.mkdirs();
}
String fileName = file.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf("."));
File targetFile = new File(path,new Date().getTime()+fileType);
try {
file.getFileItem().write(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
}
return "showData";
}
// 编写jsp页面
<form action="upload.do" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="submit" value="上传">
</form>
///多个文件
@RequestMapping(value="/mupload.do",method=RequestMethod.POST)
public String muFileUpLoad(String name,@RequestParam("file") CommonsMultipartFile[] files,HttpSession session){
if(files!=null && files.length>0){
String path = session.getServletContext().getRealPath("/upload/");
for (CommonsMultipartFile file : files) {
String fileName = file.getOriginalFilename();
String fileType = fileName.substring(fileName.lastIndexOf("."));
File targetFile = new File(path,new Date().getTime()+fileType);
try {
file.getFileItem().write(targetFile);
} catch (Exception e) {
e.printStackTrace();
}
}
}
return "showData";
}
//编写jsp页面
<form action="mupload.do" method="post" enctype="multipart/form-data">
<input type="file" name="file" />
<input type="file" name="file" />
<input type="submit" value="上传">
</form>
//文件下载
@RequestMapping(value="/downLoad.do",method=RequestMethod.GET)
public void downLoad(HttpSession session,HttpServletResponse response,String fileName)throws Exception{
String path = session.getServletContext().getRealPath("/upload")+"\\"+fileName;
File file = new File(path);
if(!file.exists()){
response.sendError(404, "您要下载的文件没找到");
return;
}
BufferedInputStream bis = new BufferedInputStream(new FileInputStream(file));
response.setContentType("multipart/form-data");
response.setHeader("Content-Disposition", "attachment;filename="+fileName);
OutputStream out = response.getOutputStream();
byte [] buff = new byte[1024];
int len = -1;
while((len= bis.read(buff))!=-1){
out.write(buff,0,len);
}
bis.close();
out.close();
}
拦截器
public class Login implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest httpRequest,
HttpServletResponse httpResponse, Object arg2, Exception arg3)
throws Exception {
}
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1,
Object arg2, ModelAndView arg3) throws Exception {
}
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response,
Object object) throws Exception {
Object obj = request.getSession().getAttribute("user");
if(obj==null){
//请求的路径
String contextPath=request.getContextPath();
response.sendRedirect(contextPath + "/view/login.jsp");
return false;
}
return true;
}
}
preHandle() 方法:该方法会在控制器方法(controller中的方法)调用前执行,其返回值表示是否中断后续操作。当其返回值为true时,表示继续向下执行;当其返回值为false时,会中断后续的所有操作(包括调用下一个拦截器和控制器类中的方法执行等)。
postHandle()方法:该方法会在控制器方法(controller中的方法)调用之后,且解析视图之前执行。可以通过此方法对请求域中的模型和视图做出进一步的修改。
afterCompletion()方法:该方法会在整个请求完成,即视图渲染结束之后执行。可以通过此方法实现一些资源清理、记录日志信息等工作。
拦截器的spring-servlet.xml配置
<mvc:interceptors>
<mvc:interceptor>
<!--
/是web项目的根目录
/*是所有文件夹,不含子文件夹(一级目录)
/**的意思是所有文件夹及里面的子文件夹(多级目录)
-->
<!-- /** 表示拦截所有请求 -->
<!-- <mvc:mapping path="/**" /> -->
<!-- /user/** 表示拦截/user/下的所有请求 /user/type/add.do-->
<!-- <mvc:mapping path="/user/**" /> -->
<!-- /item/* 表示拦截/item/下的请求 可以拦截/item/add.do 不可以拦截/item/type/add.do -->
<!-- <mvc:mapping path="/item/*" /> -->
<mvc:mapping path="/item/addCart.do" />
<mvc:mapping path="/item/pay.do" />
<!-- 不进行拦截 -->
<!-- <mvc:exclude-mapping path="/index.html" /> -->
<bean class="com.lq.interceptor.Login" />
</mvc:interceptor>
</mvc:interceptors>