Struts2基礎(chǔ)(1)

1.什么是Struts2?

  • 是基于MVC模式的開源Java EE技術(shù)Web開發(fā)框架。
    • 什么是框架?
      其實(shí)就是一組jar包,其本質(zhì)是對(duì)jdk功能的擴(kuò)展,包括一系列最佳的實(shí)踐,作用是解決某個(gè)領(lǐng)域的問題。
    • 什么是MVC模式?
      1.定義:是一種對(duì)代碼進(jìn)行分層開發(fā)的方式。
      2.用途:對(duì)組建之間進(jìn)行隔離、分層,從而有利于代碼的后期維護(hù)。
      3.內(nèi)容:
      • M:Model,代表業(yè)務(wù)邏輯層,是應(yīng)用程序中用于處理應(yīng)用程序數(shù)據(jù)邏輯的部分。
        通常模型對(duì)象負(fù)責(zé)在數(shù)據(jù)庫(kù)中存取數(shù)據(jù)。
      • V:View,代表是圖層,是應(yīng)用程序中處理數(shù)據(jù)顯示的部分。
        通常視圖是依據(jù)模型數(shù)據(jù)創(chuàng)建的。
      • C:Controlle,代表控制層,是應(yīng)用程序中處理用戶交互的部分。
        通??刂破髫?fù)責(zé)從視圖讀取數(shù)據(jù),控制用戶輸入,并向模型發(fā)送數(shù)據(jù)。
mvc.jpg
  • Struts2是來(lái)源于WebWork框架,是在WebWork框架的基礎(chǔ)上再與Struts1的優(yōu)點(diǎn)進(jìn)行整合而設(shè)計(jì)出來(lái)的新MVC框架。

2.配置Struts2到eclipse中

1.進(jìn)入Struts2的官網(wǎng)下載Struts2安裝包:http://struts.apache.org


2.下載到本地后解壓:
解壓后,apps文件內(nèi)就是一些實(shí)例,lib文件夾是Struts2所需的所有jar包庫(kù),docs文件夾是說(shuō)明文檔。



3.在eclipse中配置Struts2環(huán)境,主要是分三步,第一步是導(dǎo)入所需的jar包,第二步配置web.xml,第三步配置Struts.xml。
lib文件夾下有所有的jar包,但我們不會(huì)全部都用到,剛開始我們只需要導(dǎo)入常用的若干jar包即可,我們可以解壓Apps文件夾下的struts2-blank.war,該實(shí)例的lib文件夾中只包含幾項(xiàng)常用的jar包。所以,我們將解壓后的struts2-blank.war導(dǎo)入到eclipse中,文檔結(jié)構(gòu)如圖所示:

下面我們就在這個(gè)文檔的基礎(chǔ)上開發(fā)一個(gè)基于Struts2框架的模擬登錄的實(shí)例。

3.用Struts2實(shí)現(xiàn)簡(jiǎn)單的模擬登錄

  • 首先,新建三個(gè)JSP頁(yè)面:登錄頁(yè)面 login.jsp,登錄成功頁(yè)面true.jsp,登錄失敗頁(yè)面 false.jsp。
    1.login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Struts2實(shí)現(xiàn)登錄</title>
</head>
<body>
<form action="login.action" method="post" name="login">
用戶名:<input name="username" type="text" id="textfield"/>
密碼:<input name="password" type="text" id="textfield2"/>
<input type="submit" name="button" value="提交">
</form>
</body>
</html>

2.true.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
sucess!
<br>
welcome,<s:property value="username"></s:property>

</body>
</html>

3.false.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!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=UTF-8">
<title>Insert title here</title>
</head>
<body>
wrong!
</body>
</html>
  • 新建業(yè)務(wù)(控制)組件
    Struts2的業(yè)務(wù)組建非常的簡(jiǎn)潔,簡(jiǎn)潔到僅僅由一個(gè)POJO(簡(jiǎn)單的Java對(duì)象)就可以實(shí)現(xiàn)Struts1中Action+ActionFrom的功能,這也是Struts2解耦合特性的體現(xiàn)。另外如果嚴(yán)格的說(shuō),Struts2的Action并不是一個(gè)業(yè)務(wù)組件,他僅僅是一個(gè)控制層,真正的業(yè)務(wù)組件是通過新建一個(gè)JavaBean業(yè)務(wù)層/服務(wù)層來(lái)實(shí)現(xiàn)的。
    新建一個(gè)package包,命名為controller,然后再該包中新建一個(gè)Login類,這個(gè)類的功能就相當(dāng)于Struts1中的Action或Servlet,其功能都是MVC模型中的控制層,代碼如下:
