0


【Spring篇】SpringMVC的常见数据绑定

** 🧸安清h:个人主页**

** 🎥个人专栏:【计算机网络】【Mybatis篇】【Spring篇】**

🚦作者简介:一个有趣爱睡觉的intp,期待和更多人分享自己所学知识的真诚大学生。



🎯SpringMVC的简单数据绑定

下面将会以登录为例演练并介绍各种类型的数据绑定,以Signon类为例:

🚦创建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;
    }
}

🚦创建SignonDao接口

定义一个名为

SignonDao

的Java接口,其中包含一个公共方法

findSignonByUnameAndPwd。具体代码如下:
public interface SignonDao {
    public int findSignonByUnameAndPwd(String uname,String pwd);
}

🚦创建SignonDaoImp类

定义一个名为

SignonDaoImp

的Java类,它实现了

SignonDao

接口,并使用

@Repository

注解标记为Spring框架中的持久层组件。这个类提供了

findSignonByUnameAndPwd

方法的具体实现,该方法接收用户名(

uname

)和密码(

pwd

)作为参数,并检查它们是否与预设的值("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;
    }
}

🚦创建SignonService接口

定义一个名为

SignonService

的Java接口,其中包含一个公共方法

checkByUnameAndPwd。具体代码如下:
public interface SignonService {
    public boolean checkByUnameAndPwd(String uname,String pwd);
}

🚦创建SignonServiceImp类

定义一个名为

SignonServiceImp

的Java类,它实现了

SignonService

接口,并使用

@Service

注解标记为Spring框架中的服务层组件。类中注入了一个

SignonDao

类型的成员变量

sd

,用于访问数据访问层。

SignonServiceImp

类实现了

checkByUnameAndPwd

方法,该方法接收用户名和密码作为参数,并调用

sd

findSignonByUnameAndPwd

方法来检查数据库中是否存在匹配的用户记录。如果

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;
    }
}

🚦创建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>

以上内容为下面统一会用到的,下面内容主要为login登录页面和测试类。

🍔默认类型数据绑定

✨创建控制器类LoginController

使用Spring框架的Java Web应用程序中的控制器类LoginController,它负责处理用户登录请求。类中注入了一个名为SignonService的自动装配服务,该服务包含验证用户凭据的方法。LoginController类中的login1方法通过@RequestMapping("/login1")注解映射到/login1的HTTP请求。该方法接收一个HttpServletRequest对象和一个Model对象作为参数,从请求中获取用户名和密码,然后调用SignonServicecheckByUnameAndPwd方法来验证这些凭据。如果验证成功,方法会将用户名和密码添加到模型中,并返回视图名称"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";
        }
    }
}

✨创建登录页面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"><br>
    密码:<input type="text" name="pwd"><br>
    <input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>

输入正确的用户名和密码后跳转到的界面如下:

🍔简单数据类型绑定

✨创建控制器类LoginController

在控制器LoginController类中创建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";
        }
    }

✨创建登录页面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"><br>
    密码:<input type="text" name="pwd"><br>
    <input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>

登录成功之后页面和上面一样。

🍔POJO绑定

✨创建控制器类LoginController

定义LoginController类中的login3方法,它通过@RequestMapping("/login3")注解映射到/login3的HTTP请求。该方法接收一个Signon对象和一个Model对象作为参数,使用Signon对象中的用户名和密码调用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";
        }

✨创建登录页面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"><br>
    密码:<input type="password" name="pwd"><br>
    <input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>

🍔自定义类型转换器

第一种以Date为例:

✨创建DateConvert类

定义一个名为DateConvert的类,它实现了Converter<String, Date>接口,用于将字符串转换为Date对象。在convert方法中,它使用SimpleDateFormat类以"yyyy-MM-dd"格式解析传入的字符串参数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>

✨创建控制器类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";
    }

✨创建登录页面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"><br>
    生日:<input type="text" name="birthday"><br>
    <input type="submit" value="提交"> <input type="reset" value="重置">
