Spring 向页面传值以及接受页面传过来的参数的方式

Spring MVC接收请求提交的参数值的几种方法:

  • 使用HttpServletRequest获取。

     @RequestMapping("/login.do")
    public String login(HttpServletRequest request){
        String name = request.getParameter("name")
        String pass = request.getParameter("pass")
    } 
  • 使用@RequestParam注解。

        @RequestMapping("/login.do")
        public String login(HttpServletRequest request,
                                        String name,
         @RequestParam("pass")String password) // 表单属性是pass,用变量password接收
        {
           syso(name);
           syso(password)
        }  
  • 使用自动机制封装成实体参数。
    <form action="login.do">
    用户名:<input name="name"/>
    密码:<input name="pass"/>
    <input type="submit" value="登陆">
    </form>  

    //封装的User类
    public class User{
      private String name;
      private String pass;
    }  
    @RequestMapping("/login.do")
    public String login(User user)
    {
       syso(user.getName());
       syso(user.getPass());
    }  

当Controller组件处理后,需要向响应JSP传值时,可以使用的方法:

1),使用HttpServletRequest 和 Session  然后setAttribute(),就和Servlet中一样

Model数据会利用HttpServletRequest的Attribute传值到success.jsp中

    @RequestMapping("/login.do")
    public ModelAndView  login(String name,String pass){
        User user = userService.login(name,pwd);
        Map<String,Object> data = new HashMap<String,Object>();
        data.put("user",user);
        return new ModelAndView("success",data);
    }  

2),使用ModelAndView对象

3),使用ModelMap对象

使用ModelMap参数对象示例:

ModelMap数据会利用HttpServletRequest的Attribute传值到success.jsp中

    @RequestMapping("/login.do")
    public String login(String name,String pass ,ModelMap model){
        User user  = userService.login(name,pwd);
        model.addAttribute("user",user);
        model.put("name",name);
        return "success";
    }  

4),使用@ModelAttribute注解

使用@ModelAttribute示例

在Controller方法的参数部分或Bean属性方法上使用

@ModelAttribute数据会利用HttpServletRequest的Attribute传值到success.jsp中

    @RequestMapping("/login.do")
    public String login(@ModelAttribute("user") User user){
        //TODO
       return "success";
    }  

    @ModelAttribute("name")
    public String getName(){
        return name;
    }  

Session存储:

可以利用HttpServletReequest的getSession()方法

    @RequestMapping("/login.do")
    public String login(String name,String pwd
                                ModelMap model,HttpServletRequest request){
         User user = serService.login(name,pwd);
         HttpSession session = request.getSession();
         session.setAttribute("user",user);
         model.addAttribute("user",user);
         return "success";
    }  

Spring MVC 默认采用的是转发来定位视图,如果要使用重定向,可以如下操作

1,使用RedirectView

2,使用redirect:前缀

    public ModelAndView login(){
       RedirectView view = new RedirectView("regirst.do");
       return new ModelAndView(view);
    }  

或者用如下方法,工作中常用的方法:

 public String login(){
    //TODO
    return "redirect:regirst.do";
} 

步骤一:创建新Web项目,导入Spring MVC包和业务层UserService

1. 创建Web项目导入相关的jar包:

2. 导入前述业务层UserService类以及依赖的类,等。

User类代码如下:

package com.souvc.entity;

import java.io.Serializable;

public class User implements Serializable {
    private static final long serialVersionUID = -603439325380668432L;
    private int id;
    private String name;
    private String pwd;
    private String phone;

    public User() {
    }

    public User(int id, String name, String pwd, String phone) {
        this.id = id;
        this.name = name;
        this.pwd = pwd;
        this.phone = phone;
    }

    public User(String name, String pwd, String phone) {
        super();
        this.name = name;
        this.pwd = pwd;
        this.phone = phone;
    }

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    @Override
    public int hashCode() {
        return id;
    }