package controller;

public class Login {
    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(){
        if(username.equals("root")&&password.endsWith("123123")){
            return "toTure";
            
        }else{
            return "toFalse";
        }
    }

}

上述代碼中新建了兩個(gè)屬性u(píng)sername、password,并生成其get/set方法,并實(shí)現(xiàn)execute()方法,該方法是規(guī)定的,必須是一個(gè)public的方法,且該方法返回的數(shù)據(jù)類型是字符串String,方法名是execute,該約定就像public static void main(String args[])一樣固定。
execute()方法返回的是一個(gè)指向物理文件地址的邏輯名稱,在配置文件struts.xml中進(jìn)行了配置,相當(dāng)于Struts1中的ActionForward類。
在execute()方法中對(duì)username、password的值進(jìn)行判斷,如果成功則返回一個(gè)字符串toTrue,否則返回toFalse。這里需要注意的是,class Login類中的username、password實(shí)際上與login.jsp頁(yè)面中的表單名稱相對(duì)應(yīng),代碼如下:

<form action="login.action" method="post" name="login">
用戶名:<input name="username" type="text" id="textfield"/>
密碼:<input name="password" type="text" id="textfield2"/>
<input type="submit" name="button" value="提交">
</form>

至此,已經(jīng)創(chuàng)建完成了JSP頁(yè)面和控制層文件,而且,已經(jīng)在控制層類Login中實(shí)現(xiàn)了一個(gè)簡(jiǎn)易的登錄驗(yàn)證功能,下一步就是通過配置JSP頁(yè)面與Login類和其他組件關(guān)聯(lián)起來(lái)。

  • 配置web.xml
    編輯WebContent下WEB-INF中的web.xml:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" 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">

    <display-name>Struts Blank</display-name>

    <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>

   <welcome-file-list>
        <welcome-file>login.jsp</welcome-file>
   </welcome-file-list>

  
</web-app>

添加過濾器的目的是攔截所有請(qǐng)求。在Struts1中使用的是中心控制類的ActionServlet來(lái)進(jìn)行請(qǐng)求的分發(fā),Struts2中使用的是過濾器。

為什么要配置web.xml?
因?yàn)閃eb應(yīng)用是基于請(qǐng)求/響應(yīng)架構(gòu)的應(yīng)用,所以不管是哪一種MVC Web架構(gòu),都需要在web.xml中配置該框架的核心servlet或Filter,這樣才可以讓該框架加入到Web應(yīng)用中。

  • 新建中心配置文件struts.xml

配置文件struts.xml相當(dāng)于Struts1的配置文件struts-config.xml,是一個(gè)中心配置文件。這個(gè)配置文件struts.xml要放到classes目錄中,所以要在項(xiàng)目的資源目錄src中創(chuàng)建struts.xml文件,創(chuàng)建完畢后,在struts.xml中注冊(cè)Action和result。

<?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>
    <package name="struts2" extends="struts-default">
        <action name="login" class="controller.Login">
            <result name="toTure">/true.jsp</result>
            <result name="toFalse">/false.jsp</result>
        </action>
    </package>

</struts>

標(biāo)記action是本例的主要部分,屬性值name是訪問Action的URL,就像servlet的URL映射地址一樣,通過這個(gè)名稱就可以訪問到這個(gè)action,屬性class是這個(gè)Action在項(xiàng)目中具體java文件的完整路徑,要帶上包名以及類名,是一個(gè)完整的路徑。子標(biāo)記result的功能是執(zhí)行完Action后要到達(dá)的JSP頁(yè)面的路徑,該路徑要使用邏輯名來(lái)標(biāo)記,所以result標(biāo)記的name屬性就是這個(gè)true.jsp的邏輯名稱,通過該邏輯名稱可以找到true.jsp物理文件所以,Struts2只需要獲取exectue()方法返回的字符串就可以確定下一步轉(zhuǎn)向哪一個(gè)JSP頁(yè)面。

還需要注意的是,form表單action屬性值login.action中的login指的就是配置文件struts.xml代碼:

<action name="login" class="controller.Login">

中的name="login",兩個(gè)的值是對(duì)應(yīng)的。

運(yùn)行一下,結(jié)果:


至此,我們就完成了一個(gè)簡(jiǎn)單的基于Struts2框架模擬登錄的小實(shí)例,不早了,該睡覺了,等下次我們?cè)僖黄鹄^續(xù)深入探究Struts2框架。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容