来源于:http://www.cnblogs.com/liuhongfeng/p/4802013.html

一、从页面接收参数

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

  • 使用HttpServletRequest获取。

    1. @RequestMapping("/login.do")
    2. public String login(HttpServletRequest request){
    3. String name = request.getParameter("name")
    4. String pass = request.getParameter("pass")
    5. }

  

  

  • 使用@RequestParam注解。

    1. @RequestMapping("/login.do")
    2. public String login(HttpServletRequest request,
    3. String name,
    4. @RequestParam("pass")String password) // 表单属性是pass,用变量password接收
    5. {
    6. syso(name);
    7. syso(password)
    8. }
  • 使用自动机制封装成实体参数。
  1. <form action="login.do">
  2. 用户名:<input name="name"/>
  3. 密码:<input name="pass"/>
  4. <input type="submit" value="登陆">
  5. </form>
  6.  
  7. //封装的User类
  8. public class User{
  9. private String name;
  10. private String pass;
  11. }
  1. @RequestMapping("/login.do")
  2. public String login(User user)
  3. {
  4. syso(user.getName());
  5. syso(user.getPass());
  6. }

 二、向页面传值

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

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

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

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

2),使用ModelAndView对象

3),使用ModelMap对象

使用ModelMap参数对象示例:

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

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

4),使用@ModelAttribute注解

使用@ModelAttribute示例

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

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

  1. @RequestMapping("/login.do")
  2. public String login(@ModelAttribute("user") User user){
  3. //TODO
  4. return "success";
  5. }
  6.  
  7. @ModelAttribute("name")
  8. public String getName(){
  9. return name;
  10. }

5)Session存储:可以利用HttpServletReequest的getSession()方法

  1. @RequestMapping("/login.do")
  2. public String login(String name,String pwd
  3. ModelMap model,HttpServletRequest request){
  4. User user = serService.login(name,pwd);
  5. HttpSession session = request.getSession();
  6. session.setAttribute("user",user);
  7. model.addAttribute("user",user);
  8. return "success";
  9. }

6)自定义Map

  1. @ResponseBody
  2. @RequestMapping(value = "/updatestatus", method = RequestMethod.POST)
  3. public Map<String, Object> updateStatus(HttpServletRequest request) {
  4. Map<String, Object> result = new HashMap<String, Object>();
  5. String id = request.getParameter("id");
  6. SystemAdministrator sysadmin=systemAdminBiz.get(Integer.valueOf(id));
  7. sysadmin.setStatus(1);
  8. boolean flag = systemAdminBiz.update(sysadmin);
  9. result.put("status", flag);
  10. return result;
  11. }
  1. @RequestMapping(value = "/list", method = {RequestMethod.POST,RequestMethod.GET})
  2. public String queryAdministrator(HttpServletRequest request,ModelMap model) {
  3. Integer roleId = request.getParameter("roleListById") == null ? 0 : Integer.parseInt(request.getParameter("roleListById"));
  4. Map<String, Object> properties = new HashMap<String, Object>();
  5. if(roleId.intValue() > 0) {
  6. properties.put("role:=", roleId);
  7. model.put("roleId", roleId);
  8. }
  9. List<SystemAdministrator> administrator = systemAdminBiz.find(properties);
  10. List<SystemRole> systemRole = systemRoleBiz.getAll();
  11. model.put("administratorList", administrator);
  12. model.put("roleList", systemRole);
  13. return "sys_admin_list";
  14. }

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

1,使用RedirectView

2,使用redirect:前缀

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

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

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

三、实例讲解:

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

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

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