    @Override
    public boolean equals(Object obj) {
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (obj instanceof User) {
            User o = (User) obj;
            return this.id == o.id;
        }
        return true;
    }

    @Override
    public String toString() {
        return id + "," + name + "," + pwd + "," + phone;
    }
}

UserDao接口代码如下:

package com.souvc.dao;

import com.souvc.entity.User;

/**
 * 用户数据访问对象接口
 */
public interface UserDao {
    /** 根据唯一用户名查询系统用户, 如果没有找到用户信息返回null */
    public User findByName(String name);
    // public User add(String name, String pwd, String phone);
    // public User find(int id);
    // public User delete(int id);
    // public void update(User user);
}

UserService类代码如下:

package com.souvc.service;

import java.io.Serializable;

import javax.annotation.Resource;

import org.springframework.stereotype.Service;

import com.souvc.dao.UserDao;
import com.souvc.entity.User;

/** 业务层 注解 */
@Service
// 默认的Bean ID是 userService
public class UserService implements Serializable {
    private static final long serialVersionUID = 7360372166489952236L;
    private UserDao userDao;

    // @Resource //自动匹配userDao对象并注入
    @Resource(name = "userDao")
    public void setUserDao(UserDao userDao) {
        this.userDao = userDao;//
    }

    public UserDao getUserDao() {
        return userDao;
    }

    /** 登录系统功能 */
    public User login(String name, String pwd) throws NameOrPwdException,
            NullParamException {
        if (name == null || name.equals("") || pwd == null || pwd.equals("")) {
            throw new NullParamException("登录参数不能为空!");
        }
        User user = userDao.findByName(name);
        if (user != null && pwd.equals(user.getPwd())) {
            return user;
        }
        throw new NameOrPwdException("用户名或者密码错误");
    }
}

NameOrPwdException类代码如下:

package com.souvc.service;

/** 用户名或者密码错误 */
public class NameOrPwdException extends Exception {
    public NameOrPwdException() {
    }

    public NameOrPwdException(String message) {
        super(message);
    }

    public NameOrPwdException(Throwable cause) {
        super(cause);
    }

    public NameOrPwdException(String message, Throwable cause) {
        super(message, cause);
    }
}

NullParamException类代码如下:

package com.souvc.service;

/** 参数为空 */
public class NullParamException extends Exception {
    public NullParamException() {
    }

    public NullParamException(String message) {
        super(message);
    }

    public NullParamException(Throwable cause) {
        super(cause);
    }

    public NullParamException(String message, Throwable cause) {
        super(message, cause);
    }
}

JdbcDataSource类代码如下:

package com.souvc.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

/** 组件注解 */
@Component
public class JdbcDataSource implements Serializable {

    private static final long serialVersionUID = -8925981939329398101L;

    private String driver;

    @Value("#{jdbcProps.url}")
    private String url;

    @Value("#{jdbcProps.user}")
    private String user;

    @Value("#{jdbcProps.pwd}")
    private String pwd;

    public String getDriver() {
        return driver;
    }

