三、如何实现页面重定向
在controller层的方法中,返回值为String类型,返回一个界面使用的是请求转发的方式,如果想要使用重定向跳转至其他页面,在返回值中加上redirect:,/当springmvc看到你返回的字符串中含有redirect:时,将会认为你要进行重定向跳转。
return “redirect:/login.jsp”; @RequestMapping("/hello05") public String hello05(Map map){ System.out.println("hello05"); int count = 1/0; map.put("wangdao","qq"); return "redirect:/login.jsp"; }
四、拦截器
4.1、创建拦截器
package com.Interceptor; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("preHandle"); // 拦截规则,自己根据业务需求实现 String username = request.getParameter("username"); if (null==username || "".equals(username)){ response.sendRedirect("/index.jsp"); return false; } return true; } @Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { System.out.println("postHandle:handle执行完,渲染之前"); } @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { System.out.println("afterCompletion:handle执行完,渲染之后"); } }
我们创建的拦截器类需要实现HandlerInterceptor接口,并且重写preHandle方法
我们如果要使用我们定义的拦截器,需要在springmvc.xml文件中注册该拦截器
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/hello/**"/> <mvc:exclude-mapping path="/hello/hello04"/> <bean class="com.Interceptor.LoginInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
五、文件上传
5.1、上传到本地服务器
第一步,导入文件上传的依赖
<!-- commons 文件上传jar --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>1.4</version> </dependency> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fileupload</artifactId> <version>1.3.1</version> </dependency>
第二步,创建一个页面,这里需要注意的是提交方式必须为post提交,表单类型enctype需要设置为multipart/form-data的格式,这里的input标签的name属性不可省略,需要和controller层接收的参数名相同。
<%-- Created by IntelliJ IDEA. User: lenovo Date: 2023/6/25 Time: 16:39 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>上传文件</title> </head> <body> <form action="/hello/hello03" method="post" enctype="multipart/form-data"> <input type="text" name="username"><br> <input type="file" name="photo"><br> <input type="text" name="age"><br> <input type="text" name="birthday"> <input type="submit" value="提交"> </form> </body> </html>
第三步,在springMVC的配置文件中配置文件上传解析器
<!-- 配置multipartResolver,用于上传文件,使用spring的CommonsMultipartResolver --> <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver"> <property name="maxInMemorySize" value="5000000"></property> <property name="defaultEncoding" value="UTF-8"></property> </bean>
第四步,创建实现文件上传接口的方法,@RequestMapping表示请求的接口,
@RequestMapping("/uploadPage") public String uploadPage(){ return "upload.jsp"; } @RequestMapping("/upload") @ResponseBody // 此方法的返回值就是响应体的内容 public String upload(String username, MultipartFile photo,HttpServletRequest request){ String fileType = photo.getOriginalFilename(); int index = fileType.lastIndexOf("."); fileType = fileType.substring(index); String path = request.getSession().getServletContext().getRealPath("static"+File.separator+"uploadfiles"); long filename = System.currentTimeMillis(); System.out.println(path); System.out.println(fileType); System.out.println(path+"\\"+filename+fileType); File file = new File(path+"\\"+filename+fileType); try { photo.transferTo(file); } catch (IOException e) { e.printStackTrace(); } return "上传成功!"; }
六、内容补充
@RestController 等价于 @Controller+@ResponseBody
该注解下所有的方法都是返回json数据
@RequestMapping: 作用: 把请求路径映射到响应的方法上。
@RequestParam(value = “u”):设置你接受的请求参数名。查询参数
@Param(value=“name”):设置的时mybatis中mapper映射文件中的参数
@RequestMapping(value = “/addUser”,method = RequestMethod.POST)
method:表示该接口接受的请求方式.不设置可以接受任意请求方式。
@GetMapping(“addUser”):表示只接受get提交方式的请求
@RequestBody:把请求的json数据转换为java对象。从前端到后端
@ResponseBody:把java转换为json数据 从后端转前端