Spring MVC之Controller

简介:

【注】默认按照约定寻找servlet.xml配置文件,如果需要指定或者需要增加多个servlet的配置该如何处理呢?方法如下:

 
  1. <servlet> 
  2.         <servlet-name>springmvc</servlet-name> 
  3.         <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
  4.         <init-param> 
  5.             <param-name>contextConfigLocation</param-name> 
  6.             <!-- <param-value>classpath:/spring-core.xml</param-value> --> 
  7.             <!-- <param-value>/WEB-INF/classes/servlet1.xml,/WEB-INF/classes/servlet2.xml</param-value> --> 
  8.             <!-- <param-value>/WEB-INF/classes/servlet*.xml</param-value> --> 
  9.             <param-value>/WEB-INF/classes/spring/*.xml</param-value> 
  10.         </init-param> 
  11.         <load-on-startup>1</load-on-startup> 
  12.     </servlet> 

1、直接转发的controller,不需要再实现无任何行为的controller类,登录常用.

 
  1. <?xml version="1.0" encoding="UTF-8"?> 
  2. <beans xmlns="http://www.springframework.org/schema/beans" 
  3.     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:lang="http://www.springframework.org/schema/lang" 
  4.     xsi:schemaLocation="   
  5. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
  6. http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd"> 
  7.  
  8.     <bean id="LoginSpringAction" class="com.alibaba.spring.LoginSpringAction"></bean> 
  9.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
  10.         <property name="mappings"> 
  11.             <props> 
  12.                 <prop key="start.test">LoginSpringAction</prop> 
  13.                 <prop key="login.test">LoginAction</prop> 
  14.             </props> 
  15.         </property> 
  16.     </bean> 
  17.     <bean id="LoginAction" class="org.springframework.web.servlet.mvc.ParameterizableViewController"> 
  18.         <property name="viewName" value="login"></property> 
  19.     </bean> 
  20.  
  21.     <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver"> 
  22.         <property name="viewClass" 
  23.             value="org.springframework.web.servlet.view.JstlView"></property> 
  24.         <property name="prefix" value="/WEB-INF/jsp/" /> 
  25.         <property name="suffix" value=".jsp" /> 
  26.     </bean> 
  27. </beans>  

查找过程:LoginAction->ParameterizableViewController->login->/WEB-INF/jsp/login.jsp

2、请求URL与要找的资源名称一致时,使用更简单的UrlFilenameViewController

 
  1. <bean id="LoginAction" class="org.springframework.web.servlet.mvc.UrlFilenameViewController"/> 

请求http://localhost:8080/login.test, 通过login.test->LoginAction ->UrlFilenameViewController->解析url,分析出login,再根据规则跳转到login.jsp中

3、封装表单参数的控制器:AbstractCommandController。【注】在spring3.0标注为过期,更建议使用注解。2.5版本未过期。

步骤1:表单提交:<form method="get" action="dispEmp.test"> 

步骤2:继承AbstractCommandController类

 
  1. public class EmployeeController extends AbstractCommandController { 
  2.  
  3.     @Override 
  4.     protected ModelAndView handle(HttpServletRequest request, HttpServletResponse response, 
  5.                                   Object command, BindException errors) throws Exception { 
  6.         Employee employee = (Employee)command; 
  7.         System.out.println(employee); 
  8.         return new ModeAndView("displayEmp"); 
  9.     } 

步骤3:配置CommandController类,【注】需要在里面配置属性:commandClass, 原因是根据反射的原理进行实例化类,再set其属性的

 
  1. <bean id="EmployeeAction" class="com.alibaba.spring.EmployeeController"> 
  2.         <property name="commandClass" value="com.alibaba.spring.Employee"></property> 
  3.     </bean> 
  4.      
  5.     <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping"> 
  6.         <property name="mappings"> 
  7.             <props>          
  8.                 <prop key="dispEmp.test">EmployeeAction</prop> 
  9.             </props> 
  10.         </property> 
  11.     </bean> 

 提交到dispEmp.test->EmployeeAction->EmployeeController->commandClass->Employee,执行其set方法将属性赋值。

问题1:Date类型的数据绑定,比如增加了hireDate且格式自定义怎么办呢?方法有2种,其一:自定义属性编辑器注入到AbstractCommandController的方法initBinder中

 
  1. @Override 
  2.     protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) 
  3.             throws Exception { 
  4.         binder.registerCustomEditor(Date.classnew MyPropertyEditor()); 
  5.     } 
 

其中:CustomDateEditor代码如下:

 
  1. public class MyPropertyEditor extends PropertyEditorSupport { 
  2.     String format = "yyyy-MM-dd"
  3.  
  4.     public void setFormat(String format) { 
  5.         this.format = format; 
  6.     } 
  7.  
  8.     @Override 
  9.     public void setAsText(String text) throws IllegalArgumentException { 
  10.         SimpleDateFormat dateFormat = new SimpleDateFormat(format); 
  11.         System.out.println("--->" + text); 
  12.         try { 
  13.             Date date = dateFormat.parse(text); 
  14.             this.setValue(date); 
  15.         } catch (ParseException e) { 
  16.             // TODO Auto-generated catch block  
  17.             e.printStackTrace(); 
  18.         } 
  19.     } 

 

其二:使用spring提供的半成品:CustomDateEditor

 
  1. @Override 
  2.    protected void initBinder(HttpServletRequest request, ServletRequestDataBinder binder) 
  3.            throws Exception { 
  4.        //binder.registerCustomEditor(Date.class, new MyPropertyEditor()); 
  5.        binder.registerCustomEditor(Date.classnew CustomDateEditor(new SimpleDateFormat( 
  6.                "yyyy-MM-dd"), true)); 
  7.    } 

 4、另外的获取表单参数的类:SimpleFormController,其onSubmit方法,只有post提交的时候才会执行

 



本文转自 zhouhaipeng 51CTO博客,原文链接:http://blog.51cto.com/tianya23/701747,如需转载请自行联系原作者


相关文章
|
5月前
|
前端开发 Java 微服务
《深入理解Spring》:Spring、Spring MVC与Spring Boot的深度解析
Spring Framework是Java生态的基石,提供IoC、AOP等核心功能;Spring MVC基于其构建,实现Web层MVC架构;Spring Boot则通过自动配置和内嵌服务器,极大简化了开发与部署。三者层层演进,Spring Boot并非替代,而是对前者的高效封装与增强,适用于微服务与快速开发,而深入理解Spring Framework有助于更好驾驭整体技术栈。
|
前端开发 Java 测试技术
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
本文介绍了 `@RequestParam` 注解的使用方法及其与 `@PathVariable` 的区别。`@RequestParam` 用于从请求中获取参数值(如 GET 请求的 URL 参数或 POST 请求的表单数据),而 `@PathVariable` 用于从 URL 模板中提取参数。文章通过示例代码详细说明了 `@RequestParam` 的常用属性,如 `required` 和 `defaultValue`,并展示了如何用实体类封装大量表单参数以简化处理流程。最后,结合 Postman 测试工具验证了接口的功能。
702 0
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestParam
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestBody
`@RequestBody` 是 Spring 框架中的注解,用于将 HTTP 请求体中的 JSON 数据自动映射为 Java 对象。例如,前端通过 POST 请求发送包含 `username` 和 `password` 的 JSON 数据,后端可通过带有 `@RequestBody` 注解的方法参数接收并处理。此注解适用于传递复杂对象的场景,简化了数据解析过程。与表单提交不同,它主要用于接收 JSON 格式的实体数据。
1334 0
|
前端开发 Java 微服务
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@PathVariable
`@PathVariable` 是 Spring Boot 中用于从 URL 中提取参数的注解,支持 RESTful 风格接口开发。例如,通过 `@GetMapping(&quot;/user/{id}&quot;)` 可以将 URL 中的 `{id}` 参数自动映射到方法参数中。若参数名不一致,可通过 `@PathVariable(&quot;自定义名&quot;)` 指定绑定关系。此外,还支持多参数占位符,如 `/user/{id}/{name}`,分别映射到方法中的多个参数。运行项目后,访问指定 URL 即可验证参数是否正确接收。
793 0
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RequestMapping
@RequestMapping 是 Spring MVC 中用于请求地址映射的注解,可作用于类或方法上。类级别定义控制器父路径,方法级别进一步指定处理逻辑。常用属性包括 value(请求地址)、method(请求类型,如 GET/POST 等,默认 GET)和 produces(返回内容类型)。例如:`@RequestMapping(value = &quot;/test&quot;, produces = &quot;application/json; charset=UTF-8&quot;)`。此外,针对不同请求方式还有简化注解,如 @GetMapping、@PostMapping 等。
708 0
|
JSON 前端开发 Java
微服务——SpringBoot使用归纳——Spring Boot中的MVC支持——@RestController
本文主要介绍 Spring Boot 中 MVC 开发常用的几个注解及其使用方式,包括 `@RestController`、`@RequestMapping`、`@PathVariable`、`@RequestParam` 和 `@RequestBody`。其中重点讲解了 `@RestController` 注解的构成与特点:它是 `@Controller` 和 `@ResponseBody` 的结合体,适用于返回 JSON 数据的场景。文章还指出,在需要模板渲染(如 Thymeleaf)而非前后端分离的情况下,应使用 `@Controller` 而非 `@RestController`
499 0
|
8月前
|
前端开发 Java API
Spring Cloud Gateway Server Web MVC报错“Unsupported transfer encoding: chunked”解决
本文解析了Spring Cloud Gateway中出现“Unsupported transfer encoding: chunked”错误的原因,指出该问题源于Feign依赖的HTTP客户端与服务端的`chunked`传输编码不兼容,并提供了具体的解决方案。通过规范Feign客户端接口的返回类型,可有效避免该异常,提升系统兼容性与稳定性。
600 0
|
8月前
|
SQL Java 数据库连接
Spring、SpringMVC 与 MyBatis 核心知识点解析
我梳理的这些内容,涵盖了 Spring、SpringMVC 和 MyBatis 的核心知识点。 在 Spring 中,我了解到 IOC 是控制反转,把对象控制权交容器;DI 是依赖注入,有三种实现方式。Bean 有五种作用域,单例 bean 的线程安全问题及自动装配方式也清晰了。事务基于数据库和 AOP,有失效场景和七种传播行为。AOP 是面向切面编程,动态代理有 JDK 和 CGLIB 两种。 SpringMVC 的 11 步执行流程我烂熟于心,还有那些常用注解的用法。 MyBatis 里,#{} 和 ${} 的区别很关键,获取主键、处理字段与属性名不匹配的方法也掌握了。多表查询、动态
243 0
|
8月前
|
JSON 前端开发 Java
第05课:Spring Boot中的MVC支持
第05课:Spring Boot中的MVC支持
354 0
|
SQL Java 数据库连接
对Spring、SpringMVC、MyBatis框架的介绍与解释
Spring 框架提供了全面的基础设施支持,Spring MVC 专注于 Web 层的开发,而 MyBatis 则是一个高效的持久层框架。这三个框架结合使用,可以显著提升 Java 企业级应用的开发效率和质量。通过理解它们的核心特性和使用方法,开发者可以更好地构建和维护复杂的应用程序。
818 29