    /** 必须使用Bean属性输入, 否则不能进行JDBC Driver注册 */
    @Value("#{jdbcProps.driver}")
    public void setDriver(String driver) {
        try {
            // 注册数据库驱动
            Class.forName(driver);
            this.driver = driver;
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public Connection getConnection() throws SQLException {
        Connection conn = DriverManager.getConnection(url, user, pwd);
        return conn;
    }

    public void close(Connection conn) {
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

MysqlUserDao类代码如下:

package com.souvc.dao;

import java.io.Serializable;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.stereotype.Repository;

import com.souvc.entity.User;

/** 持久层 注解 */
@Repository("userDao")
// 指定特定的Bean ID 方便setUserDao注入
public class MysqlUserDao implements UserDao, Serializable {
    private static final long serialVersionUID = 7385842613248394287L;
    private JdbcDataSource dataSource;

    public MysqlUserDao() {
    }

    /** 创建 MysqlUserDAO 对象必须依赖于JDBCDataSource实例 */
    public MysqlUserDao(JdbcDataSource dataSource) {
        this.dataSource = dataSource;
    }

    @Autowired
    // 按照类型自动装配
    public void setDataSource(@Qualifier("jdbcDataSource")
    JdbcDataSource dataSource) {
        this.dataSource = dataSource;
    }

    public JdbcDataSource getDataSource() {
        return dataSource;
    }

    /** 根据唯一用户名查询系统用户, 如果没有找到用户信息返回null */
    public User findByName(String name) {
        System.out.println("利用JDBC技术查找User信息");
        String sql = "select id, name, pwd, phone  from users where name=?";
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
            PreparedStatement ps = conn.prepareStatement(sql);
            ps.setString(1, name);
            ResultSet rs = ps.executeQuery();
            User user = null;
            while (rs.next()) {
                user = new User();
                user.setId(rs.getInt("id"));
                user.setName(rs.getString("name"));
                user.setPwd(rs.getString("pwd"));
                user.setPhone(rs.getString("phone"));
            }
            rs.close();
            ps.close();
            return user;
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException(e);
        } finally {
            dataSource.close(conn);
        }
    }
}

db.properties文件内容如下:

# config for Mysql
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/souvc
user=root
pwd=123456

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:jdbc="http://www.springframework.org/schema/jdbc"
    xmlns:jee="http://www.springframework.org/schema/jee"
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:jpa="http://www.springframework.org/schema/data/jpa"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="
            http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
            http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
            http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
            http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
            http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
            http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
            http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
            http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">

    <util:properties id="jdbcProps" location="classpath:db.properties" />

    <context:component-scan base-package="com.souvc" />
    <!-- 视图处理 -->
    <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/jsp/"></property>
        <property name="suffix" value=".jsp"></property>
    </bean>
</beans>

Mysql数据库初始化SQL代码如下:

DROP TABLE users;
CREATE TABLE USERS
(
      ID DOUBLE(7, 0) ,
      NAME VARCHAR(50) ,
      PWD VARCHAR(50),
      PHONE VARCHAR(50) ,
      PRIMARY KEY (id)
 );

INSERT INTO Users (id, NAME, pwd, phone) VALUES (1, ‘Tom‘, ‘123‘, ‘110‘);
INSERT INTO Users (id, NAME, pwd, phone) VALUES (2, ‘Jerry‘, ‘abc‘, ‘119‘);
INSERT INTO Users (id, NAME, pwd, phone) VALUES (3, ‘Andy‘, ‘456‘, ‘112‘);

3. 为项目添加JUnit4 API,然后添加测试类TestCase和测试方法testUserService()用于测试上述配置是否正确。TestCase类代码如下:

package com.souvc.test;

import java.util.Properties;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.souvc.dao.JdbcDataSource;
import com.souvc.entity.User;
import com.souvc.service.UserService;

public class TestCase {

    @Test
    public void testUserService() throws Exception {
        String cfg = "spring-mvc.xml";
        ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
        Properties obj = ac.getBean("jdbcProps", Properties.class);
        JdbcDataSource ds = ac.getBean("jdbcDataSource", JdbcDataSource.class);
        System.out.println(obj);
        System.out.println(ds);
        System.out.println(ds.getConnection());
        UserService service = ac.getBean("userService", UserService.class);
        User user = service.login("Tom", "123");
        System.out.println(user);
    }
}

执行测试方法testUserService(),在控制台输出的结果:

{user=root, url=jdbc:mysql://localhost:3306/souvc, driver=com.mysql.jdbc.Driver, pwd=123456}
[email protected]
[email protected]
利用JDBC技术查找User信息
1,Tom,123,110

这个结果说明业务层UserService工作正常。

4. 配置Spring MVC 核心控制器DispatcherServlet到web.xml。web.xml配置部分代码参考如下:

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

    <servlet>
        <servlet-name>springmvc</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <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>springmvc</servlet-name>
        <url-pattern>*.form</url-pattern>
    </servlet-mapping>

</web-app>

5. 部署项目到Tomcat并且启动,测试Spring MVC配置是否正常。

在输出结果中出现内容, 并且没有异常就会说明Spring MVC部署正常。

步骤二:实现login-action1.form登录流程,测试利用HttpServletRequrst传值方法

1. 在WEB-INF/jsp文件夹下添加login-form.jsp文件,代码如下所示:

<%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<!DOCTYPE HTML>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:url var="base" value="/"></c:url>
<html>
      <head>
        <title>Login Form</title>
        <link rel="stylesheet" type="text/css" href="${base}styles.css">
      </head>
        <body>
            <h6>${message}</h6>
            <form method="post" action="${base}login/login-action1.form">
                <div>
                    <h2>登录 login-action1.form</h2>
                    <p><label>用户</label><input type="text" name="name"></p>
                    <p><label>密码</label><input type="password" name="pwd"></p>
                    <h3><input type="submit" value="登录"></h3>
                </div>
            </form>

            <form method="post" action="${base}login/login-action2.form">
                <div>
                    <h2>登录 login-action2.form</h2>
                    <p><label>用户</label><input type="text" name="name"></p>
                    <p><label>密码</label><input type="password" name="pwd"></p>
                    <h3><input type="submit" value="登录"></h3>
                </div>
            </form>

            <form method="post" action="${base}login/login-action3.form">
                <div>
                    <h2>登录 login-action3.form</h2>
                    <p><label>用户</label><input type="text" name="name"></p>
                    <p><label>密码</label><input type="password" name="pwd"></p>
                    <h3><input type="submit" value="登录"></h3>
                </div>
            </form>

            <form method="post" action="${base}login/login-action4.form">
                <div>
                    <h2>登录 login-action4.form</h2>
                    <p><label>用户</label><input type="text" name="name"></p>
                    <p><label>密码</label><input type="password" name="pwd"></p>
                    <h3><input type="submit" value="登录"></h3>
                </div>
            </form>

            <form method="post" action="${base}login/login-action5.form">
                <div>
                    <h2>登录 login-action5.form</h2>
                    <p><label>用户</label><input type="text" name="name"></p>
                    <p><label>密码</label><input type="password" name="pwd"></p>
                    <h3><input type="submit" value="登录"></h3>
                </div>
            </form>

            <form method="post" action="${base}login/login-action6.form">
                <div>
                    <h2>登录 login-action6.form</h2>
                    <p><label>用户</label><input type="text" name="name"></p>
                    <p><label>密码</label><input type="password" name="pwd"></p>
                    <h3><input type="submit" value="登录"></h3>
                </div>
            </form>

        </body>
    </html>

方法一解释:

利用HttpServletRequest对象进行浏览器页面到控制器传值。

方法二解释:

使用@RequestParam注解声明表单密码输入框pwd的值注入到password变量,表单中用户名输入框根据名字映自动射注入name变量。 @RequestMapping注解将login-action2.form映射到了checkLogin2()方法。这样就与login- form.jsp表单对应。

方法三解释:

这里采用user作为参数, Spring会自动的将页面表单参数name,pwd注入到user对象的相应属性name,pwd传递到方法中。@RequestMapping将请求login-action3.form映射到方法checkLogin3()。

方法四解释:

在处理方法完成后返回一个ModelAndView对象。

方法五解释:

ModelMap属性值与页面login-form.jsp之间的数据对应。

方法六解释:

@ModelAttribute声明的属性与login-form.jsp页面的值关系。

用户名或者密码错误时候出现的时候,能够记住用户名。

在前述案例中,用户登录成功以后, 可以利用HttpServletRequest对象的getSession()方法访问Session对象, 这样就可以保持用户登录状态了。

2. 为页面添加样式文件styles.css,样式文件保存在WebRoot文件夹下,styles.css文件代码如下所示:

* {
    margin: 0;
    padding: 0;
}

h6 {
    text-align: center;
    color: red;
    padding: 10px;
    font-size: 14px;
}

form {
    padding: 10px;
    float: left;
}

form div {
    border: 1px gray solid;
    width: 320px;
    padding: 8px;
}

form p input {
    width: 180px
}

form h2 input {
    text-align: center;
}

form h2 {
    background: black;
    color: white;
    padding: 4px;
}

form p {
    background: #ddd;
    padding: 4px 8px 0 8px;
}

form h3 {
    background: #ddd;
    padding: 8px;
}

3. 在WEB-INF/jsp文件夹下添加success.jsp文件,这个文件是登录成功以后显示的界面,代码如下所示:

<%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<!DOCTYPE HTML>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:url var="base" value="/"></c:url>
<html>
    <head>
        <title>Success</title>
        <link rel="stylesheet" type="text/css" href="${base}styles.css">
    </head>
    <body>
        <h6>
            ${user.name}登录成功!
        </h6>
    </body>
</html>

上述页面中,使用EL表达式和标准标签库配合显示界面数据, 其中<c:url var="base" value="/"></c:url>和${base}用于解决绝对路径问题。

4. 创建控制器类LoginController,在该类中使用注解@Controller的方式进行配置:

1)使用@Controller将LoginController声明为控制器Bean组件。

2)使用@RequestMapping("/login")声明对LoginController组件的请求在/login 路径下。

3)流程控制方法loginForm(),用于显示登录表单页面。使用@RequestMapping注解将映射请求/login-form.form到loginForm()方法。

4)增加userService属性,并且使用@Resource注解声明在运行期间注入userService对象。

