一、从页面接收参数

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;
} @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信息
 

springmvc与前端数据交互实例的更多相关文章

  1. SpringMVC前后端数据交互总结

    控制器 作为控制器,大体的作用是作为V端的数据接收并且交给M层去处理,然后负责管理V的跳转.SpringMVC的作用不外乎就是如此,主要分为:接收表单或者请求的值,定义过滤器,跳转页面:其实就是ser ...

  2. SpringMVC由浅入深day02_8json数据交互

    8 json数据交互 8.1 为什么要进行json数据交互 json数据格式在接口调用中.html页面中较常用,json格式比较简单,解析还比较方便. 比如:webservice接口,传输json数据 ...

  3. SpringMVC与Json数据交互

    简单回顾了一下SpringMVC和前端JSON数据是怎么交互的 接下来详细说一下过程 前端代码写的很简单  主要是为了试验一下JSON数据的前后台传递 前端代码给大家发出来 其实真的很简单 前端接受了 ...

  4. php 接口与前端数据交互实现

    最近在做前后端数据交互的尝试,也跳了很多坑,使用的是php+bootstrap-table+js,把一些收获记录在这里,方便查询. 这个小项目,仅有3个文件,分别为: crud.html data.p ...

  5. springmvc的json数据交互

    准备 @RequestBody 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConverter接口将读到的内容(json ...

  6. SpringMVC的JSON数据交互(七)-@Response,@RestController,@RequestBody用法

    1.@RequestBody   (自动将请求的数据封装为对象) 作用: @RequestBody注解用于读取http请求的内容(字符串),通过springmvc提供的HttpMessageConve ...

  7. 基于ssh框架的highcharts前后台数据交互实例

    Highcharts 是一个用纯JavaScript编写的一个图表库, 能够很简单便捷的在web网站或是web应用程序添加有交互性的图表,并且免费提供给个人学习.个人网站和非商业用途使用.HighCh ...

  8. 前端数据交互之json&ajax

    1.json json是 JavaScript Object Notation 的首字母缩写,单词的意思是javascript对象表示法,这里说的json指的是类似于javascript对象的一种数据 ...

  9. SpringMVC之json数据交互

    在Spring3.1之后,如果使用<mvc:annotation-driven />,即使用注解驱动,默认情况下已经配置了MappingJackson2HttpMessageConvert ...

随机推荐

  1. idea使用(一)

    基本上正式开发的常用工具基本都集成了,而且基本都在你非常容易触到的位置.说说我比较常用的: 1.ant 你懂的 2.maven你也懂的 3.SVN相比之下,IDEA的SVN的提交提供了更多的选项和功能 ...

  2. [Leetcode Week8]Subsets

    Subsets 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/subsets/description/ Description Given a set ...

  3. [Leetcode Week6]Best Time to Buy and Sell Stock

    Best Time to Buy and Sell Stock 题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/best-time-to-buy-and ...

  4. linux下命令源码

    一般来说,不同的命令可能隶属于不同的软件包,这样就没有一个地方会有所有命令的源代码.(命令的个数也会与你所安装的软件包有关)但是,一些常用的命令,例如basename cat chgrp chmod ...

  5. Google开源命令行参数解析库gflags

    Google开源命令行参数解析库gflags http://blog.csdn.net/lming_08/article/details/25072899 CMDLINE的解析 http://blog ...

  6. DIV+CSS设置及问题总结

    HTML 中有用的字符实体 注释:实体名称对大小写敏感! 显示结果 描述 实体名称 实体编号   空格     < 小于号 < < > 大于号 > > & ...

  7. Mac-sublime text 3破解版

    在史蒂芬周下载破解版 安装package control import urllib.request,os,hashlib; h = 'df21e130d211cfc94d9b0905775a7c0f ...

  8. Linux下挂载存储设备

    1. 安装iscsi (文件iscsi-initiator-utils-6.2.0.871-0.10.el5.x86_64.rpm在系统光盘可以找到)   rpm -ivh iscsi-initiat ...

  9. WPF中添加一个文本输入框,按Enter回车,执行绑定的Command

    在WPF+WMMV模式中使用键盘和鼠标事件的绑定代码如下: <TextBox x:Name="SearchBox" Text="{Binding SearchTex ...

  10. 常用的find命令

    find命令 find [路径名] –name/-size/-perm find [路径名] –name “*p” 在路径搜索p结尾的文件夹及文件 find [路径名] –name “[ab]*” 在 ...