專業(yè)邯鄲網站建設百度識圖軟件
這篇文章包含spring mvc的默認數據類型綁定和簡單數據類型綁定。內容來自實驗。
準備:
(1)在IDEA環(huán)境中從archetye創(chuàng)建webapp類型的maven項目exp6。
(2)在src\main目錄下創(chuàng)建并標注java源代碼文件夾和resources資源文件夾。
(3)在pom.xml文件中,添加Spring MVC的相關依賴。
<!-- https://mvnrepository.com/artifact/org.springframework/spring-webmvc --><dependency><groupId>org.springframework</groupId><artifactId>spring-webmvc</artifactId><version>5.2.5.RELEASE</version></dependency><!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0</version><scope>provided</scope></dependency><!-- https://mvnrepository.com/artifact/org.springframework/spring-context --><dependency><groupId>org.springframework</groupId><artifactId>spring-context</artifactId><version>5.2.8.RELEASE</version></dependency>
?(4)在resources文件夾下創(chuàng)建配置文件spring-mvc.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 配置創(chuàng)建 springMVC 容器要掃描的包 --><context:component-scan base-package="com.itheima.controller"></context:component-scan><!-- 配置視圖解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean>
</beans>
?(5)配置web.xml文件。
<?xml version="1.0" encoding="UTF-8"?>
<web-app><display-name>Archetype Created Web Application</display-name><servlet><servlet-name>DispatcherServlet</servlet-name><servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class><!-- 配置初始化參數,讀取Spring MVC的配置文件 --><init-param><param-name>contextConfigLocation</param-name><param-value>classpath:spring-mvc.xml</param-value></init-param><load-on-startup>1</load-on-startup></servlet><servlet-mapping><servlet-name>DispatcherServlet</servlet-name><url-pattern>/</url-pattern></servlet-mapping>
</web-app>
?(6)配置Maven啟動項。在pom.xml文件中引入tomcat插件:
<plugin><groupId>org.apache.tomcat.maven</groupId><artifactId>tomcat7-maven-plugin</artifactId><version>2.2</version><configuration><port>8080</port><path>/exp6</path></configuration></plugin>
添加Maven啟動項,使用命令tomcat7:run啟動應用程序。
項目目錄結構如下:
?
?
數據綁定:
1.默認數據類型綁定
在src\main\java文件夾下創(chuàng)建com.itheima.controller的類包,在類包中創(chuàng)建UserController類,在UserController類中定義方法getUserId( ),用于獲取客戶端請求中userid參數的值。
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;import javax.servlet.http.HttpServletRequest;@Controller
public class UserController {@RequestMapping("/getUserId")public void getUserId(HttpServletRequest request){String userid= request.getParameter("userid");System.out.println("userid="+userid);}
}
啟動項目后,訪問地址http://localhost:8080/exp6/getUserId?userid=2,控制臺打印userid信息如下:
2.簡單數據類型綁定
(1)在UserController類中新增getUserNameAndId( )方法,用來接收客戶端請求中的用戶名和id參數。
@RequestMapping("/getUserNameAndId")public void getUserNameAndId(String username,Integer id) {System.out.println("username="+username+", id="+id);}
?訪問地址http://localhost:8080/exp6/getUserNameAndId?username=Spring&id=1,運行結果如下:
(2)@RequestParam注解來定義參數的別名,完成請求參數名稱和處理器的形參名稱不一致時的數據綁定。在UserController類中新增getUserName ( )方法,給username形參定義了別名name,同時設定了請求的name參數不是必須的,訪問沒攜帶name參數時會將defaultValue屬性設定的值賦給形參username。
@RequestMapping("/getUserName")public void getUserName(@RequestParam(value="name", required = false,defaultValue = "itheima") String username){System.out.println("username="+username);}
?訪問http://localhost:8080/exp6/getUserName?name=Spring,運行結果如下:
?(3)使用@PathVariable注解將URL中占位符參數綁定到處理器的形參中。在UserController類中新增getPathVariable( )方法, value屬性將占位符參數“name”和處理方法的參數username進行綁定。
@RequestMapping("/user/{name}")public void getPathVariable(@PathVariable(value = "name") String username){System.out.println("username="+username);}
?
(4)POJO綁定:POJO類型的數據綁定就是將所有關聯的請求參數封裝在一個POJO中,然后在方法中直接使用該POJO作為形參來完成數據綁定。
在src\main\java目錄下,創(chuàng)建一個com.itheima.pojo包,在該包下創(chuàng)建一個User類封裝用戶信息。
public class User {private String username; //用戶名private String password; //用戶密碼public String getUsername() {return username;}public void setUsername(String username) {this.username = username;}public String getPassword() {return password;}public void setPassword(String password) {this.password = password;}
}
?在UserController.java類中,定義registerUser( )方法用于接收用戶注冊信息。
// 接收表單用戶信息@RequestMapping("/registerUser")public void registerUser(User user) {String username = user.getUsername();String password = user.getPassword();System.out.println("username="+username+",password="+password);}
在src\main\webapp目錄下,創(chuàng)建register.jsp文件,編寫用戶注冊表單。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<html>
<head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"><title>注冊</title>
</head>
<body>
<form action="${pageContext.request.contextPath}/registerUser" method="post">用戶名:<input type="text" name="username" /><br />密 碼:<input type="password" name="password" /><br /><input type="submit" value="注冊"/>
</form>
</body>
</html>
啟動后訪問地址http://localhost:8080/exp6/register.jsp,結果如下:
分別填寫注冊的用戶名和密碼,點擊“注冊”按鈕完成數據的提交,控制臺打印信息:
注:輸入的用戶名為中文時,控制臺打印信息可能會出現亂碼,可以使用Spring提供的編碼過濾器來統(tǒng)一編碼,只需要在web.xml中添加如下代碼:
<filter><filter-name>CharacterEncodingFilter</filter-name><filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class><init-param><param-name>encoding</param-name><param-value>UTF-8</param-value></init-param></filter><filter-mapping><filter-name>CharacterEncodingFilter</filter-name><url-pattern>/*</url-pattern></filter-mapping>
(5)自定義類型轉換器:Spring MVC默認提供了一些常用的類型轉換器,然而默認類型轉換器并不能將提交的參數轉換為所有的類型。此時需要開發(fā)者自定義類型轉換器,來將參數轉換為程序所需要的類型。
①下面演示自定義類型轉換器轉換特殊數據類型并完成數據綁定,實現Date類型的數據綁定。
在項目src\main\java目錄下,創(chuàng)建一個com.itheima.convert包,在該包下創(chuàng)建日期轉換類DateConverter,并在DateConverter類中定義convert()方法, 實現String類型轉到Date類型的轉換。
import org.springframework.core.convert.converter.Converter;import java.text.SimpleDateFormat;
import java.util.Date;public class DateConverter implements Converter<String, Date> {private String datePattern = "yyyy-MM-dd";//定義日期格式@Overridepublic Date convert(String source) {SimpleDateFormat sdf = new SimpleDateFormat(datePattern);try {return sdf.parse(source);} catch (Exception e) {throw new IllegalArgumentException("無效的日期格式,請使用這種格式:"+datePattern);}}
}
還需要在配置文件spring-mvc.xml中配置類型轉換器。
<!-- 配置類型轉換器工廠 --><bean id="converterService" class="org.springframework.context.support.ConversionServiceFactoryBean"><!-- 給工廠注入一個新的類型轉換器,配置自定義類型轉換器 --><property name="converters"><array><bean class="com.itheima.convert.DateConverter"/></array></property></bean><mvc:annotation-driven conversion-service="converterService"/>
在UserController.java類中定義方法getBirthday(),用于綁定客戶端請求中的日期數據。
/*** 使用自定義類型數據綁定日期數據*/@RequestMapping("/getBirthday")public void getBirthday(Date birthday) {System.out.println("birthday="+birthday);}
啟動后訪問地址http://localhost:8080/exp6/getBirthday?birthday=2020-11-11,控制臺打印信息:
②上述方法中日期類型的格式轉換是基于XML配置自定義轉換器實現的。除了XML方式之外,還可以通過@DateTimeFormat注解來簡化日期類型的格式轉換,無需自定義轉換器,也無需在配置文件中定義轉換器工廠或格式化工廠。
將上述在spring-mvc.xml中配置的轉換器工廠和自定義類型轉換器都刪除,由于注解方式的類型轉換依賴注解驅動的支持,配置文件中必須顯式定義<mvc:annotation-driven>元素,此時spring-mvc.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/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttps://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd"><!-- 配置創(chuàng)建 springMVC 容器要掃描的包 --><context:component-scan base-package="com.itheima.controller"></context:component-scan><!-- 配置視圖解析器 --><bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/pages/"/><property name="suffix" value=".jsp"/></bean><!-- 配置注解驅動 --><mvc:annotation-driven />
</beans>
修改UserController.java類中getBirthday()方法,修改后的具體代碼如下。
/*** 使用@DateTimeFormat注解綁定日期數據*/@RequestMapping("/getBirthday")public void getBirthday(@DateTimeFormat(pattern = "yyyy-MM-dd")Date birthday) {System.out.println("birthday="+birthday);}
啟動項目,訪問http://localhost:8080/exp6/getBirthday?birthday=2020-11-11,控制臺打印信息:
?
復雜數據類型綁定下次再寫。
加油加油^_^