5)增加控制流程方法checkLogin1(),使用@RequestMapping注解将请求/login-action1.form映 射到checkLogin1()方法。checkLogin1()方法调用userService的login方法,实现登录流程。 checkLogin1()方法主要是测试JSP页面到控制器的数据传输方式。

LoginController类代码如下所示:

package com.souvc.controller;

import java.util.HashMap;
import java.util.Map;
import java.util.Random;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView;

import com.souvc.entity.User;
import com.souvc.service.NameOrPwdException;
import com.souvc.service.NullParamException;
import com.souvc.service.UserService;

@Controller
//@SessionAttributes("user")
@RequestMapping("/login")
public class LoginController {

    @Resource
    // 请求Spring注入资源 userService
    private UserService userService;

    @RequestMapping("/login.form")
    public String loginForm() {
        // 可以向表单界面传递一些参数
        return "login-form";
    }

    @RequestMapping("/login-action1.form")
    // Spring MVC 自动参数注入HttpServletRequest
    public String checkLogin1(HttpServletRequest req) {
        System.out.println("---方法一---");
        // 优点直接简洁,缺点需要自己处理数据类型转换, 不支持文件上传功能
        String name = req.getParameter("name");
        String pwd = req.getParameter("pwd");
        System.out.println(name);
        System.out.println(pwd);
        try {
            User user = userService.login(name, pwd);
            // 登录成功将登录用户信息保存到当前会话中
            req.getSession().setAttribute("user", user);
            return "success";
        } catch (NameOrPwdException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "login-form";
        } catch (NullParamException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "redirect:login.form";
        } catch (RuntimeException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "error";
        }
    }

    @RequestMapping("/login-action2.form")
    public String checkLogin2(String name, @RequestParam("pwd")
    String password, // 映射表单属性不同的参数
            HttpServletRequest req) {
        System.out.println("---方法二---");
        // 优点, 自动转换数据类型, 缺点可能出现数据类型转换异常
        System.out.println(name);
        System.out.println(password);
        try {
            User user = userService.login(name, password);
            // 登录成功将登录用户信息保存到当前会话中
            req.getSession().setAttribute("user", user);
            return "success";
        } catch (NameOrPwdException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "login-form";
        } catch (NullParamException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "login-form";
        } catch (RuntimeException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "error";
        }
    }

    @RequestMapping("/login-action3.form")
    public String checkLogin3(User user, HttpServletRequest req) {
        System.out.println("---方法三---");
        // 自动填充到bean对象
        System.out.println(user);
        try {
            user = userService.login(user.getName(), user.getPwd());
            // 登录成功将登录用户信息保存到当前会话中
            req.getSession().setAttribute("user", user);
            return "success";
        } catch (NameOrPwdException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "login-form";
        } catch (NullParamException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "login-form";
        } catch (RuntimeException e) {
            e.printStackTrace();
            req.setAttribute("message", e.getMessage());
            return "error";
        }
    }

