• Java SSM Spring MVC 响应数据和结果视图+文件上传+异常处理+拦截器


      第一章:响应数据和结果视图1. 返回值分类  1. 返回字符串    1. Controller方法返回字符串可以指定逻辑视图的名称,根据视图解析器为物理视图的地址。

    1. @RequestMapping(value="/hello")
    2. public String sayHello() {
    3. System.out.println("Hello SpringMVC!!");
    4. // 跳转到XX页面
    5. return "success";
    6. }

        2. 具体的应用场景

    1. @Controller
    2. @RequestMapping("/user")
    3. public class UserController {
    4. /**
    5. * 请求参数的绑定
    6. */
    7. @RequestMapping(value="/initUpdate")
    8. public String initUpdate(Model model) {
    9. // 模拟从数据库中查询的数据
    10. User user = new User();
    11. user.setUsername("张三");
    12. user.setPassword("123");
    13. user.setMoney(100d);
    14. user.setBirthday(new Date());
    15. model.addAttribute("user", user);
    16. return "update";
    17. }
    18. }
    1. <h3>修改用户</h3>
    2. ${ requestScope }
    3. <form action="user/update" method="post">
    4. 姓名:<input type="text" name="username" value="${ user.username }"><br>
    5. 密码:<input type="text" name="password" value="${ user.password }"><br>
    6. 金额:<input type="text" name="money" value="${ user.money }"><br>
    7. <input type="submit" value="提交">
    8. </form>

      2. 返回值是void
        1. 如果控制器的方法返回值编写成void,执行程序报404的异常,默认查找JSP页面没有找到。      1. 默认会跳转到@RequestMapping(value="/initUpdate") initUpdate的页面。    2. 可以使用请求转发或者重定向跳转到指定的页面

    1. @RequestMapping(value="/initAdd")
    2. public void initAdd(HttpServletRequest request,HttpServletResponse response) throws
    3. Exception {
    4. System.out.println("请求转发或者重定向");
    5. // 请求转发
    6. // request.getRequestDispatcher("/WEB-INF/pages/add.jsp").forward(request,
    7. response);
    8. // 重定向
    9. // response.sendRedirect(request.getContextPath()+"/add2.jsp");
    10. response.setCharacterEncoding("UTF-8");
    11. response.setContentType("text/html;charset=UTF-8");
    12. // 直接响应数据
    13. response.getWriter().print("你好");
    14. return;
    15. }

       3. 返回值是ModelAndView对象

        1. ModelAndView对象是Spring提供的一个对象,可以用来调整具体的JSP视图    2. 具体的代码如下 

    1. /
    2. **
    3. * 返回ModelAndView对象
    4. * 可以传入视图的名称(即跳转的页面),还可以传入对象。
    5. * @return
    6. * @throws Exception
    7. */
    8. @RequestMapping(value="/findAll")
    9. public ModelAndView findAll() throws Exception {
    10. ModelAndView mv = new ModelAndView();
    11. // 跳转到list.jsp的页面
    12. mv.setViewName("list");
    13. // 模拟从数据库中查询所有的用户信息
    14. List<User> users = new ArrayList<>();
    15. User user1 = new User();
    16. user1.setUsername("张三");
    17. user1.setPassword("123");
    18. User user2 = new User();
    19. user2.setUsername("赵四");
    20. user2.setPassword("456");users.add(user1);users.add(user2);// 添加对象mv.addObject("users", users);return mv;} 
    1. <
    2. %@ page language="java" contentType="text/html; charset=UTF-8"
    3. pageEncoding="UTF-8"%>
    4. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
    5. <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    6. "http://www.w3.org/TR/html4/loose.dtd">
    7. <html>
    8. <head>
    9. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10. <title>Insert title here</title>
    11. </head>
    12. <body>
    13. <h3>查询所有的数据</h3>
    14. <c:forEach items="${ users }" var="user">
    15. ${ user.username }
    16. </c:forEach>
    17. </body>
    18. </html>

    2. SpringMVC框架提供的转发和重定向1. forward请求转发  1. controller方法返回String类型,想进行请求转发也可以编写成

    1. /**
    2. * 使用forward关键字进行请求转发
    3. * "forward:转发的JSP路径",不走视图解析器了,所以需要编写完整的路径
    4. * @return
    5. * @throws Exception
    6. */
    7. @RequestMapping("/delete")
    8. public String delete() throws Exception {
    9. System.out.println("delete方法执行了...");
    10. // return "forward:/WEB-INF/pages/success.jsp";
    11. return "forward:/user/findAll";
    12. }

    2. redirect重定向  1. controller方法返回String类型,想进行重定向也可以编写成

    1. /**
    2. * 重定向
    3. * @return
    4. * @throws Exception
    5. */
    6. @RequestMapping("/count")
    7. public String count() throws Exception {
    8. System.out.println("count方法执行了...");
    9. return "redirect:/add.jsp";
    10. // return "redirect:/user/findAll";
    11. }

    3. ResponseBody响应json数据  1. DispatcherServlet会拦截到所有的资源,导致一个问题就是静态资源(imgcssjs)也会被拦截到,从而
      不能被使用。解决问题就是需要配置静态资源不进行拦截,在springmvc.xml配置文件添加如下配置    1. mvc:resources标签配置不过滤      1. location元素表示webapp目录下的包下的所有文件      
    2. mapping元素表示以/static开头的所有请求路径,如/static/a 或者/static/a/b

    1. <mvc:resources location="/css/" mapping="/css/**"/>
    2. <mvc:resources location="/images/" mapping="/images/**"/>
    3. <mvc:resources location="/js/" mapping="/js/**"/>

        2. 使用@RequestBody获取请求体数据

    1. // 页面加载
    2. // 页面加载
    3. $(function(){
    4. // 绑定点击事件
    5. $("#btn").click(function(){
    6. $.ajax({
    7. url:"user/testJson",
    8. contentType:"application/json;charset=UTF-8",
    9. data:'{"addressName":"aa","addressNum":100}',
    10. dataType:"json",
    11. type:"post",
    12. success:function(data){
    13. alert(data);
    14. alert(data.addressName);
    15. }
    16. });
    17. });
    18. });
    1. /**
    2. *获取请求体的数据
    3. * @param body
    4. */
    5. @RequestMapping("/testJson")
    6. public void testJson(@RequestBody String body) {
    7. System.out.println(body);
    8. } /

      3. 使用@RequestBody注解把json的字符串转换成JavaBean的对象

    1. /*
    2. / 页面加载
    3. // 页面加载
    4. $(function(){
    5. // 绑定点击事件
    6. $("#btn").click(function(){
    7. $.ajax({
    8. url:"user/testJson",
    9. contentType:"application/json;charset=UTF-8",
    10. data:'{"addressName":"aa","addressNum":100}',
    11. dataType:"json",
    12. type:"post",
    13. success:function(data){
    14. alert(data);
    15. alert(data.addressName);
    16. }
    17. });
    18. });
    19. });
    1. /**
    2. * 获取请求体的数据
    3. * @param body
    4. */
    5. @RequestMapping("/testJson")
    6. public void testJson(@RequestBody Address address) {
    7. System.out.println(address);
    8. }

      4. 使用@ResponseBody注解把JavaBean对象转换成json字符串,直接响应    1. 要求方法需要返回JavaBean的对象

    1. // 页面加载
    2. $(function(){
    3. // 绑定点击事件
    4. $("#btn").click(function(){
    5. $.ajax({
    6. url:"user/testJson",
    7. contentType:"application/json;charset=UTF-8",
    8. data:'{"addressName":"哈哈","addressNum":100}',dataType:"json",type:"post",success:function(data){alert(data);alert(data.addressName);}});});});
    1. @RequestMapping("/testJson")
    2. public @ResponseBody Address testJson(@RequestBody Address address) {
    3. System.out.println(address);
    4. address.setAddressName("上海");
    5. return address;
    6. }

      5. json字符串和JavaBean对象互相转换的过程中,需要使用jacksonjar

    1. <
    2. dependency>
    3. <groupId>com.fasterxml.jackson.core</groupId>
    4. <artifactId>jackson-databind</artifactId>
    5. <version>2.9.0</version>
    6. </dependency>
    7. <dependency>
    8. <groupId>com.fasterxml.jackson.core</groupId>
    9. <artifactId>jackson-core</artifactId>
    10. <version>2.9.0</version>
    11. </dependency>
    12. <dependency>
    13. <groupId>com.fasterxml.jackson.core</groupId>
    14. <artifactId>jackson-annotations</artifactId>
    15. <version>2.9.0</version>
    16. </dependency>

    第二章:SpringMVC实现文件上传1. 文件上传的回顾  1. 导入文件上传的jar

    1. <dependency>
    2. <groupId>commons-fileupload</groupId>
    3. <artifactId>commons-fileupload</artifactId>
    4. <version>1.3.1</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>commons-io</groupId>
    8. <artifactId>commons-io</artifactId>
    9. <version>2.4</version>
    10. </dependency>

      2. 编写文件上传的JSP页面

    1. <h3>文件上传</h3>
    2. <form action="user/fileupload" method="post" enctype="multipart/form-data">
    3. 选择文件:<input type="file" name="upload"/><br/>
    4. <input type="submit" value="上传文件"/>
    5. </form>

      3. 编写文件上传的Controller控制器

    1. /**
    2. * 文件上传
    3. * @throws Exception
    4. */
    5. @RequestMapping(value="/fileupload")
    6. public String fileupload(HttpServletRequest request) throws Exception {
    7. // 先获取到要上传的文件目录
    8. String path = request.getSession().getServletContext().getRealPath("/uploads");
    9. // 创建File对象,一会向该路径下上传文件
    10. File file = new File(path);
    11. // 判断路径是否存在,如果不存在,创建该路径
    12. if(!file.exists()) {
    13. file.mkdirs();
    14. } /
    15. / 创建磁盘文件项工厂
    16. DiskFileItemFactory factory = new DiskFileItemFactory();
    17. ServletFileUpload fileUpload = new ServletFileUpload(factory);
    18. // 解析request对象
    19. List<FileItem> list = fileUpload.parseRequest(request);
    20. // 遍历
    21. for (FileItem fileItem : list) {
    22. // 判断文件项是普通字段,还是上传的文件
    23. if(fileItem.isFormField()) {
    24. }else {
    25. // 上传文件项
    26. 2. SpringMVC传统方式文件上传
    27. 1. SpringMVC框架提供了MultipartFile对象,该对象表示上传的文件,要求变量名称必须和表单file标签的
    28. name属性名称相同。
    29. 2. 代码如下
    30. 3. 配置文件解析器对象
    31. // 获取到上传文件的名称
    32. String filename = fileItem.getName();
    33. // 上传文件
    34. fileItem.write(new File(file, filename));
    35. // 删除临时文件
    36. fileItem.delete();
    37. }
    38. } return "success";
    39. }

    2.SpringMVC传统方式文件上传

  • 相关阅读:
    实验 | RT-Thread:L1
    K8S集群进行分布式负载测试
    里P8用这5大核心技术+10大高级框架+200个案例构建亿级流量并发
    避免遮掩继承而来的名称
    校园二手交易系统,二手交易网站,闲置物品交易系统毕业设计作品
    最近基于深度学习大火的AIGC将会抢原创工作者的饭碗?
    C++类与对象(一)
    洛谷刷题C语言:FILIP、修改数组、Fun、Šifra、Erinnerung
    汽车发电机三根线接线图图解,发电机调节器怎么接线
    1-(2-甲氧基乙基)-3-乙基咪唑三氟甲基磺酸盐{[C22O1IM][TfO]}离子液体
  • 原文地址:https://blog.csdn.net/weixin_42007892/article/details/127733738