【Struts】Struts2簡介及實現使用者登入程式碼示例

連江偉發表於2016-04-30

Struts2是由傳統的Struts1和WebWork兩個經典的MVC框架發展起來的,無論是從Struts2設計的角度來看,還是從Struts2在實際專案中的易用性來看,Struts2都堪稱是一個非常優秀的MVC框架。


與傳統的Struts1相比,Struts2允許使用普通的、傳統的Java物件作為Action;Action的execute()方法不再與Servlet API耦合,因而更易於測試;支援更多的檢視技術;基於AOP思想的攔截器機制,提供了極好的可擴充套件性;更強大、更易用的輸入校驗功能;並且將Ajax技術整合到了框架裡面等等,這些都是Struts2具有更大的吸引力的原因所在。


下面我們來看一張經典的Struts2架構圖:

對比著上面的圖片,我們一起來簡單瞭解下Struts2的執行流程:
         所有請求被Struts2核心控制器FilterDispather攔截
         根據ActionMapper提供的資訊決定如何進行下一步
         ActionMapper主要依賴Struts2的配置檔案struts.xml
         接下來為每個Action建立Action代理類ActionProxy
         執行ActionProxy的execute()方法
         在執行execute()方式時會逐個執行Struts2中的攔截器
         執行完成攔截器後才會真正執行目標Action
         目標Action需要返會轉向的檢視名稱
         ActionProxy取得檢視名稱物件Result完成轉向

         生成resposne物件完成本次請求

瞭解了Struts2框架的整體內容和執行流程,依舊以一個使用者登入的示例來說明如何使用Struts2進行專案開發。


第一步:在MyEclipse中建立Java Web專案(需要注意的是Struts2需要執行在JRE1.5及其以上版本的環境中)


第二步:下載Struts2的開發包,並且將依賴包拷貝到WEB-INF/lib下(必要的jar如下)


第三步:在web.xml配置檔案中,配置Struts2的核心控制器FilterDispatcher或者StrutsPrepareAndExecuteFilter,具體配置資訊如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4" 
	xmlns="http://java.sun.com/xml/ns/j2ee" 
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
	http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <filter>
        <filter-name>struts2</filter-name>
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>

    <filter-mapping>
        <filter-name>struts2</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
</web-app>
</pre><p><span style="font-size:18px"><span style="white-space:pre"></span>第四步:提供struts2的配置檔案struts.xml,放到原始碼檔案src下</span></p><p><span style="font-size:18px"></span></p><p><span style="font-size:18px"><span style="white-space:pre"></span>第五步:編寫Action原始碼檔案和JSP頁面,進行程式開發</span></p><p><span style="font-size:18px">        LoginAction</span></p><p><span style="font-size:18px"></span></p><pre code_snippet_id="1667602" snippet_file_name="blog_20160430_2_170036" name="code" class="java">public class LoginAction {

	private String username;
	
	private String password;
	
	public String getUsername() {
		return username;
	}

	public void setUsername(String username) {
		this.username = username;
	}

	public String getPassword() {
		return password;
	}

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

	public String execute() throws Exception {
		if ("admin".equals(username) && "admin".equals(password)) {
			return "success";
		}else {
			return "error";
		}
	}
	
}
        login.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	<form action="login.action">
		使用者:<input type="text" name="username"><br>
		密碼:<input type="password" name="password"><br>
		<input type="submit" value="登入">
	</form>
</body>
</html>

        login_success.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	${username },登入成功
</body>
</html>

        login_error.jsp

<%@ page language="java" contentType="text/html; charset=GB18030"
    pageEncoding="GB18030"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GB18030">
<title>Insert title here</title>
</head>
<body>
	登入失敗
</body>
</html>

第六步:將開發好的Action類和JSP頁面配置到struts.xml配置檔案中,具體配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
	<!-- 需要繼承struts-default包,這樣就擁有的最基本的功能 -->
	<package name="struts2" extends="struts-default">
		<action name="login" class="com.bjpowernode.struts2.LoginAction">
			<result name="success">/login_success.jsp</result>
			<result name="error">/login_error.jsp</result>
		</action>
	</package>
</struts>

第七步:部署到Tomcat中,啟動並且執行程式
小結一下;
從上面的例子中,不難發現,Struts2框架在實際開發中更加的便捷和高效,並且在Struts1的基礎上有了很大的提升,但是Struts2依然是一個基於請求驅動的MVC框架,其核心設計來自於另一個MVC框架WebWork,是對WebWork的一個升級,並且與Struts1的體系結構有很大的區別,具體有哪些不同的地方,敬請期待下篇。

相關文章