User类代码如下:

  1. package com.souvc.entity;
  2.  
  3. import java.io.Serializable;
  4.  
  5. public class User implements Serializable {
  6. private static final long serialVersionUID = -603439325380668432L;
  7. private int id;
  8. private String name;
  9. private String pwd;
  10. private String phone;
  11.  
  12. public User() {
  13. }
  14.  
  15. public User(int id, String name, String pwd, String phone) {
  16. this.id = id;
  17. this.name = name;
  18. this.pwd = pwd;
  19. this.phone = phone;
  20. }
  21.  
  22. public User(String name, String pwd, String phone) {
  23. super();
  24. this.name = name;
  25. this.pwd = pwd;
  26. this.phone = phone;
  27. }
  28.  
  29. public int getId() {
  30. return id;
  31. }
  32.  
  33. public void setId(int id) {
  34. this.id = id;
  35. }
  36.  
  37. public String getName() {
  38. return name;
  39. }
  40.  
  41. public void setName(String name) {
  42. this.name = name;
  43. }
  44.  
  45. public String getPwd() {
  46. return pwd;
  47. }
  48.  
  49. public void setPwd(String pwd) {
  50. this.pwd = pwd;
  51. }
  52.  
  53. public String getPhone() {
  54. return phone;
  55. }
  56.  
  57. public void setPhone(String phone) {
  58. this.phone = phone;
  59. }
  60.  
  61. @Override
  62. public int hashCode() {
  63. return id;
  64. }
  65.  
  66. @Override
  67. public boolean equals(Object obj) {
  68. if (this == obj)
  69. return true;
  70. if (obj == null)
  71. return false;
  72. if (obj instanceof User) {
  73. User o = (User) obj;
  74. return this.id == o.id;
  75. }
  76. return true;
  77. }
  78.  
  79. @Override
  80. public String toString() {
  81. return id + "," + name + "," + pwd + "," + phone;
  82. }
  83. }

UserDao接口代码如下:

  1. package com.souvc.dao;
  2.  
  3. import com.souvc.entity.User;
  4.  
  5. /**
  6. * 用户数据访问对象接口
  7. */
  8. public interface UserDao {
  9. /** 根据唯一用户名查询系统用户, 如果没有找到用户信息返回null */
  10. public User findByName(String name);
  11. // public User add(String name, String pwd, String phone);
  12. // public User find(int id);
  13. // public User delete(int id);
  14. // public void update(User user);
  15. }

UserService类代码如下:

  1. package com.souvc.service;
  2.  
  3. import java.io.Serializable;
  4.  
  5. import javax.annotation.Resource;
  6.  
  7. import org.springframework.stereotype.Service;
  8.  
  9. import com.souvc.dao.UserDao;
  10. import com.souvc.entity.User;
  11.  
  12. /** 业务层 注解 */
  13. @Service
  14. // 默认的Bean ID是 userService
  15. public class UserService implements Serializable {
  16. private static final long serialVersionUID = 7360372166489952236L;
  17. private UserDao userDao;
  18.  
  19. // @Resource //自动匹配userDao对象并注入
  20. @Resource(name = "userDao")
  21. public void setUserDao(UserDao userDao) {
  22. this.userDao = userDao;//
  23. }
  24.  
  25. public UserDao getUserDao() {
  26. return userDao;
  27. }
  28.  
  29. /** 登录系统功能 */
  30. public User login(String name, String pwd) throws NameOrPwdException,
  31. NullParamException {
  32. if (name == null || name.equals("") || pwd == null || pwd.equals("")) {
  33. throw new NullParamException("登录参数不能为空!");
  34. }
  35. User user = userDao.findByName(name);
  36. if (user != null && pwd.equals(user.getPwd())) {
  37. return user;
  38. }
  39. throw new NameOrPwdException("用户名或者密码错误");
  40. }
  41. }

NameOrPwdException类代码如下:

  1. package com.souvc.service;
  2.  
  3. /** 用户名或者密码错误 */
  4. public class NameOrPwdException extends Exception {
  5. public NameOrPwdException() {
  6. }
  7.  
  8. public NameOrPwdException(String message) {
  9. super(message);
  10. }
  11.  
  12. public NameOrPwdException(Throwable cause) {
  13. super(cause);
  14. }
  15.  
  16. public NameOrPwdException(String message, Throwable cause) {
  17. super(message, cause);
  18. }
  19. }

NullParamException类代码如下:

  1. package com.souvc.service;
  2.  
  3. /** 参数为空 */
  4. public class NullParamException extends Exception {
  5. public NullParamException() {
  6. }
  7.  
  8. public NullParamException(String message) {
  9. super(message);
  10. }
  11.  
  12. public NullParamException(Throwable cause) {
  13. super(cause);
  14. }
  15.  
  16. public NullParamException(String message, Throwable cause) {
  17. super(message, cause);
  18. }
  19. }

