SpringMVC的常見數(shù)據(jù)綁定實戰(zhàn)舉例(以登錄為例演練)
??SpringMVC的簡單數(shù)據(jù)綁定
下面將會以登錄為例演練并介紹各種類型的數(shù)據(jù)綁定,以Signon類為例:
??創(chuàng)建Signon類
定義一個名為 Signon 的Java類,用于存儲用戶名和密碼,并提供了這兩個變量的公共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接口
定義一個名為 SignonDao 的Java接口,其中包含一個公共方法 findSignonByUnameAndPwd。具體代碼如下:
public interface SignonDao {
public int findSignonByUnameAndPwd(String uname,String pwd);
}??創(chuàng)建SignonDaoImp類
定義一個名為 SignonDaoImp 的Java類,它實現(xiàn)了 SignonDao 接口,并使用 @Repository 注解標記為Spring框架中的持久層組件。這個類提供了 findSignonByUnameAndPwd 方法的具體實現(xiàn),該方法接收用戶名(uname)和密碼(pwd)作為參數(shù),并檢查它們是否與預設的值("tom"和"12345")相匹配。如果匹配,方法返回1,表示用戶驗證成功;如果不匹配,方法返回0,表示用戶驗證失敗。具體代碼如下:
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接口
定義一個名為 SignonService 的Java接口,其中包含一個公共方法 checkByUnameAndPwd。具體代碼如下:
public interface SignonService {
public boolean checkByUnameAndPwd(String uname,String pwd);
}
??創(chuàng)建SignonServiceImp類
定義一個名為 SignonServiceImp 的Java類,它實現(xiàn)了 SignonService 接口,并使用 @Service 注解標記為Spring框架中的服務層組件。類中注入了一個 SignonDao 類型的成員變量 sd,用于訪問數(shù)據(jù)訪問層。SignonServiceImp 類實現(xiàn)了 checkByUnameAndPwd 方法,該方法接收用戶名和密碼作為參數(shù),并調(diào)用 sd 的 findSignonByUnameAndPwd 方法來檢查數(shù)據(jù)庫中是否存在匹配的用戶記錄。如果 findSignonByUnameAndPwd 方法返回1,表示驗證成功,checkByUnameAndPwd 方法返回 true;否則返回 false,表示驗證失敗。具體代碼如下:
@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)一會用到的,下面內(nèi)容主要為login登錄頁面和測試類。
??默認類型數(shù)據(jù)綁定
?創(chuàng)建控制器類LoginController
使用Spring框架的Java Web應用程序中的控制器類`LoginController`,它負責處理用戶登錄請求。類中注入了一個名為`SignonService`的自動裝配服務,該服務包含驗證用戶憑據(jù)的方法。`LoginController`類中的`login1`方法通過`@RequestMapping("/login1")`注解映射到`/login1`的HTTP請求。該方法接收一個`HttpServletRequest`對象和一個`Model`對象作為參數(shù),從請求中獲取用戶名和密碼,然后調(diào)用`SignonService`的`checkByUnameAndPwd`方法來驗證這些憑據(jù)。如果驗證成功,方法會將用戶名和密碼添加到模型中,并返回視圖名稱`"welcome"`;如果驗證失敗,則返回視圖名稱`"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)建登錄頁面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>輸入正確的用戶名和密碼后跳轉到的界面如下:

??簡單數(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)建登錄頁面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>登錄成功之后頁面和上面一樣。
??POJO綁定
?創(chuàng)建控制器類LoginController
定義`LoginController`類中的`login3`方法,它通過`@RequestMapping("/login3")`注解映射到`/login3`的HTTP請求。該方法接收一個`Signon`對象和一個`Model`對象作為參數(shù),使用`Signon`對象中的用戶名和密碼調(diào)用`ss.checkByUnameAndPwd`方法進行驗證。如果驗證成功,將用戶名和密碼添加到模型中并返回`"welcome"`視圖;如果驗證失敗,則返回`"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)建登錄頁面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>
??自定義類型轉換器
第一種以Date為例:
?創(chuàng)建DateConvert類
定義一個名為`DateConvert`的類,它實現(xiàn)了`Converter<String, Date>`接口,用于將字符串轉換為`Date`對象。在`convert`方法中,它使用`SimpleDateFormat`類以"yyyy-MM-dd"格式解析傳入的字符串參數(shù)`source`。如果解析成功,返回對應的`Date`對象;如果解析失敗,拋出`ParseException`,并由`catch`塊捕獲后拋出一個`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)建登錄頁面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類
定義一個名為`SignonConvert`的類,它實現(xiàn)了`Converter<String, Signon>`接口,用于將一個包含用戶名和密碼(以逗號分隔)的字符串轉換為一個`Signon`對象。在`convert`方法中,使用`StringTokenizer`對輸入字符串進行分割,提取出用戶名和密碼,然后創(chuàng)建一個新的`Signon`實例并設置這些屬性,最后返回這個`Signon`對象。
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)建登錄頁面login5.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
<form action="login5" method="post">
用戶信息(用戶名,密碼之間以逗號隔開):<input type="text" name="signon">
<input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>??數(shù)組類型
?創(chuàng)建控制器類LoginController
定義一個名為`login6`的方法,它通過`@RequestMapping("/login6")`注解映射到`/login6`的HTTP請求。該方法接收一個名為`uname`的字符串數(shù)組作為參數(shù),并遍歷數(shù)組中的每個字符串,將它們打印到控制臺。無論數(shù)組內(nèi)容如何,最終方法都會返回`"welcome"`視圖。
@RequestMapping("/login6")
public String login6(String uname[]){
for(String str:uname){
System.out.println(str);
}
return "welcome";
}
}?創(chuàng)建登錄頁面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
定義一個名為`login7`的Spring MVC控制器方法,它通過`@RequestMapping("/login7")`注解映射到`/login7`的HTTP請求。該方法接收一個名為`uname`的`List<String>`類型的請求參數(shù),表示用戶名列表,并將這些用戶名打印到控制臺。隨后,它將用戶名列表添加到模型中,以便在視圖中使用,并最終返回名為`"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)建登錄頁面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頁面
<c:forEach item="${uname}" var="data">:這個標簽開始一個循環(huán),它告訴JSP頁面遍歷uname集合中的每個元素。item屬性指定了要遍歷的集合,var屬性定義了在循環(huán)體內(nèi)代表當前元素的變量名(在這里是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)容:

跳轉后的頁面為:

??將集合類型數(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
定義一個名為`login8`的Spring MVC控制器方法,它通過`@RequestMapping("/login8")`注解映射到`/login8`的HTTP請求。該方法接收一個`User`類型的參數(shù)`user`,假設`User`類有一個`getUname`方法返回一個`String`集合。方法中遍歷這個集合,將每個用戶名打印到控制臺,然后返回`"welcome"`視圖。
@RequestMapping("/login8")
public String login8(User user){
for(String str: user.getUname()){
System.out.println(str);
}
return "welcome";
}?創(chuàng)建登錄頁面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>以上就是本期介紹的全部內(nèi)容了,主要是關于數(shù)據(jù)綁定。如果您感興趣的話,可以訂閱我的相關專欄。非常感謝您的閱讀,如果這篇文章對您有幫助,那將是我的榮幸。我們下期再見啦??!
到此這篇關于SpringMVC的常見數(shù)據(jù)綁定的文章就介紹到這了,更多相關SpringMVC數(shù)據(jù)綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Java開發(fā)中synchronized的定義及用法詳解
這篇文章主要介紹了Java開發(fā)中synchronized的定義及用法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-07-07