    @RequestMapping("/login-action4.form")
    public ModelAndView checkLogin4(String name, String pwd,
            HttpServletRequest req) {
        System.out.println("---方法四---");
        Map<String, Object> data = new HashMap<String, Object>();
        try {
            User user = userService.login(name, pwd);
            // 登录成功将登录用户信息保存到当前会话中
            req.getSession().setAttribute("user", user);
            return new ModelAndView("success", data);
        } catch (NameOrPwdException e) {
            e.printStackTrace();
            data.put("message", e.getMessage());
            return new ModelAndView("login-form", data);
        } catch (NullParamException e) {
            e.printStackTrace();
            data.put("message", e.getMessage());
            return new ModelAndView("login-form", data);
        } catch (RuntimeException e) {
            e.printStackTrace();
            data.put("message", e.getMessage());
            return new ModelAndView("error", data);
        }
    }

    @RequestMapping("/login-action5.form")
    public String checkLogin5(String name, String pwd, ModelMap model,
            HttpServletRequest req) {
        System.out.println("---方法五---");
        try {
            User user = userService.login(name, pwd);
            // 登录成功将登录用户信息保存到当前会话中
            req.getSession().setAttribute("user", user);
            return "success";
        } catch (NameOrPwdException e) {
            e.printStackTrace();
            model.addAttribute("message", e.getMessage());
            return "login-form";
        } catch (NullParamException e) {
            e.printStackTrace();
            model.addAttribute("message", e.getMessage());
            return "login-form";
        } catch (RuntimeException e) {
            e.printStackTrace();
            model.addAttribute("message", e.getMessage());
            return "error";
        }
    }

     @RequestMapping("/login-action6.form")
        public String checkLogin6(
                @ModelAttribute("name") String name,
                @ModelAttribute("password") String pwd,
                ModelMap model, HttpServletRequest req){
            System.out.println("---方法六---");
            try {
                User user = userService.login(name, pwd);
                // 登录成功将登录用户信息保存到当前会话中
                req.getSession().setAttribute("user", user);
                return "success";
            } catch (NameOrPwdException e) {
                e.printStackTrace();
                model.addAttribute("message", e.getMessage());
                return "login-form";
            } catch (NullParamException e) {
                e.printStackTrace();
                model.addAttribute("message", e.getMessage());
                return "login-form";
            } catch (RuntimeException e) {
                e.printStackTrace();
                model.addAttribute("message", e.getMessage());
                return "error";
            }
        }

    @RequestMapping("/login-action7.form")
    public String checkLogin7(ModelMap model, HttpServletRequest req) {
        System.out.println("---方法七---");
        String name1=req.getParameter("name");
        String pwd1=req.getParameter("pwd");
        try {
            User user = userService.login(name1, pwd1);
            // 登录成功将登录用户信息保存到当前会话中
            req.getSession().setAttribute("user", user);
            return "success";
        } catch (NameOrPwdException e) {
            e.printStackTrace();
            model.addAttribute("message", e.getMessage());
            return "redirect:login";
        } catch (NullParamException e) {
            e.printStackTrace();
            model.addAttribute("message", e.getMessage());
            return "redirect:login";
        } catch (RuntimeException e) {
            e.printStackTrace();
            model.addAttribute("message", e.getMessage());
            return "error";
        }
    }

    private String[] msg = { "再来一次", "下次就对了", "没关系还有机会" };

