亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

SpringMVC的常見數(shù)據(jù)綁定實(shí)戰(zhàn)舉例(以登錄為例演練)

 更新時(shí)間:2025年09月20日 11:46:15   作者:安清h  
文章以登錄功能為例,詳解SpringMVC的數(shù)據(jù)綁定機(jī)制,涵蓋簡單類型、POJO、自定義轉(zhuǎn)換器(如Date和Signon)、數(shù)組及集合類型等場景,通過Signon類和相關(guān)控制器方法演示如何處理不同數(shù)據(jù)類型的綁定與驗(yàn)證,感興趣的朋友跟隨小編一起看看吧

??SpringMVC的簡單數(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,用于訪問數(shù)據(jù)訪問層。SignonServiceImp 類實(shí)現(xiàn)了 checkByUnameAndPwd 方法,該方法接收用戶名和密碼作為參數(shù),并調(diào)用 sdfindSignonByUnameAndPwd 方法來檢查數(shù)據(jù)庫中是否存在匹配的用戶記錄。如果 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登錄頁面和測試類。

??默認(rèn)類型數(shù)據(jù)綁定

?創(chuàng)建控制器類LoginController

使用Spring框架的Java Web應(yīng)用程序中的控制器類`LoginController`,它負(fù)責(zé)處理用戶登錄請求。類中注入了一個(gè)名為`SignonService`的自動(dòng)裝配服務(wù),該服務(wù)包含驗(yàn)證用戶憑據(jù)的方法。`LoginController`類中的`login1`方法通過`@RequestMapping("/login1")`注解映射到`/login1`的HTTP請求。該方法接收一個(gè)`HttpServletRequest`對象和一個(gè)`Model`對象作為參數(shù),從請求中獲取用戶名和密碼,然后調(diào)用`SignonService`的`checkByUnameAndPwd`方法來驗(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)建登錄頁面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)到的界面如下:

??簡單數(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請求。該方法接收一個(gè)`Signon`對象和一個(gè)`Model`對象作為參數(shù),使用`Signon`對象中的用戶名和密碼調(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)建登錄頁面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`對象。在`convert`方法中,它使用`SimpleDateFormat`類以"yyyy-MM-dd"格式解析傳入的字符串參數(shù)`source`。如果解析成功,返回對應(yīng)的`Date`對象;如果解析失敗,拋出`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)建登錄頁面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`對象。在`convert`方法中,使用`StringTokenizer`對輸入字符串進(jìn)行分割,提取出用戶名和密碼,然后創(chuàng)建一個(gè)新的`Signon`實(shí)例并設(shè)置這些屬性,最后返回這個(gè)`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">
        用戶信息(用戶名,密碼之間以逗號(hào)隔開):<input type="text" name="signon">
        <input type="submit" value="提交"><input type="reset" value="重置">
    </form>
</body>
</html>

??數(shù)組類型

?創(chuàng)建控制器類LoginController

定義一個(gè)名為`login6`的方法,它通過`@RequestMapping("/login6")`注解映射到`/login6`的HTTP請求。該方法接收一個(gè)名為`uname`的字符串?dāng)?shù)組作為參數(shù),并遍歷數(shù)組中的每個(gè)字符串,將它們打印到控制臺(tái)。無論數(shù)組內(nèi)容如何,最終方法都會(huì)返回`"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

定義一個(gè)名為`login7`的Spring MVC控制器方法,它通過`@RequestMapping("/login7")`注解映射到`/login7`的HTTP請求。該方法接收一個(gè)名為`uname`的`List<String>`類型的請求參數(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)建登錄頁面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">:這個(gè)標(biāo)簽開始一個(gè)循環(huán),它告訴JSP頁面遍歷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)后的頁面為:

??將集合類型數(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控制器方法,它通過`@RequestMapping("/login8")`注解映射到`/login8`的HTTP請求。該方法接收一個(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)建登錄頁面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)容了,主要是關(guān)于數(shù)據(jù)綁定。如果您感興趣的話,可以訂閱我的相關(guān)專欄。非常感謝您的閱讀,如果這篇文章對您有幫助,那將是我的榮幸。我們下期再見啦??!

到此這篇關(guān)于SpringMVC的常見數(shù)據(jù)綁定的文章就介紹到這了,更多相關(guān)SpringMVC數(shù)據(jù)綁定內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java中return語句的幾種用法舉例

    java中return語句的幾種用法舉例

    這篇文章主要介紹了Java中return語句的使用,包括有返回值類型的方法、提前返回、返回對象以及方法返回類型為void的情況,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-01-01
  • Java操作MinIO實(shí)現(xiàn)文件的上傳和刪除

    Java操作MinIO實(shí)現(xiàn)文件的上傳和刪除

    本文主要介紹如何將本地Java項(xiàng)目resources目錄下的一個(gè)PNG圖片上傳到MinIO,然后將上傳的圖片刪除,文中有詳細(xì)的流程步驟和示例代碼,需要的朋友可以參考下
    2023-06-06
  • java中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解

    java中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解

    下面小編就為大家?guī)硪黄猨ava中的靜態(tài)代碼塊、構(gòu)造代碼塊、構(gòu)造方法詳解。小編覺得挺好的,現(xiàn)在分享給大家。給大家一個(gè)參考。一起跟隨小編過來看看吧
    2016-03-03
  • java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對比

    java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對比

    這篇文章主要介紹了java中int轉(zhuǎn)string與string轉(zhuǎn)int的效率對比,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • Spring創(chuàng)建Bean的生命周期詳析

    Spring創(chuàng)建Bean的生命周期詳析

    這篇文章主要介紹了Spring創(chuàng)建Bean的生命周期詳析,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-09-09
  • 當(dāng)事務(wù)Transactional遇見異步線程出現(xiàn)的坑及解決

    當(dāng)事務(wù)Transactional遇見異步線程出現(xiàn)的坑及解決

    這篇文章主要介紹了當(dāng)事務(wù)Transactional遇見異步線程出現(xiàn)的坑及解決方案,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-12-12
  • 關(guān)于Java中配置ElasticSearch集群環(huán)境賬號(hào)密碼的問題

    關(guān)于Java中配置ElasticSearch集群環(huán)境賬號(hào)密碼的問題

    這篇文章主要介紹了Java中配置ElasticSearch集群環(huán)境賬號(hào)密碼的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • JAVA簡單實(shí)現(xiàn)MD5注冊登錄加密實(shí)例代碼

    JAVA簡單實(shí)現(xiàn)MD5注冊登錄加密實(shí)例代碼

    本篇文章主要介紹了JAVA簡單實(shí)現(xiàn)MD5注冊登錄加密實(shí)例代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-03-03
  • RestTemplate Get請求實(shí)現(xiàn)bean參數(shù)傳遞詳解

    RestTemplate Get請求實(shí)現(xiàn)bean參數(shù)傳遞詳解

    RestTemplate 是從 Spring3.0 開始支持的一個(gè) HTTP 請求工具,也有的稱之為網(wǎng)絡(luò)框架,說白了就是Java版本的一個(gè)postman,這篇文章主要介紹了詳解RestTemplate 用法,需要的朋友可以參考下
    2022-11-11
  • Mybatis實(shí)現(xiàn)一對一查詢映射處理

    Mybatis實(shí)現(xiàn)一對一查詢映射處理

    MyBatis是一種流行的Java持久化框架,它提供了靈活而強(qiáng)大的查詢映射功能,本文主要介紹了Mybatis實(shí)現(xiàn)一對一查詢映射處理,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-08-08

最新評論