</form>
</body>
</html>

第二种以Signon为例:

🎃创建SignonConvert类

定义一个名为SignonConvert的类,它实现了Converter<String, Signon>接口,用于将一个包含用户名和密码(以逗号分隔)的字符串转换为一个Signon对象。在convert方法中,使用StringTokenizer对输入字符串进行分割,提取出用户名和密码,然后创建一个新的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"/>

🎃创建控制器类LoginController

    @RequestMapping("/login5")
    public String login6(Signon signon){
        System.out.println(signon.getUname()+","+signon.getPwd());
        return "welcome";
    }

🎃创建登录页面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"><br>
        <input type="submit" value="提交"><input type="reset" value="重置">
    </form>
</body>
</html>

🍔数组类型

✨创建控制器类LoginController

定义一个名为login6的方法,它通过@RequestMapping("/login6")注解映射到/login6的HTTP请求。该方法接收一个名为uname的字符串数组作为参数,并遍历数组中的每个字符串,将它们打印到控制台。无论数组内容如何,最终方法都会返回"welcome"视图。

    @RequestMapping("/login6")
    public String login6(String uname[]){
        for(String str:uname){
            System.out.println(str);
        }
        return "welcome";
    }
}

✨创建登录页面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>

🍔集合类型

✨创建控制器类LoginController

定义一个名为login7的Spring MVC控制器方法,它通过@RequestMapping("/login7")注解映射到/login7的HTTP请求。该方法接收一个名为unameList<String>类型的请求参数,表示用户名列表,并将这些用户名打印到控制台。随后,它将用户名列表添加到模型中,以便在视图中使用,并最终返回名为"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";
    }

✨创建登录页面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"><br>
    用户1<input type="text" name="uname"><br>
    用户1<input type="text" name="uname"><br>
    用户1<input type="text" name="uname"><br>
    用户1<input type="text" name="uname"><br>
    <input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>

✨创建welcome8.jsp页面

<c:forEach item="${uname}" var="data">

:这个标签开始一个循环,它告诉JSP页面遍历

uname

集合中的每个元素。

item

属性指定了要遍历的集合,

var

属性定义了在循环体内代表当前元素的变量名(在这里是

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>

在框内输入以下内容:

跳转后的页面为:

🍔将集合类型数据作为POJO类的数据成员

✨创建User类

public class User {
    List<String> uname;

    public List<String> getUname() {
        return uname;
    }

    public void setUname(List<String> uname) {
        this.uname = uname;
    }
}

✨创建控制器类LoginController

定义一个名为login8的Spring MVC控制器方法,它通过@RequestMapping("/login8")注解映射到/login8的HTTP请求。该方法接收一个User类型的参数user,假设User类有一个getUname方法返回一个String集合。方法中遍历这个集合,将每个用户名打印到控制台,然后返回"welcome"视图。

    @RequestMapping("/login8")
    public String login8(User user){
        for(String str: user.getUname()){
            System.out.println(str);
        }
        return "welcome";
    }

✨创建登录页面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"><br>
    用户1<input type="text" name="uname"><br>
    用户1<input type="text" name="uname"><br>
    用户1<input type="text" name="uname"><br>
    用户1<input type="text" name="uname"><br>
    <input type="submit" value="提交"><input type="reset" value="重置">
</form>
</body>
</html>

以上就是本期介绍的全部内容了,主要是关于数据绑定。如果您感兴趣的话,可以订阅我的相关专栏。非常感谢您的阅读,如果这篇文章对您有帮助,那将是我的荣幸。我们下期再见啦🧸!

标签: spring 后端 java

本文转载自: https://blog.csdn.net/m0_74202856/article/details/144128126
版权归原作者 安清h 所有, 如有侵权,请联系我们删除。

“【Spring篇】SpringMVC的常见数据绑定”的评论:

还没有评论