Spring向页面传值和接受页面传过来的参数详解

本文主要给大家介绍了关于Spring向页面传值和接受页面传过来的参数的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍:

一、从页面接收参数

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

1、使用HttpServletRequest获取。

 @RequestMapping("/login.do")
public String login(HttpServletRequest request){
 String name = request.getParameter("name")
 String pass = request.getParameter("pass")
} 

2、使用@RequestParam注解。

 @RequestMapping("/login.do")
 public String login(HttpServletRequest request,
  String name,
 @RequestParam("pass")String password) // 表单属性是pass,用变量password接收
 {
 syso(name);
 syso(password)
 } 

3、使用自动机制封装成实体参数。

 <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" rel="external nofollow" rel="external nofollow" >
 </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" rel="external nofollow" rel="external nofollow" >
 </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信息

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • springMvc请求的跳转和传值的方法

    forword跳转页面的三种方式: 1.使用serlvet /** * 使用forward跳转,传递基本类型参数到页面 * 注意: * 1.使用servlet原生API Request作用域 * */ @RequestMapping("/test") public String test(HttpServletRequest request,HttpServletResponse response){ String name = "张小三"; request.set

  • SpringMVC的简单传值(实现代码)

    之前学习SpringMVC时感觉他的传值很神奇:简便,快捷,高效. 今天写几个简单的传值与大家分享,希望能对大家有帮助. 一. 从后往前传: (1) @Controller @RequestMapping(value={"/hello"}) public class HelloController { @RequestMapping(value={"sub"}) public ModelAndView submit(HttpServletRequest reques

  • Spring向页面传值和接受页面传过来的参数详解

    本文主要给大家介绍了关于Spring向页面传值和接受页面传过来的参数的相关内容,分享出来供大家参考学习,下面来一起看看详细的介绍: 一.从页面接收参数 spring MVC接收请求提交的参数值的几种方法: 1.使用HttpServletRequest获取. @RequestMapping("/login.do") public String login(HttpServletRequest request){ String name = request.getParameter(&qu

  • spring boot 图片上传与显示功能实例详解

    首先描述一下问题,spring boot 使用的是内嵌的tomcat, 所以不清楚文件上传到哪里去了, 而且spring boot 把静态的文件全部在启动的时候都会加载到classpath的目录下的,所以上传的文件不知相对于应用目录在哪,也不知怎么写访问路径合适,对于新手的自己真的一头雾水. 后面想起了官方的例子,没想到一开始被自己找到的官方例子,后面太依赖百度谷歌了,结果发现只有官方的例子能帮上忙,而且帮上大忙,直接上密码的代码 package hello; import static org

  • 基于BootStrap Metronic开发框架经验小结【五】Bootstrap File Input文件上传插件的用法详解

    Bootstrap文件上传插件File Input是一个不错的文件上传控件,但是搜索使用到的案例不多,使用的时候,也是一步一个脚印一样摸着石头过河,这个控件在界面呈现上,叫我之前使用过的Uploadify 好看一些,功能也强大些,本文主要基于我自己的框架代码案例,介绍其中文件上传插件File Input的使用. 1.文件上传插件File Input介绍 这个插件主页地址是:http://plugins.krajee.com/file-input,可以从这里看到很多Demo的代码展示:http:/

  • Apache 文件上传与文件下载案例详解

    写一个Apache文件上传与文件下载的案例:以供今后学习 web.xml配置如下: <span style="font-family:SimSun;font-size:14px;"><?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns=&

  • JavaWeb实现文件上传与下载实例详解

    在Web应用程序开发中,文件上传与下载功能是非常常用的功能,下面通过本文给大家介绍JavaWeb实现文件上传与下载实例详解. 对于文件上传,浏览器在上传的过程中是将文件以流的形式提交到服务器端的,如果直接使用Servlet获取上传文件的输入流然后再解析里面的请求参数是比较麻烦,所以一般选择采用apache的开源工具common-fileupload这个文件上传组件.这个common-fileupload上传组件的jar包可以去apache官网上面下载,common-fileupload是依赖于c

  • 微信小程序 上传头像的实例详解

    微信小程序 上传头像的实例详解 最近在做微信小程序上传头像和上传照片功能就随手写一下代码: 上传头像html: <view class="edit-list"> <text class="list-name list-first">头像</text> <view class="edit-righr-bar"> <image class="head-portrait" src

  • 基于SpringMVC接受JSON参数详解及常见错误总结

    最近一段时间不想使用Session了,想感受一下Token这样比较安全,稳健的方式,顺便写一个统一的接口给浏览器还有APP.所以把一个练手项目的前台全部改成Ajax了,跳转再使用SpringMVC控制转发.对于传输JSON数据这边有了更深的一些理解,分享出来,请大家指正. 在SpringMVC中我们可以选择数种接受JSON的方式,在说SpringMVC如何接受JSON之前,我们先聊聊什么是JSON.具体的定义我也不赘述了,在JavaScript中我们经常这样定义JSON 对象 var jsonO

  • 网络安全漏洞渗透测试之文件上传绕过思路案例详解

    目录 引言 案例一 案例二 案例三 案例四 其它场景&总结 引言 分享一些文件上传绕过的思路,下文内容多包含实战图片,所以打码会非常严重,可多看文字表达:本文仅用于交流学习, 由于传播.利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,文章作者不为此承担任何责任. 案例一 一次项目渗透时,通过往png后缀随便加个字符可知该上传点为白名单上传,正常情况下无法绕过 通过观察接口信息,发现接口名字为UploadImg,猜测该接口用于图片上传,按照开发的习惯,保不准会存在te

  • SpringBoot+微信小程序实现文件上传与下载功能详解

    目录 1.文件上传 1.1 后端部分 1.2 小程序前端部分 1.3 实现效果 2.文件下载 2.1 后端部分 2.2 小程序前端部分 2.3 实现效果 1.文件上传 1.1 后端部分 1.1.1 引入Apache Commons FIleUpload组件依赖 <!--文件上传与下载相关的依赖--> <dependency> <groupId>commons-fileupload</groupId> <artifactId>commons-fil

  • JavaScript进阶之前端文件上传和下载示例详解

    目录 文件下载 1.通过a标签点击直接下载 2.open或location.href 3.Blob和Base64 文件上传 文件上传思路 File文件 上传单个文件-客户端 上传文件-服务端 多文件上传-客户端 大文件上传-客户端 大文件上传-服务端 文件下载 1.通过a标签点击直接下载 <a href="https:xxx.xlsx" rel="external nofollow" download="test">下载文件</

随机推荐