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

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;}@Overridepublic int hashCode() {return id;}@Overridepublic 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;}@Overridepublic 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.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsdhttp://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.2.xsdhttp://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsdhttp://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsdhttp://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.2.xsdhttp://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 {@Testpublic 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注入资源 userServiceprivate UserService userService;@RequestMapping("/login.form")public String loginForm() {// 可以向表单界面传递一些参数return "login-form";}@RequestMapping("/login-action1.form")// Spring MVC 自动参数注入HttpServletRequestpublic 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信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/195235.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

5-20V升降压转12V2A自动升降压芯片:AH6971高效、稳定、安全

5-20V升降压转12V2A自动升降压芯片&#xff1a;高效、稳定、安全 随着科技的飞速发展&#xff0c;各种电子设备对电源的要求越来越高。一款高效、稳定、安全的电源芯片成为众多工程师亟待解决的问题。今天&#xff0c;我们就来为大家介绍一款5-20V升降压转12V2A的自动升降压芯…

GPU深度学习性能的三驾马车:Tensor Core、内存带宽与内存层次结构

编者按&#xff1a;近年来&#xff0c;深度学习应用日益广泛&#xff0c;其需求也在快速增长。那么&#xff0c;我们该如何选择合适的 GPU 来获得最优的训练和推理性能呢&#xff1f; 今天&#xff0c;我们为大家带来的这篇文章&#xff0c;作者的核心观点是&#xff1a;Tensor…

NET Core迁移前工作

前段时间迁移.NET Core做了大量的试水和评估&#xff0c;今天整理一下分享给大家。大致有以下几个部分&#xff1a; 1. .NET Core的由来 2. 为什么要迁移.NET Core 3. .NET Core3.X主要特性 4. .NET Standard和.NET Core 5. .NET Core Roadmap&版本选择 接下来&#…

Linux4.8、环境变量续

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 前言 如果对环境变量没有基本的理解&#xff0c;那么建议先看完这篇文章&#xff1a;环境变量https://blog.csdn.net/m0_74824254/article/details/134661113?spm1001.2014.3001.5501 环境变量与本地变量区别 使用export设…

自动化测试的成本高效果差,那么自动化测试的意义在哪呢?

有人问&#xff1a;自动化测试的成本高效果差&#xff0c;那么自动化测试的意义在哪呢&#xff1f; 我觉得这个问题带有很强的误导性&#xff0c;是典型的逻辑陷阱之一。“自动化测试的成本高效果差”是真的吗&#xff1f;当然不是。而且我始终相信&#xff0c;回答问题的最…

COMP4121Advanced Algorithms

COMP4121Advanced Algorithms WeChat&#xff1a;yj4399_ Sina Visitor System

【Linux】 OpenSSH_9.3p1 升级到 OpenSSH_9.5p1(亲测无问题,建议收藏)

&#x1f468;‍&#x1f393;博主简介 &#x1f3c5;云计算领域优质创作者   &#x1f3c5;华为云开发者社区专家博主   &#x1f3c5;阿里云开发者社区专家博主 &#x1f48a;交流社区&#xff1a;运维交流社区 欢迎大家的加入&#xff01; &#x1f40b; 希望大家多多支…

数据结构之二叉树及面试题讲解

&#x1f495;"从前种种譬如昨日死&#xff1b;从后种种譬如今日生"&#x1f495; 作者&#xff1a;Mylvzi 文章主要内容&#xff1a;数据结构之二叉树及面试题讲解 一.概念 1.树的定义 树是一种非线性的数据结构&#xff0c;是由n个结点组成的一种非线性集合&…

Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同?

面试官&#xff1a;Vue3.0 所采用的 Composition Api 与 Vue2.x 使用的 Options Api 有什么不同&#xff1f; 开始之前 Composition API 可以说是Vue3的最大特点&#xff0c;那么为什么要推出Composition Api&#xff0c;解决了什么问题&#xff1f; 通常使用Vue2开发的项目&…

交流插座电器漏电断路器的低功耗控制芯片D4140,内置桥式整流器漏电灵敏度可调,采用SOP8和DIP8 的封装形式

D4140 是一种用于交流插座电器漏电断路器的低功耗控制器。这些设备可以检测到接地的危险电流路径&#xff0c;例如设备掉进水中。在发生有害或致命的电击之前&#xff0c;断路器会断开线路。内置有整流桥&#xff0c;齐纳管稳压器&#xff0c;运算放大器&#xff0c;电流基准&a…

