用Struts2搭建一個登錄例子【本人親測好用】


今天嘗試struts2的搭建,遇到不少的問題,終於一一解決,逛了很多地方,最終完成搭建

1、首先要下載struts2的一些組件,我下載的是版本2.3.4.1,Eclipse是4.6版本的。由於版本的不斷升級,導致在搭建的過程中,和過去相對較舊的版本搭建有了一些差別,不過問題不是很大。工程截圖如下:

 

2、解壓下載的組件,在lib目錄下找到其中的以下組件:

commons-fileupload-1.2.2.jar

commons-io-2.2.jar

commons-lang3-3.2.jar

commons-logging-1.1.1.jar

freemarker-2.3.19.jar

javassist-3.11.0.GA.jar(一定要將這個jar復制過去,這是和以前的版本不同的地方)

ognl-3.0.5.jar

struts2-core-2.3.4.1.jar

xwork-core-2.3.4.1.jar

將這些組件復制到建立的web工程下的WEB-INF/lib目錄中,這些組件其實就是編譯好的類文件。

3、接下來就是配置struts.xml文件。這個文件就好像起着一個過濾器的作用,用戶發來的請求要經過該文件的過濾,根據用戶請求中所請求的處理類型,來選擇相應的處理邏輯。

以下是一個struts.xml文件的例子:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.3.dtd">  
 3  
 4 <struts>  
 5       <include file="struts-default.xml" />  
 6       <package name="struts" extends="struts-default"><!--注意 namespace="/demo"寫,那么login.jsp中的form標簽的action屬性中必須寫-->  
 7           <action name="login" class="com.sid.action.Login" method="execute">
 8               <result name="success">/success.jsp</result>
 9               <result name="fail">/fail.jsp</result> 
10           </action>
11       </package>
12 </struts>  

在struts.xml中,是采用package來管理各種action的。

package標簽中的namespace指定了該包的命名空間。

extends是說當前這個包繼承自struts-default包,可以在struts2-core-2.2.3.1.jar中的struts-default.xml文件中找到這個包,這個包被定義成抽象的,它不能包含有action。

包中的每一個action標簽都和一個邏輯處理類進行了映射,name指定了這個action的名字,和包的namespace組合起來,可以直接訪問這個邏輯處理類。

class指定了邏輯處理類的位置,method指定了進行邏輯處理類中進行邏輯處理的方法,這個execute很重要,而且它有固定的返回類型,就是String。

result標簽就是根據邏輯判斷之后,execute方法返回的字符串,根據返回的字符串,來進入到指定的頁面。這里一定要把跳轉的地址寫清楚,明白。否則瀏覽器會報404的錯誤。

4、根據struts.xml的配置,我們需要建立兩個jsp文件:success.jsp和fail.jsp,還有一個Login類,以及一個登錄頁面的login.jsp文件。

在WebRoot目錄下,建立login.jsp文件:

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 
 4 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 5 <html>
 6 <head>
 7 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 8 <title>Insert title here</title>
 9 </head>
10 <body>
11     <form  action="login" method="post">
12     賬號:<input type="text" name="username"/><br />
13     密碼:<input type="password" name="password"/><br />
14     <input type="submit" value="登錄"/>
15     </form>
16 </body>
17 </html>

在src目錄下,寫Login類:

 1 package com.sid.action;
 2 import com.opensymphony.xwork2.ActionSupport;
 3 public class Login extends ActionSupport {
 4 
 5     private static final long serialVersionUID = 1L;
 6     private String username;
 7     private String password;
 8      public String execute()  
 9         {  
10             if("admin".equals(this.username) && "123456".equals(this.password))  
11                 return "success";  
12             else  
13                 return "fail";  
14         }  
15     public String getUsername() {
16         return username;
17     }
18     public void setUsername(String username) {
19         this.username = username;
20     }
21     public String getPassword() {
22         return password;
23     }
24     public void setPassword(String password) {
25         this.password = password;
26     }    
27 }

由於success.jsp和fail.jsp頁面並不想讓用戶直接訪問到,而是通過登錄頁面,做個簡單的邏輯判斷之后,在根據判斷結果跳轉到相應的頁面。

 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10     ====>登錄成功!<br />
11     賬號:${request.username}<br />
12     密碼:${request.password}
13 </body>
14 </html>
 1 <%@ page language="java" contentType="text/html; charset=UTF-8"
 2     pageEncoding="UTF-8"%>
 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
 4 <html>
 5 <head>
 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
 7 <title>Insert title here</title>
 8 </head>
 9 <body>
10 ---->登錄失敗!
11 </body>
12 </html>

 

5、配置web.xml文件,這也是很關鍵的一步,在啟動服務器時,服務器要根據這個文件去進行初始化。而struts2和struts1啟動有很大的不同,它是通過過濾器來啟動的,而struts1是通過加載servlet來啟動的,故應向web.xml中加入如下內容:

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <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">
 3   <display-name>Struts2</display-name>
 4 <!--配置sturts2啟動代碼 -->
 5 <filter>  
 6    <filter-name>struts2</filter-name>   
 7    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class><!-- 注意在2.1.3以上版本需使用此class -->  
 8 </filter>  
 9 <filter-mapping><!-- 配置url路徑 -->  
10     <filter-name>struts2</filter-name>  
11     <url-pattern>/*</url-pattern>  
12 </filter-mapping>
13       
14   <welcome-file-list>  
15     <welcome-file>index.jsp</welcome-file>
16     <welcome-file>default.jsp</welcome-file>
17   </welcome-file-list>
18 </web-app>

經過這幾步后,啟動你的服務器,在地址欄輸入登錄界面的地址,一個簡單的struts2框架就搭建好了……

如果出現404等錯誤請查看你的login.jsp的form標簽的action屬性的路徑是否寫對且與struts.xml的namespace屬性同步,要么都不寫,要么都寫上。



免責聲明!

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



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