JdbcDataSource类代码如下:

  1. package com.souvc.dao;
  2.  
  3. import java.io.Serializable;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.SQLException;
  7. import org.springframework.beans.factory.annotation.Value;
  8. import org.springframework.stereotype.Component;
  9.  
  10. /** 组件注解 */
  11. @Component
  12. public class JdbcDataSource implements Serializable {
  13.  
  14. private static final long serialVersionUID = -8925981939329398101L;
  15.  
  16. private String driver;
  17.  
  18. @Value("#{jdbcProps.url}")
  19. private String url;
  20.  
  21. @Value("#{jdbcProps.user}")
  22. private String user;
  23.  
  24. @Value("#{jdbcProps.pwd}")
  25. private String pwd;
  26.  
  27. public String getDriver() {
  28. return driver;
  29. }
  30.  
  31. /** 必须使用Bean属性输入, 否则不能进行JDBC Driver注册 */
  32. @Value("#{jdbcProps.driver}")
  33. public void setDriver(String driver) {
  34. try {
  35. // 注册数据库驱动
  36. Class.forName(driver);
  37. this.driver = driver;
  38. } catch (Exception e) {
  39. throw new RuntimeException(e);
  40. }
  41. }
  42.  
  43. public String getUrl() {
  44. return url;
  45. }
  46.  
  47. public void setUrl(String url) {
  48. this.url = url;
  49. }
  50.  
  51. public String getUser() {
  52. return user;
  53. }
  54.  
  55. public void setUser(String user) {
  56. this.user = user;
  57. }
  58.  
  59. public String getPwd() {
  60. return pwd;
  61. }
  62.  
  63. public void setPwd(String pwd) {
  64. this.pwd = pwd;
  65. }
  66.  
  67. public Connection getConnection() throws SQLException {
  68. Connection conn = DriverManager.getConnection(url, user, pwd);
  69. return conn;
  70. }
  71.  
  72. public void close(Connection conn) {
  73. if (conn != null) {
  74. try {
  75. conn.close();
  76. } catch (SQLException e) {
  77. e.printStackTrace();
  78. }
  79. }
  80. }
  81. }

MysqlUserDao类代码如下:

  1. package com.souvc.dao;
  2.  
  3. import java.io.Serializable;
  4. import java.sql.Connection;
  5. import java.sql.PreparedStatement;
  6. import java.sql.ResultSet;
  7. import java.sql.SQLException;
  8.  
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import org.springframework.beans.factory.annotation.Qualifier;
  11. import org.springframework.stereotype.Repository;
  12.  
  13. import com.souvc.entity.User;
  14.  
  15. /** 持久层 注解 */
  16. @Repository("userDao")
  17. // 指定特定的Bean ID 方便setUserDao注入
  18. public class MysqlUserDao implements UserDao, Serializable {
  19. private static final long serialVersionUID = 7385842613248394287L;
  20. private JdbcDataSource dataSource;
  21.  
  22. public MysqlUserDao() {
  23. }
  24.  
  25. /** 创建 MysqlUserDAO 对象必须依赖于JDBCDataSource实例 */
  26. public MysqlUserDao(JdbcDataSource dataSource) {
  27. this.dataSource = dataSource;
  28. }
  29.  
  30. @Autowired
  31. // 按照类型自动装配
  32. public void setDataSource(@Qualifier("jdbcDataSource")
  33. JdbcDataSource dataSource) {
  34. this.dataSource = dataSource;
  35. }
  36.  
  37. public JdbcDataSource getDataSource() {
  38. return dataSource;
  39. }
  40.  
  41. /** 根据唯一用户名查询系统用户, 如果没有找到用户信息返回null */
  42. public User findByName(String name) {
  43. System.out.println("利用JDBC技术查找User信息");
  44. String sql = "select id, name, pwd, phone from users where name=?";
  45. Connection conn = null;
  46. try {
  47. conn = dataSource.getConnection();
  48. PreparedStatement ps = conn.prepareStatement(sql);
  49. ps.setString(1, name);
  50. ResultSet rs = ps.executeQuery();
  51. User user = null;
  52. while (rs.next()) {
  53. user = new User();
  54. user.setId(rs.getInt("id"));
  55. user.setName(rs.getString("name"));
  56. user.setPwd(rs.getString("pwd"));
  57. user.setPhone(rs.getString("phone"));
  58. }
  59. rs.close();
  60. ps.close();
  61. return user;
  62. } catch (SQLException e) {
  63. e.printStackTrace();
  64. throw new RuntimeException(e);
  65. } finally {
  66. dataSource.close(conn);
  67. }
  68. }
  69. }

db.properties文件内容如下:

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

