Spring 向页面传值以及接受页面传过来的参数的方式
来源于:http://www.cnblogs.com/liuhongfeng/p/4802013.html
一、从页面接收参数
Spring MVC接收请求提交的参数值的几种方法:
- 使用HttpServletRequest获取。
- @RequestMapping("/login.do")
- public String login(HttpServletRequest request){
- String name = request.getParameter("name")
- String pass = request.getParameter("pass")
- }
- @RequestMapping("/login.do")
- 使用@RequestParam注解。
- @RequestMapping("/login.do")
- public String login(HttpServletRequest request,
- String name,
- @RequestParam("pass")String password) // 表单属性是pass,用变量password接收
- {
- syso(name);
- syso(password)
- }
- @RequestMapping("/login.do")
- 使用自动机制封装成实体参数。

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

5)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";
- }

6)自定义Map

- @ResponseBody
- @RequestMapping(value = "/updatestatus", method = RequestMethod.POST)
- public Map<String, Object> updateStatus(HttpServletRequest request) {
- Map<String, Object> result = new HashMap<String, Object>();
- String id = request.getParameter("id");
- SystemAdministrator sysadmin=systemAdminBiz.get(Integer.valueOf(id));
- sysadmin.setStatus(1);
- boolean flag = systemAdminBiz.update(sysadmin);
- result.put("status", flag);
- return result;
- }


- @RequestMapping(value = "/list", method = {RequestMethod.POST,RequestMethod.GET})
- public String queryAdministrator(HttpServletRequest request,ModelMap model) {
- Integer roleId = request.getParameter("roleListById") == null ? 0 : Integer.parseInt(request.getParameter("roleListById"));
- Map<String, Object> properties = new HashMap<String, Object>();
- if(roleId.intValue() > 0) {
- properties.put("role:=", roleId);
- model.put("roleId", roleId);
- }
- List<SystemAdministrator> administrator = systemAdminBiz.find(properties);
- List<SystemRole> systemRole = systemRoleBiz.getAll();
- model.put("administratorList", administrator);
- model.put("roleList", systemRole);
- return "sys_admin_list";
- }

7)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}
- com.souvc.dao.JdbcDataSource@1cb1a4e2
- com.mysql.jdbc.JDBC4Connection@3d04fc23
- 利用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信息

Spring 向页面传值以及接受页面传过来的参数的方式的更多相关文章
- nodeJS接受post传过来的参数
1.nodeJs接受Post传递的参数需要通过绑定两个事件来获取, querystring = require("querystring"); 1 app.post('/comm ...
- 微信小程序之页面传值(路由、页面栈、globalData、缓存)
1. 通过url带参数传递 1.1 固定参数传递 例如,从 list 页面到 detail 页面, 传递一个或多个固定值 list页面传值: <!--pages/list/list.js--&g ...
- springmvc使用数组接收页面商品列表批量删除传过来的参数,并完成批量删除的操作。
1.1 需求 在商品列表页面选中多个商品,然后删除. 1.2 需求分析 此功能要求商品列表页面中的每个商品前有一个checkbox,选中多个商品后点击删除按钮把商品id传给controller,根据商 ...
- 小程序navigateBack,子页面传值给父页面
子页面 let page = getCurrentPages(); let prevPage = page[page.length - 2]; prevPage.setData({ lxr :item ...
- struts2获取请求参数的三种方式及传递给JSP参数的方式
接上一篇文章 package test; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; impo ...
- C/S ASP.NET页面传值汇总
一. QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不 ...
- Hbuilder MUI 页面刷新及页面传值问题
一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefre ...
- uni-app开发经验分享一: 多页面传值的三种解决方法
开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家: 问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新 问题难点: 首先我们 ...
- [HTML]js实现页面跳转,页面A跳到另一个页面B.以及页面传值(中文)
要实现从一个页面A跳到另一个页面B,js实现就在A的js代码加跳转代码 JS跳转大概有以下几种方式: 第一种:(跳转到b.html)<script language="javascri ...
随机推荐
- 150929-拖延高于懒-HTML(End)
四天未更了,分别是因为Xshell和虚拟机链接不好,累,懒(好像是三天..) 就像我一直嗷嗷着要去学开出一样,5年都没有去......拖延症似乎比懒癌更可怕.慢慢的慢慢的,人长大了,小时候的一些东西才 ...
- 150923-碎觉要-PHP,Linux
今天懒懒的,还是每天都懒懒的. 早上下午都没有更.还好还有晚上更的想法和行动. 总结如下 1.PHP --wamp的一点配置问题,把根文件改为自己所要的文件夹.改动Apache的配置文件以及更改wam ...
- 【CSS】使用CSS选择器
CCS选择器的作用是找出某类元素.以便使我们使用style元素或者外部样式表对这类元素设置样式. 1.使用CSS基本选择器 有些选择器使用起来非常简单,我们把这部分选择器称为基本选择器(basic s ...
- 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]
题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...
- POJ3636Nested Dolls[DP LIS]
Nested Dolls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 8323 Accepted: 2262 Desc ...
- Unity(64bit)5.1 打开无故出现框框,纹理不见了
Unity(64bit)5.1打开无故出现框框,纹理不见了 原来是脚本有误影响了,U3D编辑器打开那一刹那出错
- [No00001A]天天换图,百词斩到底在折腾啥
- Java中正则Matcher类的matches()、lookAt()和find()的区别
在Matcher类中有matches.lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回 ...
- 封装第三方jquery插件
需要自己编写 directives 的情况通常是当你使用了第三方的 jQuery 插件.因为插件在 AngularJS 之外对表单值进行更改,并不能即时反应到 Model 中.例如我们用得比较多的 j ...
- Nuget自己打包引用的时候出现错误:Package is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package 1.0.1 supports: net (.NETFramework,Version=v0.0)
Nuget自己打包引用的时候出现错误:Package is not compatible with netcoreapp1.0 (.NETCoreApp,Version=v1.0). Package ...