欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > SpringMVC基础二(RestFul、接收数据、视图跳转)

SpringMVC基础二(RestFul、接收数据、视图跳转)

2025/4/15 13:45:39 来源:https://blog.csdn.net/await_9/article/details/147127380  浏览:    关键词:SpringMVC基础二(RestFul、接收数据、视图跳转)

@ReauestMapping

@ReauestMapping注解用于映射url到控制器类或一个特定的处理程序方法。可用于类或方法上,用于类上,表示类中的所有响应请求的方法都是以该地址作为父路径。

创建一个新项目:设置为web项目

编写web.xml(此配置也几乎不更改)

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"version="4.0"><servlet><servlet-name>springmvc</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:springmvc-servlet.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>springmvc</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>

编写配置文件springmvc-servlet.xml(几乎不会更改此内容)

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:context="http://www.springframework.org/schema/context"xmlns:mvc="http://www.springframework.org/schema/mvc"xsi:schemaLocation="http://www.springframework.org/schema/beanshttps://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttps://www.springframework.org/schema/mvc/spring-mvc.xsd"><context:component-scan base-package="com.serenity.controller"/><mvc:default-servlet-handler/><mvc:annotation-driven/><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver" id="internalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp/"/><property name="suffix" value=".jsp"/></bean>
</beans>

综上:项目结构:

编写一个Controller类实现Controller接口:

@Controller
@RequestMapping("/c1")
public class ControllerTest1 {@RequestMapping("/t1")public String test1(Model model){model.addAttribute("msg","ControllerTest1");return "test";}
}

编写test.jsp文件:

测试:

RestFul风格

概念

RestFul风格:就是一个资源定位及资源操作的风格,不是标准也不是协议,只是一种风格,基于这个风格设计的软件可以更简洁,更有层次,更易于实现缓存等机制。

功能

  • 资源:互联网所有的事物都可以被抽象为资源。
  • 资源操作:使用POSTDELETE、PUTGET,使用不同方法对资源进行操作。
  • 分别对应:添加、删除、修改、查询。

传统方式操作资源:通过不同的参数来实现不同的效果!方法单一,post和get

  • http:localhost:8080/queryItem.action?id=1        查询,GET
  • http:localhost:8080/saveItem.action        新增,POST
  • http:localhost:8080/updateItem.action        更新,POST
  • http:localhost:8080/deleteItem.action?id=1        删除,GET或POST

使用ReStFul操作资源:可以通过不同的请求方式来实现不同的效果!如下:请求地址一样,但是功能可以不同。

  • http:localhost:8080/Item/1        查询,GET
  • http:localhost:8080/Item        新增,POST
  • http:localhost:8080/Item        更新,PUT
  • http:localhost:8080/Item/1        删除,DELETE

传统方式测试: 

@Controller
public class RestFulController {//http://localhost:8080/add?a=1&b=2@RequestMapping("/add")public String test1(int a, int b, Model model){int res=a+b;model.addAttribute("msg","结果为"+res);return "test";}
}

使用ReStFul:

//http://localhost:8080/add/1/2,使用post时需要表单提交@PostMapping("/add/{a}/{b}")//@PathVariable注解让方法参数的值对应绑定到一个URL模板变量上。public String test2(@PathVariable int a, @PathVariable int b, Model model){int res=a+b;model.addAttribute("msg","结果1为"+res);return "test";}//http://localhost:8080/add/1/2@GetMapping("/add/{a}/{b}") public String test3(@PathVariable int a, @PathVariable int b, Model model){int res=a+b;model.addAttribute("msg","结果2为"+res);return "test";}

表单提交时用Post,导航栏直接输入数字是用Get,最后结果的url都是一样的,但是方法不同。

除了使用注解规定提交的方法,也可以属性设置,如下:

return返回地址时默认使用转发。

需要用重定向时:

return "redirect:/index.jsp"

使用RestFul好处:

  • 使路径变得更加简洁
  • 获得参数更加方便,框架会自动进行类型转换。
  • 通过路径变量的类型可以约束访问参数,如果类型不一样,则访问不到对应的请求方法.

结果跳转方式

ModelAndView对象,根据View的名称和视图解析器跳转到指定的页面

视图解析器前缀+viewName+视图解析器后缀

一般结果(跳转、重定向)都存放在WEB-INF/jsp下的文件,因为这里用户不可见,如果直接存放在web下用户可见。

ServletAPI,不需要视图解析器。

1、通过HttpServletResponse进行输出

resp.getWriter().println("Hello,SpringMVC");

2、通过HttpServletResponse实现重定向

resp.sendRedirect("/index.jsp");

3、通过HttpServletResponse实现转发

req.getRequestDispatcher("/WEB-INF/jsp/test.jsp").forward(req,resp);

SpringMVC实现转发和重定向

此处无需视图解析器

将视图解析器注释掉

转发:

@Controller
public class ModelTest1 {@RequestMapping("/m1/t1")public String test1(Model model){model.addAttribute("msg","ModelTest1");//转发,return "/WEB-INF/jsp/test.jsp";//return "forward:/WEB-INF/jsp/test.jsp";}
}

重定向:

@Controller
public class ModelTest1 {@RequestMapping("/m1/t1")public String test1(Model model){model.addAttribute("msg","ModelTest1");//重定向return "redirect:/index.jsp";}
}

相对于有视图解析器,无视图解析器时,需要写完整的重新定或转发地址。

数据处理

处理提交数据

1、提交的域名称和处理方法的参数名一致

提交数据:http://localhost:8080/user/t1?name=serenity

 实体类:

@Data
@AllArgsConstructor
@NoArgsConstructor
public class User {private int id;private String name;private int age;
}

2、提交的域名称和处理方法的参数名不一致

提交数据:http://localhost:8080/user/t1?username=serenity

 

3、提交的是一个对象,会匹配User对象中的字段名,名字一致就OK,否者匹配不到

要求提交的表单域和对象的属性名一致,参数使用对象即可。提交数据:http://localhost:8080/user?id=1&name=serenity&age=19

处理办法:

 @GetMapping("/t2")//localhost:8080/user/t1?name=xxxpublic String test2(User user, Model model){System.out.println("接收到前端的参数为"+user);//将返回的结果传递给前端,使用model传递model.addAttribute("msg",user);//跳转视图return "test";}

数据显示到前端

法一:通过ModelAndView:可以存储数据的同时,可以进行设置返回的逻辑视图,进行控制展示层的跳转。

法二:通过Model:存储数据

法三:通过ModelMap:继承了LinkMap,除了实现了自身的一些方法,同样的继承了LinkedMap的方法和特性。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词