SpringMVC 공통 주석
1, @Controller
@Controller는 클래스를 표시하는 데 사용되며, 표시된 클래스는 SpringMVC Controller 개체입니다. 디스패치 프로세서는 주석이 달린 클래스의 메서드를 스캔하고 해당 메서드에 @RequestMapping 주석이 붙어 있는지 감지합니다. @Controller는 컨트롤러 클래스를 정의할 뿐이며 @RequestMapping이라는 주석이 달린 메서드는 실제로 요청을 처리하는 프로세서입니다.
클래스의 @Controller 표시는 현재 Spring이 이를 인식하지 못하기 때문에 SpringMVC의 컨트롤러 클래스라고 실제로 말할 수 없습니다. 이때 관리를 위해 이 컨트롤러 클래스를 Spring에 넘겨주어야 합니다. 관리하는 방법에는 두 가지가 있습니다.
<!--方式一--> <bean class="com.cqvie.handler.HelloWorld"/> <!--方式二--> < context:component-scan base-package = "com.cqvie" /> <!-- 路径写到controller的上一层 -->
또한 Controller는 HttpServletRequest 및 HttpServletResponse와 같은 HttpServlet 개체에 직접 의존하지 않으며 Controller의 메서드 매개 변수를 통해 유연하게 얻을 수 있습니다. 컨트롤러에 대한 사전 인상을 얻기 위해 간단한 컨트롤러를 정의해 보겠습니다.
package com.cqvie.handler; import org.springframework.stereotype.Controller; @Controller public class HelloWorld { @RequestMapping("/helloworld") public String sayHello() { System.out.println("Hello World!"); return "success"; } }
2, @RequestMapping
RequestMapping은 요청 주소 매핑을 처리하는 데 사용되는 주석으로, 클래스나 메서드에서 사용할 수 있습니다. 클래스에서 사용된다는 것은 요청에 응답하는 클래스의 모든 메서드가 이 주소를 상위 경로로 사용한다는 의미입니다.
반환 값은 뷰 파서를 통해 실제 물리적 뷰로 파싱됩니다. InternalResourceViewResolver 뷰 파서의 경우 다음과 같은 파싱이 수행됩니다.
실제 물리적 뷰는 prefix + returnVal + suffix를 통해 얻어집니다. 전달 작업이 수행됩니다.
1), 값
값: 요청의 실제 주소 지정
2) 방법: 요청의 메서드 유형 지정 , GET, POST, PUT, DELETE 등은 다음 예의 @PathVariable에서 나중에 설명됩니다.
<!-- 配置视图解析器:如何把 handler 方法返回值解析为实际的物理视图 --> <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/views/"></property> <property name="suffix" value=".jsp"></property> </bean>
3), Consumer
consumes: 애플리케이션과 같은 요청 처리를 위한 제출 콘텐츠 유형(Content-Type)을 지정합니다. /json, text/html;
4),
● *: 파일 이름의 모든 문자와 일치
● ** : 다층 경로 일치
/** * Rest 风格的 URL(以 CRUD 为例): * 新增:/order POST * 修改:/order/1 PUT * 获取:/order/1 GET * 删除:/order/1 DELETE * @param id * @return */ @RequestMapping(value = "/testRestPut/{id}", method = RequestMethod.PUT) public String testRestPut(@PathVariable int id) { System.out.println("testRestPut:" + id); return SUCCESS; } @RequestMapping(value = "/testRestDelete/{id}", method = RequestMethod.DELETE) public String testRestDelete(@PathVariable int id) { System.out.println("testRestDelete:" + id); return SUCCESS; } @RequestMapping(value = "/testRestPost/{id}", method = RequestMethod.POST) public String testRestPost(@PathVariable int id) { System.out.println("testRestPost:" + id); return SUCCESS; } @RequestMapping("/testRestGet") public String testRestGet() { System.out.println("testRestGet"); return SUCCESS; }3, @Resource 및 @Autowired @Resource 및 @Autowired는 모두 Bean 주입에 사용됩니다. 실제로 @Resource는 Spring의 주석이 아니며 해당 패키지는 javax.annotation.Resource이므로 가져와야 합니다. 그러나 Spring은 이 주석의 주입을 지원합니다.
1) 공통점 둘 다 필드와 세터 메소드에 작성할 수 있습니다. 둘 다 필드에 기록되면 setter 메소드를 작성할 필요가 없습니다.
2) 차이점
(1) @Autowired
@Autowired는 Spring에 대한 주석을 제공하며 byType에 따라 org.springframework.beans.factory.annotation.Autowired 패키지를 가져와야 합니다.
@RequestMapping("/testPojo") public String testPojo(User user) { System.out.println("testPojo:" + user); return "success"; } @RequestMapping("/testPojo") Map用法: @RequestMapping("/testMap") public String testMap(Map<String, Object> map) { map.put("names", Arrays.asList("Tomcat", "Eclipse", "JavaEE")); return "success"; } @RequestMapping("/testPojo") ModelAndView用法: @RequestMapping("/testModelAndView") public ModelAndView testModelAndView() { String viewName = SUCCESS; ModelAndView modelAndView = new ModelAndView(viewName); modelAndView.addObject("time", new Date()); return modelAndView; }@Autowired 주석은 유형(byType)에 따라 종속 개체를 조합합니다. 기본적으로 종속 개체가 있어야 합니다. null 값이 허용되는 경우 해당 필수 속성을 false로 설정할 수 있습니다. 이름(byName)으로 조합하려면 @Qualifier 주석과 함께 사용할 수 있습니다.
public class HelloWorld{ // 下面两种@Autowired只要使用一种即可 @Autowired private UserDao userDao; // 用于字段上 @Autowired public void setUserDao(UserDao userDao) { // 用于属性的方法上 this.userDao = userDao; } }(2) @Resource@Resource는 기본적으로 J2EE에서 제공하는 ByName에 의해 자동 주입되며 javax.annotation.Resource 패키지를 가져와야 합니다. @Resource에는 name과 type이라는 두 가지 중요한 속성이 있으며 Spring은 @Resource 주석의 name 속성을 bean의 이름으로 확인하고 type 속성은 bean의 유형으로 확인합니다. 따라서 name 속성을 사용하면 byName 자동 주입 전략이 사용되고, type 속성을 사용하면 byType 자동 주입 전략이 사용된다. name이나 type 속성이 모두 지정되지 않으면 byName 자동 주입 전략이 리플렉션 메커니즘을 통해 사용됩니다.
public class HelloWorld{ @Autowired @Qualifier("userDao") private UserDao userDao; }참고: @Resource를 setter 메서드에 배치하는 것이 가장 좋습니다. 이는 객체 지향 사고에 더 부합하고 속성을 직접 조작하는 대신 set 및 get을 통해 속성을 조작하기 때문입니다. 4.@PathVariable 은 요청 URL의 템플릿 변수를 함수 처리 방법의 매개변수에 매핑하는 데 사용됩니다. 즉, uri 템플릿의 변수를 매개변수로 가져옵니다. 예:
public class HelloWorld{ // 下面两种@Resource只要使用一种即可 @Resource(name="userDao") private UserDao userDao; // 用于字段上 @Resource(name="userDao") public void setUserDao(UserDao userDao) { // 用于属性的setter方法上 this.userDao = userDao; } }5, @CookieValue Function: 쿠키에서 값을 가져오는 데 사용;
Parameters: value: 매개변수 이름 필수: 필수 여부 defaultValue: 기본값사용 사례:
/** * 获取 Session * JSESSIONID=411A032E02A2594698F6E3F4458B9CE4 */ @RequestMapping("/testCookieValue") public String testCookieValue(@CookieValue("JSESSIONID") String sessionId) { System.out.println("JSESSIONID = " + sessionId); return "success"; }
6、@RequestParam
@RequestParam用于将请求参数区数据映射到功能处理方法的参数上,用例:
/** * @RequestParam("id") 带参映射 * @param id * @return */ @RequestMapping("/testRequestParam") public String testRequestParam(@RequestParam("id") int id) { System.out.println("testRequestParam " + id); return "success"; }
7、@SessionAttributes
@SessionAttributes即将值放到session作用域中,写在class上面。
@SessionAttributes 除了可以通过属性名指定需要放到会话中的属性外(value 属性值),
还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值),用例:
package com.cqvie.yjq; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.SessionAttributes; import com.cqvie.model.User; @SessionAttributes(value = {"user"}, types = {String.class}) @RequestMapping("/springmvc") @Controller public class SessionAttributesTest { /** * @SessionAttributes * 除了可以通过属性名指定需要放到会话中的属性外(value 属性值), * 还可以通过模型属性的对象类型指定哪些模型属性需要放到会话中(types 属性值)。 * 注意: 该注解只能放在类的上面,不能放在方法上面 * * @return */ @RequestMapping("/testSessionAttributes") public String testSessionAttributes(Map<String, Object> map) { User user = new User(1, "刘邦", "qwe", "123", "辽宁"); map.put("user", user); map.put("school", "重庆"); return "success"; } }
8、@ModelAttribute
代表的是:该Controller的所有方法在调用前,先执行此@ModelAttribute方法,可用于注解和方法参数中,可以把这个@ModelAttribute特性,应用在BaseController当中,所有的Controller继承BaseController,即可实现在调用Controller时,先执行@ModelAttribute方法。
package com.cqvie.yjq; import java.util.Map; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import com.cqvie.model.User; @Controller @RequestMapping("/springmvc") public class ModelAttributeTest { private static final String SUCCESS = "success"; /** * 1.有 @ModelAttribute 标记的方法,会在每个目标方法执行之前被 SpringMVC 调用 * 2.@ModelAttribute注解也可以修饰目标方法POJO类形的入参,其value的属性值有如下作用: * 1)SpringMVC会使用value属性值在implicitModel中查找对应的对象,若存在则直接传入到目标方法的入参中 * 2)SpringMVC会以value为key,POJO类型的对象为value,存入的request中 * * @param id * @param map */ @ModelAttribute public void getUser(@RequestParam(value = "id", required = false) int id, Map<String, Object> map) { //模拟数据库中获取对象 User user = new User(1, "刘邦", "123", "023", "重庆"); System.out.println("从数据库中获取一个对象:" + user); map.put("abc", user); } /** * 运行流程: * 1.执行@ModelAttribute注解修饰的方法,从数据库中取出对象,把对象放入Map中,键为:user; * 2.SpringMVC从Map中取出User对象,并把表单的请求参数赋值给该User对象的对应属性; * 3.SpringMVC把上述对象传入目标方法的参数。 * * 注意:在@ModelAttribute修饰的方法中,放入到Map时的键需要和目标方法入参类型的第一个字母小写的字符串一致 * * @param user * @return */ @RequestMapping("/testModelAttribute") public String testModelAttribute(@ModelAttribute("abc") User user) { System.out.println("修改:" + user); return SUCCESS; } }
9、@ResponseBody
作用: 该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
本文来自php中文网,java教程栏目,欢迎学习!
위 내용은 springmvc에서 일반적으로 사용되는 주석은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!