    @ModelAttribute("next")
    public String getNext() {
        Random r = new Random();
        return msg[r.nextInt(msg.length)];
    }

}

5.测试login-action1.form登录流程

通过网址“http://localhost:8080/SpringValues/login/login.form”请求Tomcat服务器:

访问请求的信息打印在控制台:

---方法一---
Tom
123
利用JDBC技术查找User信息
---方法二---
Tom
123
利用JDBC技术查找User信息
---方法三---
0,Tom,123,null
利用JDBC技术查找User信息
---方法四---
利用JDBC技术查找User信息
---方法五---
利用JDBC技术查找User信息
时间: 2024-10-15 05:01:58

Spring 向页面传值以及接受页面传过来的参数的方式的相关文章

在子页面传值给父页面

1.父页面加一个input框,用来接收子页面传的值 2.同时在子页面中进行如下操作传值 3.父页面中进行取值

MUI 页面刷新及页面传值问题

一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefresh", function (e) { location.reload(); }); (2).子页面B代码 var main = plus.webview.currentWebview().opener();//获取父页面A对象 var main = plus.webview.getWebviewB

StoryBoard 页面传值

如图新建一个viewController和DetailViewController VC 和DetailVC 联线的Idetnifier 设置为:GoDetailVC ViewController主要代码 - (IBAction)signInButtonTouched:(id)sender { [self performSegueWithIdentifier:@"GoDetailVC" sender:self]; } #pragma mark - prepare segue // A页

【转】Hbuilder MUI 页面刷新及页面传值问题

文章来源:http://www.111cn.net/sys/CentOS/67213.htm 一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefresh", function (e) { location.reload(); }); (2).子页面B代码 var main = plus.webview.currentWebview().opener()

Spring MVC 从 Controller向页面传值的方式

Spring MVC 从 Controller向页面传值的方式 在实际开发中,Controller取得数据(可以在Controller中处理,当然也可以来源于业务逻辑层),传给页面,常用的方式有:   1.利用ModelAndView页面传值 后台程序如下: @RequestMapping(value="/reciveData",method=RequestMethod.GET) public ModelAndView StartPage() { ModelMap map=new Mo

05-19Web端控件,页面传值

一.记忆Web端控件需要配合HTML 中的Form表单元素 1.Label 会被编译成span标签 属性: Text:文本内容 CssClass:CSS样式 Enlabled:是否可用 Visible:是否可见 2.Literal 空的,C#会把里面的Text内容直接作为网页代码传过去,比如Text里面写上<input type="button" />会直接在网页中插入一个按钮 属性: Text:内容 文本类 文本框      <input type="te

MVC[xml]页面传值

MVC 各种传值方式 ViewData传值.HomeController.cs Co de: public ActionResult Index(){      ViewData["Title" ] = "Home Page" ;     ViewData["Message" ] = "Welcome to ASP.NET MVC!" ;     return View();} Views/Home/Index.aspx Co

Struts2的简单使用(四)action向页面传值

在这里我要说一下在action中怎么向页面传值~ 在action中依然可以像以前在servlet里面一样,使用request.session.application向页面传送值,除此之外,action里面还有俩个独有的传值方式:ValueStack  ActionContext 一,先来说说这俩个独有的传值方式~ 1.ValueStack的特点(值栈): 1.把一个对象放到vs里面之后,我们从这个vs中是拿不到这个对象的,但是我们可以直接拿到这个对象里面的属性以及属性值. 2.从vs中拿值的时候

安卓---页面跳转---及页面传值

要实现从1个activity跳到另一个activity,这需要通过intent来实现.当然我们需要在Button按钮上绑定一个按钮按下的监听器,一旦该按钮监听到有按键按下,则通过intent将指定的第2个 activity触发,这样就完成了页面跳转的基本功能. 在工程中,每一个activity都对应一个xml文件,xml文件主要是控制各控件的位置和属性的. 1.先创建xml文件 activity_main.xml 1 <RelativeLayout xmlns:android="http: