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

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

一、首先要下載struts2的一些組件,我下載的是版本2.3.4.1,Eclipse是4.6版本的。因爲版本的不斷升級,致使在搭建的過程當中,和過去相對較舊的版本搭建有了一些差異,不過問題不是很大。工程截圖以下:java

 

二、解壓下載的組件,在lib目錄下找到其中的如下組件:web

commons-fileupload-1.2.2.jarapache

commons-io-2.2.jar瀏覽器

commons-lang3-3.2.jar服務器

commons-logging-1.1.1.jarapp

freemarker-2.3.19.jar框架

javassist-3.11.0.GA.jar(必定要將這個jar複製過去,這是和之前的版本不一樣的地方)jsp

ognl-3.0.5.jarpost

struts2-core-2.3.4.1.jar

xwork-core-2.3.4.1.jar

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

三、接下來就是配置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的錯誤。

四、根據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>

 

五、配置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屬性同步,要麼都不寫,要麼都寫上。

相關文章
相關標籤/搜索