论文阅读——Loss odyssey in medical image segmentation

Loss odyssey in medical image segmentation github&#xff1a;https://github.com/JunMa11/SegLossOdyssey 这篇文章回顾了医学图像分割中的20种不同的损失函数&#xff0c;旨在回答&#xff1a;对于医学图像分割任务&#xff0c;我们应该选择哪种损失函数&#xff1f; 首…

倾斜摄影三维模型的根节点合并的优势分析

倾斜摄影三维模型的根节点合并的优势分析 根节点合并是倾斜摄影三维模型处理中的一项重要技术&#xff0c;它具有许多优势&#xff0c;可以显著提升模型数据的处理效率和渲染性能。在本文中&#xff0c;我们将对倾斜摄影三维模型的根节点合并的优势进行详细分析。 1、数据大小…

计算机毕业设计|基于SpringBoot+SSM+MyBatis框架的迷你仿天猫商城购物系统设计与实现

计算机毕业设计|基于SpringBootMyBatis框架的仿天猫商城购物系统设计与实现 迷你仿天猫商城是一个基于SpringBootSSMMyBatis框架的综合性B2C电商平台&#xff0c;需求设计主要参考天猫商城的购物流程&#xff1a;用户从注册开始&#xff0c;到完成登录&#xff0c;浏览商品&am…

家用小型洗衣机哪款性价比高?内衣洗衣机品牌推荐

近日&#xff0c;国内著名的电子商务平台公布了“内衣洗衣机产业趋势”的研究报告。该报告指出&#xff0c;由于消费者对生活质量的要求越来越高&#xff0c;内衣洗衣机的行业也有了长足的发展&#xff0c;特别是在今年以来&#xff0c;内衣洗衣机的销售额同比上涨了830%&#…

汽车音响静音检测电路芯片D3703F,6V~16V SOP8封装

D3703F 是一块汽车音响静 音检测电路。用于音 响系统检测在放音或快进/退时进行静音检测&#xff0c;电压范围: 6V~16V&#xff0c;信号检测和静音时间可通过外围电阻 、电容来改变。D3703F采用SOP8的封装形式封装 主要特点: 快进/退时也可进行静音 检测 信号检测…

小黄鸟(HTTPCanary)安装及Android高版本CA证书配置

小黄鸟&#xff08;HTTPCanary&#xff09;安装及Android高版本CA证书配置 HTTPCanary及CA证书安装 1.HTTPCanary下载2.导出CA证书3.安装CA证书 1.HTTPCanary下载 从下面链接下载安装HTTPCanary 链接: https://xiao6ming6.lanzouq.com/iQcB902w15pg 密码:4wby 2.导出CA证书 1.…

关于this和构造器的理解

1.类中的this关键字表示当前对象的引用。它可以被用于解决变量名冲突问题&#xff0c;或者在一个方法中调用类的另一个方法。如果在方法中没有明确指定要使用哪个变量&#xff0c;那么编译器就会默认使用this关键字来表示当前对象。 下面是一个输出this关键字的示例代码&#…

信息泄露威胁:日本科技巨头遭网络攻击,超40万条数据悬崖边缘!

11月27日下午&#xff0c;日本最主要通讯应用程序Line的运营商、日本LY公司发布公告称&#xff0c;有攻击者通过附属公司的NAVER Cloud系统访问了其内部服务器&#xff0c;可能泄露了数十万条包含用户、员工和业务合作伙伴在内的数据。 这一数据泄露事件发生在10月9日&#xff…

关于你对 Zookeeper 的理解

看看普通人和高手是如何回答这个问题的&#xff1f; 普通人 Zookeeper 是一种开放源码的分布式应用程序协调服务 是一个分布式的小文件存储系统 一般对开发者屏蔽分布式应用开发过过程种的底层细节 用来解决分布式集群中应用系统的一致性问题 高手 对于 Zookeeper 的理解…

并发编程笔记

1、前言 这篇笔记是我花的20多天跟着⿊⻢的并发编程学习做的笔记&#xff0c;地址是b站 ⿊⻢ 并发编程 &#xff0c;也是我第⼀次 学习并发 编程&#xff0c;所以如果有很多原理讲不清楚的&#xff0c;知识点不全的&#xff0c;也请多多包涵 中间多数图都是直接截⽼师的笔记…