1. 程式人生 > >Spring MVC_登入功能

Spring MVC_登入功能

1.Spring MVC開發的流程。
(1)編寫輸入表單頁面。
(2)配置處理器對映和處理器。
(3)編寫Form類。
(4)編寫處理器類。
(5)配置JSP檢視解析器。
(6)編寫返回JSP頁面
 
2  本例的開發過程包括  已經配置好了Spring環境
(1)新建登入頁面login.jsp
(2)配置處理器對映與處理器
(3)新建登入表單類com.demo.spring.forms.LoginForm.java
(4)新建登入處理器com.demo.spring.actions.LoginAction.java
(5)新建歡迎頁面welcome.java
 
3  具體步驟說明
(1)新建登入頁面login.jsp
新增兩個表單項 使用者名稱和密碼 並需要提供一個登入按鈕和一個引入到註冊頁面register.do的連結 使用引數method來決定使用哪一個請求註冊管理器的函式入口
 
<form name="form1" action="login.do" method="post">
<table width="300" border="1">
    <tr>
        <td colspan="2">登入視窗</td>
    </tr>
    <tr>
            <td>使用者名稱td>
            <td><input type="text" name="username" size="10">td>
    </tr>
    <tr>
            <td>密碼</td>
            <td><input type="password" name="password" size="10"></td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" name="submit"
            value="登入"> <a
            href="register.do?method=init">註冊新使用者</td>
    </tr>
</table>
</form>
 
(2)配置處理器對映與處理器
登入頁面login.jsp的
提交地址為login.do   因此在applicationContest.xml中需要新增處理器對映
 
<bean id="loginMapping"
        class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/login.do">loginAction</prop>
            </props>
        </property>
    </bean>
 
改對映指向/login.do   並交由loginAction處理器進行處理 因此接下來 我們新增處理器配置如下
 
<!---定義Action-->
    <bean id="loginAction"
        class="com.demo.spring.actions.LoginAction">
        <property name="commandClass">
            <value>com.demo.spring.forms.LoginForm</value>
        </property>
        <!-- 指定失敗要返回的頁面 -->
        <property name="formView">
            <value>login</value>
        </property>
        <!-- 指定成功要返回的頁面 -->
        <property name="successView">
            <value>welcome</value>
        </property>
    </bean>
這裡指定使用處理器類為 com.demo.spring.actions.LoginAction 並指定3個屬性
comandClass屬性 指定輸入的表單類為com.demo.spring.forms.LoginForm
formView屬性 指定失敗要返回的頁面login.jsp
successView屬性 指定成功要返回的頁面welcome.jsp
 
(3)新建登入表單類com.demo.spring.forms.LoginForm.java
這個類是一個最原始的JavaBean類 包含了與login.jsp頁面中表單相對應的變數 為變數新增getter/setter函式
 
package com.demo.spring.forms;

public class LoginForm {

    private String username;

    private String password;

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }
}
 
(4)新建登入處理器com.demo.spring.actions.LoginAction.java
這個類繼承自SimpleFormController 我們只需要實現該類的onSubmit()函式即可接受使用者的請求
在這個函式中
首先通過強制<span class="KSFIND_CLASS" id="0KSFindDIV">型別</span>裝換 取得使用者的表單物件loginForm
呼叫函式isValid()判斷是否驗證成功 如果登入陳宮 則在Session中儲存使用者登入的使用者名稱 並呼叫父類的getSuccessView()取得返回的success.jsp檢視 返回ModelAndView物件
如果登入失敗 首先取得錯誤物件model 將loginForm儲存在model中 然後返回一個ModelAndView物件 其中第一個引數為getFormView() 表示返回login.jsp頁面 第二個引數為model 表示傳遞錯誤對映列表
新建一個函式isValid()來進行登入驗證 處理的邏輯為如果使用者名稱和密碼均為admin 則表示登入成功 否則登入失敗
 
package com.demo.spring.actions;

import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.validation.BindException;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.SimpleFormController;

import com.demo.spring.dao.UserDAO;
import com.demo.spring.forms.LoginForm;
import com.demo.spring.util.Constants;

public class LoginAction extends SimpleFormController {
    

    protected ModelAndView onSubmit(HttpServletRequest request,
            HttpServletResponse response, Object command, BindException errors)
            throws Exception {
        LoginForm loginForm = (LoginForm) command;
        if (isValid(loginForm)) {
            request.getSession().setAttribute(Constants.USERNAME_KEY, loginForm.getUsername());
            return new ModelAndView(getSuccessView());
        } else {
            Map modle = errors.getModel();
            modle.put("loginForm", loginForm);
            return new ModelAndView(getFormView(), modle);
        }
    }

    public boolean isValid(LoginForm loginForm) {
        if (loginForm.getUsername().equals("admin")
                || loginForm.getPassword().equals("admin")) {
            return true;
        } else {
            return false;
        }
    }
}
在上面的onSubmit() 函式中 如果登陸成功 則儲存一個變數在Session中 為了統一改儲存的變數命名 我們新建了一個實體類com.demo.spring.util.Constants.java 定義USERNAME_KEY來表示儲存的變數名為username 這樣在訪問該變數時 只需要與你用Constants.java類的USERNAME_KEY變數即可
 
package com.demo.spring.util;

public class Constants {
    public final static String USERNAME_KEY = "username";

}
 
 
(5)新建歡迎頁面welcome.java
 
<%@ taglib prefix="spring" uri="/spring"%>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%String path = request.getContextPath();
            String basePath = request.getScheme() + "://"
                    + request.getServerName() + ":" + request.getServerPort()
                    + path + "/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title><spring:message code="welcome.page.title" /></title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">


</head>

<body>
<form name="form1" action="logout.do" method="post">
<table width="200" border="1">
    <tr>
        <td colspan="2">登陸成功</td>
    <tr>
        <td>歡迎你</td>
        <td><%=(String) session.getAttribute("username")%></td>
    </tr>
    <tr>
        <td colspan="2"><input type="submit" name="submit"
            value="退出"></td>
    </tr>
</table>
</form>
</body>
</html>

 

型別

型別