今天嘗試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屬性同步,要麼都不寫,要麼都寫上。