SpringMVC的常見(jiàn)數(shù)據(jù)綁定實(shí)戰(zhàn)舉例(以登錄為例演練)
??SpringMVC的簡(jiǎn)單數(shù)據(jù)綁定
下面將會(huì)以登錄為例演練并介紹各種類型的數(shù)據(jù)綁定,以Signon類為例:
??創(chuàng)建Signon類
定義一個(gè)名為 Signon 的Java類,用于存儲(chǔ)用戶名和密碼,并提供了這兩個(gè)變量的公共getter和setter方法。具體代碼如下:
public class Signon {
String uname1;
String pwd;
public String getUname1() {
return uname1;
}
public void setUname1(String uname1) {
this.uname1 = uname1;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
}??創(chuàng)建SignonDao接口
定義一個(gè)名為 SignonDao 的Java接口,其中包含一個(gè)公共方法 findSignonByUnameAndPwd。具體代碼如下:
public interface SignonDao {
public int findSignonByUnameAndPwd(String uname,String pwd);
}??創(chuàng)建SignonDaoImp類
定義一個(gè)名為 SignonDaoImp 的Java類,它實(shí)現(xiàn)了 SignonDao 接口,并使用 @Repository 注解標(biāo)記為Spring框架中的持久層組件。這個(gè)類提供了 findSignonByUnameAndPwd 方法的具體實(shí)現(xiàn),該方法接收用戶名(uname)和密碼(pwd)作為參數(shù),并檢查它們是否與預(yù)設(shè)的值("tom"和"12345")相匹配。如果匹配,方法返回1,表示用戶驗(yàn)證成功;如果不匹配,方法返回0,表示用戶驗(yàn)證失敗。具體代碼如下:
public class SignonDaoImp implements SignonDao {
@Override
public int findSignonByUnameAndPwd(String uname, String pwd) {
if ("tom".equals(uname) && "12345".equals(pwd))
return 1;
return 0;
}
}??創(chuàng)建SignonService接口
定義一個(gè)名為 SignonService 的Java接口,其中包含一個(gè)公共方法 checkByUnameAndPwd。具體代碼如下:
public interface SignonService {
public boolean checkByUnameAndPwd(String uname,String pwd);
}
??創(chuàng)建SignonServiceImp類
定義一個(gè)名為 SignonServiceImp 的Java類,它實(shí)現(xiàn)了 SignonService 接口,并使用 @Service 注解標(biāo)記為Spring框架中的服務(wù)層組件。類中注入了一個(gè) SignonDao 類型的成員變量 sd,用于訪問(wèn)數(shù)據(jù)訪問(wèn)層。SignonServiceImp 類實(shí)現(xiàn)了 checkByUnameAndPwd 方法,該方法接收用戶名和密碼作為參數(shù),并調(diào)用 sd 的 findSignonByUnameAndPwd 方法來(lái)檢查數(shù)據(jù)庫(kù)中是否存在匹配的用戶記錄。如果 findSignonByUnameAndPwd 方法返回1,表示驗(yàn)證成功,checkByUnameAndPwd 方法返回 true;否則返回 false,表示驗(yàn)證失敗。具體代碼如下:
@Service
public class SignonServiceImp implements SignonService{
@Autowired
SignonDao sd;
@Override
public boolean checkByUnameAndPwd(String uname, String pwd) {
if(sd.findSignonByUnameAndPwd(uname,pwd)==1)
return true;
return false;
}
}??創(chuàng)建web.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/c"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/"/>
<property name="suffix" value=".jsp"/>
</bean>
<bean name="/firsttest" class="FirstController"/>
<context:component-scan base-package="com.hkd"/>
</beans>以上內(nèi)容為下面統(tǒng)一會(huì)用到的,下面內(nèi)容主要為login登錄頁(yè)面和測(cè)試類。
??默認(rèn)類型數(shù)據(jù)綁定
?創(chuàng)建控制器類LoginController
使用Spring框架的Java Web應(yīng)用程序中的控制器類`LoginController`,它負(fù)責(zé)處理用戶登錄請(qǐng)求。類中注入了一個(gè)名為`SignonService`的自動(dòng)裝配服務(wù),該服務(wù)包含驗(yàn)證用戶憑據(jù)的方法。`LoginController`類中的`login1`方法通過(guò)`@RequestMapping("/login1")`注解映射到`/login1`的HTTP請(qǐng)求。該方法接收一個(gè)`HttpServletRequest`對(duì)象和一個(gè)`Model`對(duì)象作為參數(shù),從請(qǐng)求中獲取用戶名和密碼,然后調(diào)用`SignonService`的`checkByUnameAndPwd`方法來(lái)驗(yàn)證這些憑據(jù)。如果驗(yàn)證成功,方法會(huì)將用戶名和密碼添加到模型中,并返回視圖名稱`"welcome"`;如果驗(yàn)證失敗,則返回視圖名稱`"error"`。
@Controller
public class LoginController {
@Autowired
SignonService ss;
@RequestMapping("/login1")
public String login1(HttpServletRequest request, Model model){
String uname=request.getParameter("uname");
String pwd=request.getParameter("pwd");
boolean flag=ss.checkByUnameAndPwd(uname,pwd);
if(flag){
model.addAttribute("uname",uname);
model.addAttribute("pwd",pwd);
return "welcome";
}else{
return "error";
}
}
}?創(chuàng)建登錄頁(yè)面login1.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="post" action="login1">
用戶名:<input type="text" name="uname">
密碼:<input type="text" name="pwd">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>輸入正確的用戶名和密碼后跳轉(zhuǎn)到的界面如下:

??簡(jiǎn)單數(shù)據(jù)類型綁定
?創(chuàng)建控制器類LoginController
在控制器LoginController類中創(chuàng)建login2方法:
@RequestMapping("/login2")
public String login2(String uname,String pwd,Model model){
boolean flag=ss.checkByUnameAndPwd(uname, pwd);
if(flag){
model.addAttribute("uname",uname);
model.addAttribute("pwd",pwd);
return "welcome";
}else{
return "error";
}
}?創(chuàng)建登錄頁(yè)面login2.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form method="post" action="login2">
用戶名:<input type="text" name="uname">
密碼:<input type="text" name="pwd">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>登錄成功之后頁(yè)面和上面一樣。
??POJO綁定
?創(chuàng)建控制器類LoginController
定義`LoginController`類中的`login3`方法,它通過(guò)`@RequestMapping("/login3")`注解映射到`/login3`的HTTP請(qǐng)求。該方法接收一個(gè)`Signon`對(duì)象和一個(gè)`Model`對(duì)象作為參數(shù),使用`Signon`對(duì)象中的用戶名和密碼調(diào)用`ss.checkByUnameAndPwd`方法進(jìn)行驗(yàn)證。如果驗(yàn)證成功,將用戶名和密碼添加到模型中并返回`"welcome"`視圖;如果驗(yàn)證失敗,則返回`"error"`視圖。
@RequestMapping("/login3")
public String login3(Signon signon,Model model){
boolean flag=ss.checkByUnameAndPwd(signon.getUname(),signon.getPwd());
if(flag){
model.addAttribute("uname",signon.getUname());
model.addAttribute("pwd",signon.getPwd());
return "welcome";
}else{
return "error";
}?創(chuàng)建登錄頁(yè)面login3.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login3" method="post">
用戶名:<input type="text" name="uname">
密碼:<input type="password" name="pwd">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>
??自定義類型轉(zhuǎn)換器
第一種以Date為例:
?創(chuàng)建DateConvert類
定義一個(gè)名為`DateConvert`的類,它實(shí)現(xiàn)了`Converter<String, Date>`接口,用于將字符串轉(zhuǎn)換為`Date`對(duì)象。在`convert`方法中,它使用`SimpleDateFormat`類以"yyyy-MM-dd"格式解析傳入的字符串參數(shù)`source`。如果解析成功,返回對(duì)應(yīng)的`Date`對(duì)象;如果解析失敗,拋出`ParseException`,并由`catch`塊捕獲后拋出一個(gè)`RuntimeException`。
public class DateConvert implements Converter<String,Date>{
public Date convert(String source){
SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-dd");
Date date=null;
try {
date=sdf.parse(source);
} catch (ParseException e) {
throw new RuntimeException(e);
}
return date;
}
}?修改spring-mvc.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:aop="http://www.springframework.org/schema/aop"
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/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd
http://www.springframework.org/schema/context
https://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd">
<!-- 配置Spring MVC要掃描的包-->
<context:component-scan base-package="com.hkd"/>
<!-- 配置視圖解析器-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 前綴 -->
<property name="prefix" value="/WEB-INF/"/>
<!-- 后綴 -->
<property name="suffix" value=".jsp"/>
</bean>
<bean id="DateConvert" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.hkd.DateConvert"/>
</set>
</property>
</bean>
<!-- <mvc:annotation-driven conversion-service="DateConvert"/>-->
<mvc:annotation-driven conversion-service="DateConvert"/>
</beans>?創(chuàng)建控制器類LoginController
@RequestMapping("/login4")
public String login4(int age, @DateTimeFormat(pattern = "yyyy-MM-dd") Date birthday){
System.out.println(birthday);
System.out.println(age);
return "welcome";
}?創(chuàng)建登錄頁(yè)面login4.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login4" method="post">
年齡:<input type="text" name="age">
生日:<input type="text" name="birthday">
<input type="submit" value="提交"> <input type="reset" value="重置">
</form>
</body>
</html>第二種以Signon為例:
??創(chuàng)建SignonConvert類
定義一個(gè)名為`SignonConvert`的類,它實(shí)現(xiàn)了`Converter<String, Signon>`接口,用于將一個(gè)包含用戶名和密碼(以逗號(hào)分隔)的字符串轉(zhuǎn)換為一個(gè)`Signon`對(duì)象。在`convert`方法中,使用`StringTokenizer`對(duì)輸入字符串進(jìn)行分割,提取出用戶名和密碼,然后創(chuàng)建一個(gè)新的`Signon`實(shí)例并設(shè)置這些屬性,最后返回這個(gè)`Signon`對(duì)象。
public class SignonConvert implements Converter<String,Signon>{
public Signon convert(String source){
StringTokenizer st=new StringTokenizer(source,",");
String uname=st.nextToken();
String pwd=st.nextToken();
Signon signon=new Signon();
signon.setUname(uname);
signon.setPwd(pwd);
return signon;
}
}??修改spring-mvc.xml類
在文件spring-mvc.xml中添加如下代碼:
<bean id="SignonConvert" class="org.springframework.context.support.ConversionServiceFactoryBean">
<property name="converters">
<set>
<bean class="com.hkd.SignonConvert"/>
</set>
</property>
</bean>
<mvc:annotation-driven conversion-service="SignonConvert"/>??創(chuàng)建控制器類LoginController
@RequestMapping("/login5")
public String login6(Signon signon){
System.out.println(signon.getUname()+","+signon.getPwd());
return "welcome";
}??創(chuàng)建登錄頁(yè)面login5.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login5" method="post">
用戶信息(用戶名,密碼之間以逗號(hào)隔開(kāi)):<input type="text" name="signon">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>??數(shù)組類型
?創(chuàng)建控制器類LoginController
定義一個(gè)名為`login6`的方法,它通過(guò)`@RequestMapping("/login6")`注解映射到`/login6`的HTTP請(qǐng)求。該方法接收一個(gè)名為`uname`的字符串?dāng)?shù)組作為參數(shù),并遍歷數(shù)組中的每個(gè)字符串,將它們打印到控制臺(tái)。無(wú)論數(shù)組內(nèi)容如何,最終方法都會(huì)返回`"welcome"`視圖。
@RequestMapping("/login6")
public String login6(String uname[]){
for(String str:uname){
System.out.println(str);
}
return "welcome";
}
}?創(chuàng)建登錄頁(yè)面login6.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login6" method="post">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>??集合類型
?創(chuàng)建控制器類LoginController
定義一個(gè)名為`login7`的Spring MVC控制器方法,它通過(guò)`@RequestMapping("/login7")`注解映射到`/login7`的HTTP請(qǐng)求。該方法接收一個(gè)名為`uname`的`List<String>`類型的請(qǐng)求參數(shù),表示用戶名列表,并將這些用戶名打印到控制臺(tái)。隨后,它將用戶名列表添加到模型中,以便在視圖中使用,并最終返回名為`"welcome8"`的視圖。
@RequestMapping("/login7")
public String login7(@RequestParam("uname")List<String> uname,Model model){
for(String str:uname){
System.out.println(str);
}
model.addAttribute("uname",uname);
return "welcome8";
}?創(chuàng)建登錄頁(yè)面login6.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login7" method="post">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>?創(chuàng)建welcome8.jsp頁(yè)面
<c:forEach item="${uname}" var="data">:這個(gè)標(biāo)簽開(kāi)始一個(gè)循環(huán),它告訴JSP頁(yè)面遍歷uname集合中的每個(gè)元素。item屬性指定了要遍歷的集合,var屬性定義了在循環(huán)體內(nèi)代表當(dāng)前元素的變量名(在這里是data)。
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<c:forEach items="${uname}" var="data">
${data}
</c:forEach>
</body>
</html>在框內(nèi)輸入以下內(nèi)容:

跳轉(zhuǎn)后的頁(yè)面為:

??將集合類型數(shù)據(jù)作為POJO類的數(shù)據(jù)成員
?創(chuàng)建User類
public class User {
List<String> uname;
public List<String> getUname() {
return uname;
}
public void setUname(List<String> uname) {
this.uname = uname;
}
}?創(chuàng)建控制器類LoginController
定義一個(gè)名為`login8`的Spring MVC控制器方法,它通過(guò)`@RequestMapping("/login8")`注解映射到`/login8`的HTTP請(qǐng)求。該方法接收一個(gè)`User`類型的參數(shù)`user`,假設(shè)`User`類有一個(gè)`getUname`方法返回一個(gè)`String`集合。方法中遍歷這個(gè)集合,將每個(gè)用戶名打印到控制臺(tái),然后返回`"welcome"`視圖。
@RequestMapping("/login8")
public String login8(User user){
for(String str: user.getUname()){
System.out.println(str);
}
return "welcome";
}?創(chuàng)建登錄頁(yè)面login8.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login8" method="post">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
用戶1<input type="text" name="uname">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>以上就是本期介紹的全部?jī)?nèi)容了,主要是關(guān)于數(shù)據(jù)綁定。如果您感興趣的話,可以訂閱我的相關(guān)專欄。非常感謝您的閱讀,如果這篇文章對(duì)您有幫助,那將是我的榮幸。我們下期再見(jiàn)啦??!
到此這篇關(guān)于SpringMVC的常見(jiàn)數(shù)據(jù)綁定的文章就介紹到這了,更多相關(guān)SpringMVC數(shù)據(jù)綁定內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Java使用Filter實(shí)現(xiàn)登錄驗(yàn)證
本文主要介紹了Java使用Filter實(shí)現(xiàn)登錄驗(yàn)證,Filter類似于門衛(wèi),你在進(jìn)入之前門衛(wèi)需要盤查你,身份合法進(jìn)入,身份不合法攔截,感興趣的可以了解一下2023-11-11
SpringMVC統(tǒng)一異常處理實(shí)例代碼
這篇文章主要介紹了SpringMVC統(tǒng)一異常處理實(shí)例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-11-11
Java開(kāi)發(fā)中synchronized的定義及用法詳解
這篇文章主要介紹了Java開(kāi)發(fā)中synchronized的定義及用法詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-07-07

