【SSH學習筆記】用Struts2實現簡單的用戶登錄


說再前面

本篇博文以Struts2的形式最簡單地實現了用戶登錄,悄悄地告訴你,這個可以直接被當作實驗報告交哦~


准備階段

在使用學習Struts2的時候首先要下載相應的架包

Struts2資源下載

這里建議下載第一個,在struts-2.5.14.1-all.zip里有很多實用的東西,不僅有架包還有官方為開發者准備的實例等。

任何所學的知識最有效的檢測方式就是做一個小小的實例,這里吉力就帶着大家看看Struts2是怎么實現這個功能的。

Struts2核心jar包
struts2-core-2.3.15.3.jar
asm-3.3jar
asm-common-3.3jar
asm-tree-3.3jar
xwork-core-2.3.15.3.3.jar
commons-io-2.0.1.jar
commons-lang-3.3.1.jar
commons-fileupload-1.3.jar
commons-logging-1.1.3.jar
freemarker-2.3.16.jar
log4j-1.2.17.jar
ognl-3.0.6.jar
javassist-3.11.0.GA.jar

項目框架:


1.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">

<display-name>Struts01</display-name>
<!-- 配置 Struts2框架核心Filter -->
<filter>
<!-- 過濾器名 -->
<filter-name>struts2</filter-name>
<!-- 配置Struts2核心Filter實現類 -->
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<!-- 讓Struts2的核心Filter攔截所有請求 -->
<filter-mapping>
<!-- 過濾名 -->
<filter-name>struts2</filter-name>
<!-- 匹配所有請求 -->
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- <welcome-file-list>  
    <welcome-file>index.html</welcome-file>  
  </welcome-file-list>  
  -->
</web-app>

任何MVC框架需要與Web應用整合時都要借助web.xml配置文件。通常MVC框架只需要在Web應用里加載一個核心控制器即可,對於Struts2來說就是加載StrutsPrepareAndExecuteFilter。一個Web應用只要加載StrutsPrepareAndExecuteFilter后,就具有Struts2的基本功能。


2.創建登錄視圖

<%@ 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>My JSP 'index.jsp' starting page</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">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->
  </head>
  
  <body>
  <form action="login.action" method="post">
  
    用戶名:<input type="text" name="useName"><br>
    密碼:<input type="password" name="password"><br>
    <input type="submit" value="登錄"><input type="reset" value="重置"> 
  
  </form>
  </body>
</html>

上述頁面代碼里定義了一個表單,該表單提交給login.action進行處理。表單里有2個輸入文本框,分別接收用戶名和密碼。


3.創建實體POJO層

在src下的com.beans包里創建實體User

package com.beans;

public class User {
	private String useName;
	private String password;
	
	public User() {
		// TODO 自動生成的構造函數存根
	}
	public User(String useName, String password) {
		super();
		this.useName = useName;
		this.password = password;
	}
	public String getUseName() {
		return useName;
	}
	public void setUseName(String useName) {
		this.useName = useName;
	}
	public String getPassword() {
		return password;
	}
	public void setPassword(String password) {
		this.password = password;
	}
	
}

在Strut2里,不對,是在整個SSH框架里實體的概念特別重要,它與數據庫表相對應,將數據很好的保持了起來,實現了數據的持久化,這樣我們以實體的形式傳遞數據和映射就變得簡單。


4.創建業務控制器

在src下的com.action包里添加用於處理用戶登錄的業務控制器LoginAction類

package com.action;

import com.beans.User;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ModelDriven;

public class LoginAction extends ActionSupport implements ModelDriven<User>{
	User user=new User();

	public User getUser() {
		return user;
	}

	public void setUser(User user) {
		this.user = user;
	}

	public String execute()
	{
		if(user.getUseName().equals("jili")&&user.getPassword().length()>=6)
		{
			return SUCCESS;
		}
		else
		{
			return ERROR;
		}
	}

	@Override
	public User getModel() {
		// TODO 自動生成的方法存根
		return user;
	}
	
}

這里采用了模型驅動的方式實現了對於用戶輸入數據的映射,這個方法比再在action里添加屬性接收后再賦給User更加高效。


5.配置業務控制器struts.xml

再src下新建struts.xml配置文件,在該文件配置LoginAction

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
	"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
	"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.devMode" value="true"/>
<constant name="struts.enable.DynamicMethodInvocation" value="true"/>

	<package name="default" namespace="/" extends="struts-default">
		<!-- 定義一個叫user的Action,並帶上實現類的路徑 -->
		<action name="login" class="com.action.LoginAction">
			<!-- 配置execute()方法返回值與視圖資源之間的映射關系 -->
			<result name="success">/suc.jsp</result>
			<result name="error">/error.jsp</result>
		</action>
	</package>
</struts>

該配置文件配置了一個名為login的Action,並指明了Action實現類com.action.LoginAction。在 元素里指明execute()方法返回值與視圖頁面資源之間的映射關系。


6.運行顯示

suc.jsp

<%@ 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>My JSP 'suc.jsp' starting page</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">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
    歡迎${param.useName}登錄!
  </body>
</html>

error.jsp

<%@ 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>My JSP 'error.jsp' starting page</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">
	<!--
	<link rel="stylesheet" type="text/css" href="styles.css">
	-->

  </head>
  
  <body>
   賬號或者密碼錯誤!<a href="input.jsp">返回</a> <br>
  </body>
</html>


小結

本篇博文只是最簡單地實現了用戶登錄,這也直觀驗證了Struts2是MVC的很好的應用。

當然,Struts2還有很多應用比如動態方法的調用、標簽庫等使用,吉力會在今后的博文里會給大家舉例子說明。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM