Spring向頁(yè)面?zhèn)髦岛徒邮茼?yè)面?zhèn)鬟^(guò)來(lái)的參數(shù)詳解
本文主要給大家介紹了關(guān)于Spring向頁(yè)面?zhèn)髦岛徒邮茼?yè)面?zhèn)鬟^(guò)來(lái)的參數(shù)的相關(guān)內(nèi)容,分享出來(lái)供大家參考學(xué)習(xí),下面來(lái)一起看看詳細(xì)的介紹:
一、從頁(yè)面接收參數(shù)
spring MVC接收請(qǐng)求提交的參數(shù)值的幾種方法:
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、使用自動(dòng)機(jī)制封裝成實(shí)體參數(shù)。
<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()); }
二、向頁(yè)面?zhèn)髦?/strong>
當(dāng)Controller組件處理后,需要向響應(yīng)JSP傳值時(shí),可以使用的方法:
1),使用HttpServletRequest 和 Session 然后setAttribute()
,就和Servlet中一樣
Model數(shù)據(jù)會(huì)利用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對(duì)象
3),使用ModelMap對(duì)象
使用ModelMap參數(shù)對(duì)象示例:
ModelMap數(shù)據(jù)會(huì)利用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方法的參數(shù)部分或Bean屬性方法上使用@ModelAttribute數(shù)據(jù)會(huì)利用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存儲(chǔ):可以利用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 默認(rèn)采用的是轉(zhuǎn)發(fā)來(lái)定位視圖,如果要使用重定向,可以如下操作
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"; }
三、實(shí)例講解:
步驟一:創(chuàng)建新Web項(xiàng)目,導(dǎo)入Spring MVC包和業(yè)務(wù)層UserService
1. 創(chuàng)建Web項(xiàng)目導(dǎo)入相關(guān)的jar包:
2. 導(dǎo)入前述業(yè)務(wù)層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; /** * 用戶數(shù)據(jù)訪問(wèn)對(duì)象接口 */ public interface UserDao { /** 根據(jù)唯一用戶名查詢系統(tǒng)用戶, 如果沒(méi)有找到用戶信息返回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; /** 業(yè)務(wù)層 注解 */ @Service // 默認(rèn)的Bean ID是 userService public class UserService implements Serializable { private static final long serialVersionUID = 7360372166489952236L; private UserDao userDao; // @Resource //自動(dòng)匹配userDao對(duì)象并注入 @Resource(name = "userDao") public void setUserDao(UserDao userDao) { this.userDao = userDao;// } public UserDao getUserDao() { return userDao; } /** 登錄系統(tǒng)功能 */ public User login(String name, String pwd) throws NameOrPwdException, NullParamException { if (name == null || name.equals("") || pwd == null || pwd.equals("")) { throw new NullParamException("登錄參數(shù)不能為空!"); } User user = userDao.findByName(name); if (user != null && pwd.equals(user.getPwd())) { return user; } throw new NameOrPwdException("用戶名或者密碼錯(cuò)誤"); } }
NameOrPwdException類代碼如下:
package com.souvc.service; /** 用戶名或者密碼錯(cuò)誤 */ 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; /** 參數(shù)為空 */ 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屬性輸入, 否則不能進(jìn)行JDBC Driver注冊(cè) */ @Value("#{jdbcProps.driver}") public void setDriver(String driver) { try { // 注冊(cè)數(shù)據(jù)庫(kù)驅(qū)動(dòng) 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() { } /** 創(chuàng)建 MysqlUserDAO 對(duì)象必須依賴于JDBCDataSource實(shí)例 */ public MysqlUserDao(JdbcDataSource dataSource) { this.dataSource = dataSource; } @Autowired // 按照類型自動(dòng)裝配 public void setDataSource(@Qualifier("jdbcDataSource") JdbcDataSource dataSource) { this.dataSource = dataSource; } public JdbcDataSource getDataSource() { return dataSource; } /** 根據(jù)唯一用戶名查詢系統(tǒng)用戶, 如果沒(méi)有找到用戶信息返回null */ public User findByName(String name) { System.out.println("利用JDBC技術(shù)查找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文件內(nèi)容如下:
# 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數(shù)據(jù)庫(kù)初始化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. 為項(xiàng)目添加JUnit4 API,然后添加測(cè)試類TestCase和測(cè)試方法testUserService()
用于測(cè)試上述配置是否正確。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); } }
執(zhí)行測(cè)試方法testUserService()
,在控制臺(tái)輸出的結(jié)果:
{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技術(shù)查找User信息
1,Tom,123,110
這個(gè)結(jié)果說(shuō)明業(yè)務(wù)層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. 部署項(xiàng)目到Tomcat并且啟動(dòng),測(cè)試Spring MVC配置是否正常。
在輸出結(jié)果中出現(xiàn)內(nèi)容, 并且沒(méi)有異常就會(huì)說(shuō)明Spring MVC部署正常。
步驟二:實(shí)現(xiàn)login-action1.form登錄流程,測(cè)試?yán)肏ttpServletRequrst傳值方法
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對(duì)象進(jìn)行瀏覽器頁(yè)面到控制器傳值。
方法二解釋:
使用@RequestParam注解聲明表單密碼輸入框pwd的值注入到password變量,表單中用戶名輸入框根據(jù)名字映自動(dòng)射注入name變量。 @RequestMapping注解將login-action2.form映射到了checkLogin2()
方法。這樣就與login- form.jsp表單對(duì)應(yīng)。
方法三解釋:
這里采用user作為參數(shù), Spring會(huì)自動(dòng)的將頁(yè)面表單參數(shù)name,pwd注入到user對(duì)象的相應(yīng)屬性name,pwd傳遞到方法中。@RequestMapping將請(qǐng)求login-action3.form映射到方法checkLogin3()
。
方法四解釋:
在處理方法完成后返回一個(gè)ModelAndView對(duì)象。
方法五解釋:
ModelMap屬性值與頁(yè)面login-form.jsp之間的數(shù)據(jù)對(duì)應(yīng)。
方法六解釋:
@ModelAttribute聲明的屬性與login-form.jsp頁(yè)面的值關(guān)系。
用戶名或者密碼錯(cuò)誤時(shí)候出現(xiàn)的時(shí)候,能夠記住用戶名。
在前述案例中,用戶登錄成功以后, 可以利用HttpServletRequest對(duì)象的getSession()
方法訪問(wèn)Session對(duì)象, 這樣就可以保持用戶登錄狀態(tài)了。
2. 為頁(yè)面添加樣式文件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文件,這個(gè)文件是登錄成功以后顯示的界面,代碼如下所示:
<%@ 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>
上述頁(yè)面中,使用EL表達(dá)式和標(biāo)準(zhǔn)標(biāo)簽庫(kù)配合顯示界面數(shù)據(jù), 其中<c:url var="base" value="/"></c:url>
和${base}
用于解決絕對(duì)路徑問(wèn)題。
4. 創(chuàng)建控制器類LoginController,在該類中使用注解@Controller的方式進(jìn)行配置:
1)使用@Controller將LoginController聲明為控制器Bean組件。
2)使用@RequestMapping("/login")
聲明對(duì)LoginController組件的請(qǐng)求在/login 路徑下。
3)流程控制方法loginForm(),用于顯示登錄表單頁(yè)面。使用@RequestMapping注解將映射請(qǐng)求/login-form.form到loginForm()方法。
4)增加userService屬性,并且使用@Resource注解聲明在運(yùn)行期間注入userService對(duì)象。
5)增加控制流程方法checkLogin1()
,使用@RequestMapping注解將請(qǐng)求/login-action1.form映 射到checkLogin1()方法。checkLogin1()
方法調(diào)用userService的login方法,實(shí)現(xiàn)登錄流程。 checkLogin1()
方法主要是測(cè)試JSP頁(yè)面到控制器的數(shù)據(jù)傳輸方式。
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 // 請(qǐng)求Spring注入資源 userService private UserService userService; @RequestMapping("/login.form") public String loginForm() { // 可以向表單界面?zhèn)鬟f一些參數(shù) return "login-form"; } @RequestMapping("/login-action1.form") // Spring MVC 自動(dòng)參數(shù)注入HttpServletRequest public String checkLogin1(HttpServletRequest req) { System.out.println("---方法一---"); // 優(yōu)點(diǎn)直接簡(jiǎn)潔,缺點(diǎn)需要自己處理數(shù)據(jù)類型轉(zhuǎn)換, 不支持文件上傳功能 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); // 登錄成功將登錄用戶信息保存到當(dāng)前會(huì)話中 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, // 映射表單屬性不同的參數(shù) HttpServletRequest req) { System.out.println("---方法二---"); // 優(yōu)點(diǎn), 自動(dòng)轉(zhuǎn)換數(shù)據(jù)類型, 缺點(diǎn)可能出現(xiàn)數(shù)據(jù)類型轉(zhuǎn)換異常 System.out.println(name); System.out.println(password); try { User user = userService.login(name, password); // 登錄成功將登錄用戶信息保存到當(dāng)前會(huì)話中 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("---方法三---"); // 自動(dòng)填充到bean對(duì)象 System.out.println(user); try { user = userService.login(user.getName(), user.getPwd()); // 登錄成功將登錄用戶信息保存到當(dāng)前會(huì)話中 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); // 登錄成功將登錄用戶信息保存到當(dāng)前會(huì)話中 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); // 登錄成功將登錄用戶信息保存到當(dāng)前會(huì)話中 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); // 登錄成功將登錄用戶信息保存到當(dāng)前會(huì)話中 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); // 登錄成功將登錄用戶信息保存到當(dāng)前會(huì)話中 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 = { "再來(lái)一次", "下次就對(duì)了", "沒(méi)關(guān)系還有機(jī)會(huì)" }; @ModelAttribute("next") public String getNext() { Random r = new Random(); return msg[r.nextInt(msg.length)]; } }
5.測(cè)試login-action1.form登錄流程
通過(guò)網(wǎng)址“http://localhost:8080/SpringValues/login/login.form”請(qǐng)求Tomcat服務(wù)器:
訪問(wèn)請(qǐng)求的信息打印在控制臺(tái):
---方法一--- Tom 123 利用JDBC技術(shù)查找User信息 ---方法二--- Tom 123 利用JDBC技術(shù)查找User信息 ---方法三--- 0,Tom,123,null 利用JDBC技術(shù)查找User信息 ---方法四--- 利用JDBC技術(shù)查找User信息 ---方法五--- 利用JDBC技術(shù)查找User信息
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來(lái)一定的幫助,如果有疑問(wèn)大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
Java設(shè)計(jì)模式之解釋器模式(Interpreter模式)介紹
這篇文章主要介紹了Java設(shè)計(jì)模式之解釋器模式(Interpreter模式)介紹,Interpreter定義:定義語(yǔ)言的文法,并且建立一個(gè)解釋器來(lái)解釋該語(yǔ)言中的句子,需要的朋友可以參考下2015-03-03java 利用反射機(jī)制,獲取實(shí)體所有屬性和方法,并對(duì)屬性賦值
這篇文章主要介紹了 java 利用反射機(jī)制,獲取實(shí)體所有屬性和方法,并對(duì)屬性賦值的相關(guān)資料,需要的朋友可以參考下2017-01-01spring boot多數(shù)據(jù)源動(dòng)態(tài)切換代碼實(shí)例
這篇文章主要介紹了spring boot多數(shù)據(jù)源動(dòng)態(tài)切換代碼實(shí)例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01spring boot實(shí)現(xiàn)阿里云視頻點(diǎn)播上傳視頻功能(復(fù)制粘貼即可)
這篇文章主要介紹了spring boot實(shí)現(xiàn)阿里云視頻點(diǎn)播上傳視頻功能(復(fù)制粘貼即可),本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12springboot中swagger快速啟動(dòng)流程
這篇文章主要介紹了springboot中的swagger快速啟動(dòng)流程,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-09-09輸出java進(jìn)程的jstack信息示例分享 通過(guò)線程堆棧信息分析java線程
通過(guò)ps到j(luò)ava進(jìn)程號(hào)將進(jìn)程的jstack信息輸出。jstack信息是java進(jìn)程的線程堆棧信息,通過(guò)該信息可以分析java的線程阻塞等問(wèn)題。2014-01-01Spring Boot2.0使用Spring Security的示例代碼
這篇文章主要介紹了Spring Boot2.0使用Spring Security的示例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-08-08