一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - Spring向頁面傳值和接受頁面傳過來的參數詳解

Spring向頁面傳值和接受頁面傳過來的參數詳解

2020-11-10 16:48千里碼萬里行 Java教程

這篇文章主要給大家介紹了關于Spring向頁面傳值和接受頁面傳過來的參數的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面來一起看看吧。

本文主要給大家介紹了關于Spring向頁面傳值和接受頁面傳過來的參數的相關內容,分享出來供大家參考學習,下面來一起看看詳細的介紹:

一、從頁面接收參數

spring MVC接收請求提交的參數值的幾種方法:

1、使用HttpServletRequest獲取。

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

2、使用@RequestParam注解。

?
1
2
3
4
5
6
7
8
@RequestMapping("/login.do")
public String login(HttpServletRequest request,
 String name,
@RequestParam("pass")String password) // 表單屬性是pass,用變量password接收
{
syso(name);
syso(password)
}

3、使用自動機制封裝成實體參數。

?
1
2
3
4
5
6
7
8
9
10
11
<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;
}
?
1
2
3
4
5
6
@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中

?
1
2
3
4
5
6
7
@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中

?
1
2
3
4
5
6
7
@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中

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

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

?
1
2
3
4
5
6
7
8
9
@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

?
1
2
3
4
5
6
7
8
9
10
11
@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;
 }
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
@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:前綴

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

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

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

三、實例講解:

步驟一:創建新Web項目,導入Spring MVC包和業務層UserService

1. 創建Web項目導入相關的jar包:

Spring向頁面傳值和接受頁面傳過來的參數詳解

2. 導入前述業務層UserService類以及依賴的類,等。

User類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
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接口代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
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類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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文件內容如下:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?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代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
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類代碼如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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() ,在控制臺輸出的結果:

?
1
2
3
{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
1,Tom,123,110

這個結果說明業務層UserService工作正常。

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?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文件,代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
<%@ 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文件代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
* {
 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文件,這個文件是登錄成功以后顯示的界面,代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ 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類代碼如下所示:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
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服務器:

 訪問請求的信息打印在控制臺:

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對服務器之家的支持。

原文鏈接:http://blog.csdn.net/hustwht/article/details/52374559

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产麻豆精品入口在线观看 | 婷婷综合在线 | 欧美精品超清在线播放 | 久久香蕉电影 | 175m美女被网友灌醉啪啪玩脚 | 艾秋麻豆果冻剧传媒在线播放 | 天海翼三级 | 亚洲AV久久无码精品九九软件 | 精品国产人妻国语 | 国产精品福利在线观看免费不卡 | 偷拍自拍校园春色 | 99久久精彩视频 | gay台湾无套男同志可播放 | 亚洲天堂色图 | 日本黄色录像视频 | 国产精品久久久久久久久久久久 | 日本无遮挡亲吻膜下面免费 | 亚洲国产成人久久综合一 | 亚洲女人国产香蕉久久精品 | 边摸边吃奶边做爽gif动态图 | chinese帅男gay野外性 | 成人网18免费网 | 久久 这里只精品 免费 | 日本草草视频在线观看 | 日韩毛片网 | 亚洲国产精品日韩高清秒播 | 成人网视频免费播放 | 久久精品成人免费网站 | 亚洲风情无码免费视频 | 王雨纯羞羞 | 亚洲成a人不卡在线观看 | 国产精品福利在线观看免费不卡 | 青青国产成人久久91网 | 亚洲国产精品久久网午夜小说 | 色综合视频一区二区观看 | 免费xxxxx大片在线观看影视 | 欧美亚洲影院 | 精品一区二区三区高清免费不卡 | 免费一级片在线 | 国产精品免费久久久久影院 | 日日操日日舔 |