spring-mvc.xml文件代码如下:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <beans xmlns="http://www.springframework.org/schema/beans"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xmlns:context="http://www.springframework.org/schema/context"
  5. xmlns:jdbc="http://www.springframework.org/schema/jdbc"
  6. xmlns:jee="http://www.springframework.org/schema/jee"
  7. xmlns:tx="http://www.springframework.org/schema/tx"
  8. xmlns:jpa="http://www.springframework.org/schema/data/jpa"
  9. xmlns:util="http://www.springframework.org/schema/util"
  10. xmlns:mvc="http://www.springframework.org/schema/mvc"
  11. xsi:schemaLocation="
  12. http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
  13. http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
  14. http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsd
  15. http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsd
  16. http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd
  17. http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
  18. http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsd
  19. http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.2.xsd">
  20.  
  21. <util:properties id="jdbcProps" location="classpath:db.properties" />
  22.  
  23. <context:component-scan base-package="com.souvc" />
  24. <!-- 视图处理 -->
  25. <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
  26. <property name="prefix" value="/WEB-INF/jsp/"></property>
  27. <property name="suffix" value=".jsp"></property>
  28. </bean>
  29. </beans>

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

  1. DROP TABLE users;
  2. CREATE TABLE USERS
  3. (
  4. ID DOUBLE(7, 0) ,
  5. NAME VARCHAR(50) ,
  6. PWD VARCHAR(50),
  7. PHONE VARCHAR(50) ,
  8. PRIMARY KEY (id)
  9. );
  10.  
  11. INSERT INTO Users (id, NAME, pwd, phone) VALUES (1, 'Tom', '123', '110');
  12. INSERT INTO Users (id, NAME, pwd, phone) VALUES (2, 'Jerry', 'abc', '119');
  13. INSERT INTO Users (id, NAME, pwd, phone) VALUES (3, 'Andy', '456', '112');

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

  1. package com.souvc.test;
  2.  
  3. import java.util.Properties;
  4.  
  5. import org.junit.Test;
  6. import org.springframework.context.ApplicationContext;
  7. import org.springframework.context.support.ClassPathXmlApplicationContext;
  8.  
  9. import com.souvc.dao.JdbcDataSource;
  10. import com.souvc.entity.User;
  11. import com.souvc.service.UserService;
  12.  
  13. public class TestCase {
  14.  
  15. @Test
  16. public void testUserService() throws Exception {
  17. String cfg = "spring-mvc.xml";
  18. ApplicationContext ac = new ClassPathXmlApplicationContext(cfg);
  19. Properties obj = ac.getBean("jdbcProps", Properties.class);
  20. JdbcDataSource ds = ac.getBean("jdbcDataSource", JdbcDataSource.class);
  21. System.out.println(obj);
  22. System.out.println(ds);
  23. System.out.println(ds.getConnection());
  24. UserService service = ac.getBean("userService", UserService.class);
  25. User user = service.login("Tom", "123");
  26. System.out.println(user);
  27. }
  28. }

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

  1. {user=root, url=jdbc:mysql://localhost:3306/souvc, driver=com.mysql.jdbc.Driver, pwd=123456}
  2. com.souvc.dao.JdbcDataSource@1cb1a4e2
  3. com.mysql.jdbc.JDBC4Connection@3d04fc23
  4. 利用JDBC技术查找User信息
  5. 1,Tom,123,110

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

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

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  5. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  6. <welcome-file-list>
  7. <welcome-file>index.jsp</welcome-file>
  8. </welcome-file-list>
  9.  
  10. <servlet>
  11. <servlet-name>springmvc</servlet-name>
  12. <servlet-class>
  13. org.springframework.web.servlet.DispatcherServlet
  14. </servlet-class>
  15. <init-param>
  16. <param-name>contextConfigLocation</param-name>
  17. <param-value>classpath:spring-mvc.xml</param-value>
  18. </init-param>
  19. <load-on-startup>1</load-on-startup>
  20. </servlet>
  21. <servlet-mapping>
  22. <servlet-name>springmvc</servlet-name>
  23. <url-pattern>*.form</url-pattern>
  24. </servlet-mapping>
  25.  
  26. </web-app>

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

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

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

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

  1. <%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
  2. <!DOCTYPE HTML>
  3. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
  4. <c:url var="base" value="/"></c:url>
  5. <html>
  6. <head>
  7. <title>Login Form</title>
  8. <link rel="stylesheet" type="text/css" href="${base}styles.css">
  9. </head>
  10. <body>
  11. <h6>${message}</h6>
  12. <form method="post" action="${base}login/login-action1.form">
  13. <div>
  14. <h2>登录 login-action1.form</h2>
  15. <p><label>用户</label><input type="text" name="name"></p>
  16. <p><label>密码</label><input type="password" name="pwd"></p>
  17. <h3><input type="submit" value="登录"></h3>
  18. </div>
  19. </form>
  20.  
  21. <form method="post" action="${base}login/login-action2.form">
  22. <div>
  23. <h2>登录 login-action2.form</h2>
  24. <p><label>用户</label><input type="text" name="name"></p>
  25. <p><label>密码</label><input type="password" name="pwd"></p>
  26. <h3><input type="submit" value="登录"></h3>
  27. </div>
  28. </form>
  29.  
  30. <form method="post" action="${base}login/login-action3.form">
  31. <div>
  32. <h2>登录 login-action3.form</h2>
  33. <p><label>用户</label><input type="text" name="name"></p>
  34. <p><label>密码</label><input type="password" name="pwd"></p>
  35. <h3><input type="submit" value="登录"></h3>
  36. </div>
  37. </form>
  38.  
  39. <form method="post" action="${base}login/login-action4.form">
  40. <div>
  41. <h2>登录 login-action4.form</h2>
  42. <p><label>用户</label><input type="text" name="name"></p>
  43. <p><label>密码</label><input type="password" name="pwd"></p>
  44. <h3><input type="submit" value="登录"></h3>
  45. </div>
  46. </form>
  47.  
  48. <form method="post" action="${base}login/login-action5.form">
  49. <div>
  50. <h2>登录 login-action5.form</h2>
  51. <p><label>用户</label><input type="text" name="name"></p>
  52. <p><label>密码</label><input type="password" name="pwd"></p>
  53. <h3><input type="submit" value="登录"></h3>
  54. </div>
  55. </form>
  56.  
  57. <form method="post" action="${base}login/login-action6.form">
  58. <div>
  59. <h2>登录 login-action6.form</h2>
  60. <p><label>用户</label><input type="text" name="name"></p>
  61. <p><label>密码</label><input type="password" name="pwd"></p>
  62. <h3><input type="submit" value="登录"></h3>
  63. </div>
  64. </form>
  65.  
  66. </body>
  67. </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文件代码如下所示:

  1. * {
  2. margin: 0;
  3. padding: 0;
  4. }
  5.  
  6. h6 {
  7. text-align: center;
  8. color: red;
  9. padding: 10px;
  10. font-size: 14px;
  11. }
  12.  
  13. form {
  14. padding: 10px;
  15. float: left;
  16. }
  17.  
  18. form div {
  19. border: 1px gray solid;
  20. width: 320px;
  21. padding: 8px;
  22. }
  23.  
  24. form p input {
  25. width: 180px
  26. }
  27.  
  28. form h2 input {
  29. text-align: center;
  30. }
  31.  
  32. form h2 {
  33. background: black;
  34. color: white;
  35. padding: 4px;
  36. }
  37.  
  38. form p {
  39. background: #ddd;
  40. padding: 4px 8px 0 8px;
  41. }
  42.  
  43. form h3 {
  44. background: #ddd;
  45. padding: 8px;
  46. }

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

  1. <%@ page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
  2. <!DOCTYPE HTML>
  3. <%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  4. <c:url var="base" value="/"></c:url>
  5. <html>
  6. <head>
  7. <title>Success</title>
  8. <link rel="stylesheet" type="text/css" href="${base}styles.css">
  9. </head>
  10. <body>
  11. <h6>
  12. ${user.name}登录成功!
  13. </h6>
  14. </body>
  15. </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类代码如下所示:

  1. package com.souvc.controller;
  2.  
  3. import java.util.HashMap;
  4. import java.util.Map;
  5. import java.util.Random;
  6.  
  7. import javax.annotation.Resource;
  8. import javax.servlet.http.HttpServletRequest;
  9.  
  10. import org.springframework.stereotype.Controller;
  11. import org.springframework.ui.ModelMap;
  12. import org.springframework.web.bind.annotation.ModelAttribute;
  13. import org.springframework.web.bind.annotation.RequestMapping;
  14. import org.springframework.web.bind.annotation.RequestParam;
  15. import org.springframework.web.servlet.ModelAndView;
  16.  
  17. import com.souvc.entity.User;
  18. import com.souvc.service.NameOrPwdException;
  19. import com.souvc.service.NullParamException;
  20. import com.souvc.service.UserService;
  21.  
  22. @Controller
  23. //@SessionAttributes("user")
  24. @RequestMapping("/login")
  25. public class LoginController {
  26.  
  27. @Resource
  28. // 请求Spring注入资源 userService
  29. private UserService userService;
  30.  
  31. @RequestMapping("/login.form")
  32. public String loginForm() {
  33. // 可以向表单界面传递一些参数
  34. return "login-form";
  35. }
  36.  
  37. @RequestMapping("/login-action1.form")
  38. // Spring MVC 自动参数注入HttpServletRequest
  39. public String checkLogin1(HttpServletRequest req) {
  40. System.out.println("---方法一---");
  41. // 优点直接简洁,缺点需要自己处理数据类型转换, 不支持文件上传功能
  42. String name = req.getParameter("name");
  43. String pwd = req.getParameter("pwd");
  44. System.out.println(name);
  45. System.out.println(pwd);
  46. try {
  47. User user = userService.login(name, pwd);
  48. // 登录成功将登录用户信息保存到当前会话中
  49. req.getSession().setAttribute("user", user);
  50. return "success";
  51. } catch (NameOrPwdException e) {
  52. e.printStackTrace();
  53. req.setAttribute("message", e.getMessage());
  54. return "login-form";
  55. } catch (NullParamException e) {
  56. e.printStackTrace();
  57. req.setAttribute("message", e.getMessage());
  58. return "redirect:login.form";
  59. } catch (RuntimeException e) {
  60. e.printStackTrace();
  61. req.setAttribute("message", e.getMessage());
  62. return "error";
  63. }
  64. }
  65.  
  66. @RequestMapping("/login-action2.form")
  67. public String checkLogin2(String name, @RequestParam("pwd")
  68. String password, // 映射表单属性不同的参数
  69. HttpServletRequest req) {
  70. System.out.println("---方法二---");
  71. // 优点, 自动转换数据类型, 缺点可能出现数据类型转换异常
  72. System.out.println(name);
  73. System.out.println(password);
  74. try {
  75. User user = userService.login(name, password);
  76. // 登录成功将登录用户信息保存到当前会话中
  77. req.getSession().setAttribute("user", user);
  78. return "success";
  79. } catch (NameOrPwdException e) {
  80. e.printStackTrace();
  81. req.setAttribute("message", e.getMessage());
  82. return "login-form";
  83. } catch (NullParamException e) {
  84. e.printStackTrace();
  85. req.setAttribute("message", e.getMessage());
  86. return "login-form";
  87. } catch (RuntimeException e) {
  88. e.printStackTrace();
  89. req.setAttribute("message", e.getMessage());
  90. return "error";
  91. }
  92. }
  93.  
  94. @RequestMapping("/login-action3.form")
  95. public String checkLogin3(User user, HttpServletRequest req) {
  96. System.out.println("---方法三---");
  97. // 自动填充到bean对象
  98. System.out.println(user);
  99. try {
  100. user = userService.login(user.getName(), user.getPwd());
  101. // 登录成功将登录用户信息保存到当前会话中
  102. req.getSession().setAttribute("user", user);
  103. return "success";
  104. } catch (NameOrPwdException e) {
  105. e.printStackTrace();
  106. req.setAttribute("message", e.getMessage());
  107. return "login-form";
  108. } catch (NullParamException e) {
  109. e.printStackTrace();
  110. req.setAttribute("message", e.getMessage());
  111. return "login-form";
  112. } catch (RuntimeException e) {
  113. e.printStackTrace();
  114. req.setAttribute("message", e.getMessage());
  115. return "error";
  116. }
  117. }
  118.  
  119. @RequestMapping("/login-action4.form")
  120. public ModelAndView checkLogin4(String name, String pwd,
  121. HttpServletRequest req) {
  122. System.out.println("---方法四---");
  123. Map<String, Object> data = new HashMap<String, Object>();
  124. try {
  125. User user = userService.login(name, pwd);
  126. // 登录成功将登录用户信息保存到当前会话中
  127. req.getSession().setAttribute("user", user);
  128. return new ModelAndView("success", data);
  129. } catch (NameOrPwdException e) {
  130. e.printStackTrace();
  131. data.put("message", e.getMessage());
  132. return new ModelAndView("login-form", data);
  133. } catch (NullParamException e) {
  134. e.printStackTrace();
  135. data.put("message", e.getMessage());
  136. return new ModelAndView("login-form", data);
  137. } catch (RuntimeException e) {
  138. e.printStackTrace();
  139. data.put("message", e.getMessage());
  140. return new ModelAndView("error", data);
  141. }
  142. }
  143.  
  144. @RequestMapping("/login-action5.form")
  145. public String checkLogin5(String name, String pwd, ModelMap model,
  146. HttpServletRequest req) {
  147. System.out.println("---方法五---");
  148. try {
  149. User user = userService.login(name, pwd);
  150. // 登录成功将登录用户信息保存到当前会话中
  151. req.getSession().setAttribute("user", user);
  152. return "success";
  153. } catch (NameOrPwdException e) {
  154. e.printStackTrace();
  155. model.addAttribute("message", e.getMessage());
  156. return "login-form";
  157. } catch (NullParamException e) {
  158. e.printStackTrace();
  159. model.addAttribute("message", e.getMessage());
  160. return "login-form";
  161. } catch (RuntimeException e) {
  162. e.printStackTrace();
  163. model.addAttribute("message", e.getMessage());
  164. return "error";
  165. }
  166. }
  167.  
  168. @RequestMapping("/login-action6.form")
  169. public String checkLogin6(
  170. @ModelAttribute("name") String name,
  171. @ModelAttribute("password") String pwd,
  172. ModelMap model, HttpServletRequest req){
  173. System.out.println("---方法六---");
  174. try {
  175. User user = userService.login(name, pwd);
  176. // 登录成功将登录用户信息保存到当前会话中
  177. req.getSession().setAttribute("user", user);
  178. return "success";
  179. } catch (NameOrPwdException e) {
  180. e.printStackTrace();
  181. model.addAttribute("message", e.getMessage());
  182. return "login-form";
  183. } catch (NullParamException e) {
  184. e.printStackTrace();
  185. model.addAttribute("message", e.getMessage());
  186. return "login-form";
  187. } catch (RuntimeException e) {
  188. e.printStackTrace();
  189. model.addAttribute("message", e.getMessage());
  190. return "error";
  191. }
  192. }
  193.  
  194. @RequestMapping("/login-action7.form")
  195. public String checkLogin7(ModelMap model, HttpServletRequest req) {
  196. System.out.println("---方法七---");
  197. String name1=req.getParameter("name");
  198. String pwd1=req.getParameter("pwd");
  199. try {
  200. User user = userService.login(name1, pwd1);
  201. // 登录成功将登录用户信息保存到当前会话中
  202. req.getSession().setAttribute("user", user);
  203. return "success";
  204. } catch (NameOrPwdException e) {
  205. e.printStackTrace();
  206. model.addAttribute("message", e.getMessage());
  207. return "redirect:login";
  208. } catch (NullParamException e) {
  209. e.printStackTrace();
  210. model.addAttribute("message", e.getMessage());
  211. return "redirect:login";
  212. } catch (RuntimeException e) {
  213. e.printStackTrace();
  214. model.addAttribute("message", e.getMessage());
  215. return "error";
  216. }
  217. }
  218.  
  219. private String[] msg = { "再来一次", "下次就对了", "没关系还有机会" };
  220.  
  221. @ModelAttribute("next")
  222. public String getNext() {
  223. Random r = new Random();
  224. return msg[r.nextInt(msg.length)];
  225. }
  226.  
  227. }

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

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

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

  1. ---方法一---
  2. Tom
  3. 123
  4. 利用JDBC技术查找User信息
  5. ---方法二---
  6. Tom
  7. 123
  8. 利用JDBC技术查找User信息
  9. ---方法三---
  10. 0,Tom,123,null
  11. 利用JDBC技术查找User信息
  12. ---方法四---
  13. 利用JDBC技术查找User信息
  14. ---方法五---
  15. 利用JDBC技术查找User信息

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

  1. nodeJS接受post传过来的参数

    1.nodeJs接受Post传递的参数需要通过绑定两个事件来获取, querystring = require("querystring");  1 app.post('/comm ...

  2. 微信小程序之页面传值(路由、页面栈、globalData、缓存)

    1. 通过url带参数传递 1.1 固定参数传递 例如,从 list 页面到 detail 页面, 传递一个或多个固定值 list页面传值: <!--pages/list/list.js--&g ...

  3. springmvc使用数组接收页面商品列表批量删除传过来的参数,并完成批量删除的操作。

    1.1 需求 在商品列表页面选中多个商品,然后删除. 1.2 需求分析 此功能要求商品列表页面中的每个商品前有一个checkbox,选中多个商品后点击删除按钮把商品id传给controller,根据商 ...

  4. 小程序navigateBack,子页面传值给父页面

    子页面 let page = getCurrentPages(); let prevPage = page[page.length - 2]; prevPage.setData({ lxr :item ...

  5. struts2获取请求参数的三种方式及传递给JSP参数的方式

    接上一篇文章 package test; import com.opensymphony.xwork2.ActionSupport; import javax.servlet.http.*; impo ...

  6. C/S ASP.NET页面传值汇总

    一. QueryString是一种非常简单的传值方式,他可以将传送的值显示在浏览器的地址栏中.如果是传递一个或多个安全性要求不高或是结构简单的数值时,可以使用这个方法.但是对于传递数组或对象的话,就不 ...

  7. Hbuilder MUI 页面刷新及页面传值问题

    一.页面刷新问题 1.父页面A跳转到子页面B,B页面修改数据后再跳回A页面,刷新A页面数据 (1).父页面A代码 window.addEventListener("pageflowrefre ...

  8. uni-app开发经验分享一: 多页面传值的三种解决方法

    开发了一年的uni-app,在这里总结一些uni-app开发中的问题,提供几个解决方法,分享给大家: 问题描述:一个主页面,需要联通一到两个子页面,子页面传值到主页面,主页面更新 问题难点: 首先我们 ...

  9. [HTML]js实现页面跳转,页面A跳到另一个页面B.以及页面传值(中文)

    要实现从一个页面A跳到另一个页面B,js实现就在A的js代码加跳转代码 JS跳转大概有以下几种方式: 第一种:(跳转到b.html)<script language="javascri ...

随机推荐

  1. 150929-拖延高于懒-HTML(End)

    四天未更了,分别是因为Xshell和虚拟机链接不好,累,懒(好像是三天..) 就像我一直嗷嗷着要去学开出一样,5年都没有去......拖延症似乎比懒癌更可怕.慢慢的慢慢的,人长大了,小时候的一些东西才 ...

  2. 150923-碎觉要-PHP,Linux

    今天懒懒的,还是每天都懒懒的. 早上下午都没有更.还好还有晚上更的想法和行动. 总结如下 1.PHP --wamp的一点配置问题,把根文件改为自己所要的文件夹.改动Apache的配置文件以及更改wam ...

  3. 【CSS】使用CSS选择器

    CCS选择器的作用是找出某类元素.以便使我们使用style元素或者外部样式表对这类元素设置样式. 1.使用CSS基本选择器 有些选择器使用起来非常简单,我们把这部分选择器称为基本选择器(basic s ...

  4. 洛谷⑨月月赛Round2 P3393逃离僵尸岛[最短路]

    题目描述 小a住的国家被僵尸侵略了!小a打算逃离到该国唯一的国际空港逃出这个国家. 该国有N个城市,城市之间有道路相连.一共有M条双向道路.保证没有自环和重边. K个城市已经被僵尸控制了,如果贸然闯入 ...

  5. POJ3636Nested Dolls[DP LIS]

    Nested Dolls Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 8323   Accepted: 2262 Desc ...

  6. Unity(64bit)5.1 打开无故出现框框,纹理不见了

    Unity(64bit)5.1打开无故出现框框,纹理不见了 原来是脚本有误影响了,U3D编辑器打开那一刹那出错

  7. [No00001A]天天换图,百词斩到底在折腾啥

  8. Java中正则Matcher类的matches()、lookAt()和find()的区别

    在Matcher类中有matches.lookingAt和find都是匹配目标的方法,但容易混淆,整理它们的区别如下: matches:整个匹配,只有整个字符序列完全匹配成功,才返回True,否则返回 ...

  9. 封装第三方jquery插件

    需要自己编写 directives 的情况通常是当你使用了第三方的 jQuery 插件.因为插件在 AngularJS 之外对表单值进行更改,并不能即时反应到 Model 中.例如我们用得比较多的 j ...

  10. 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 ...