學習日記(三)淺識struts1,並搭建框架demo

一、Struts1配置文件總結


一、在web.xml中安裝Struts

要想使用Struts,我們接觸到的第一個配置文件就是web.xml。實際上,Struts的入口點是一個名爲ActionServlet的Servlet。在第一次訪問Struts時,建立這個ActionServlet類的對象實例,並調用ActionServlet類中的init方法來進行初始化(其實是讀取struts-config.xml文件中的內容,並根據struts-config.xml中的內容來初始化相關的資源)。因此,就要在web.xml文件中安裝這個ActionServlet,並在ActionServlet的初始化參數中指定struts-config.xml的位置。

二、struts-config.xml文件的結構

struts-config.xml是Struts的核心配置文件。也就是說,只要是使用Struts,就必須配置struts-config.xml文件。struts-config.xml文件的所有配置項都要放到頂層元素<struts-config>中,主要配置項有如下七個:

1.FormBean:在<form-beans>元素中配置。

2.Action映射:在<action-mappings>元素中配置。

3.全局Forwards:在<global-forwards>元素中配置。

4.全局異常(Exception):在<global-exceptions>元素中的配置。

5.控制器(Controller):在<controller>元素中配置。

6.信息資源:在<message-resources>元素中的配置。

7.插件:在<plug-in>元素中配置。

下面我們就分別來看一下這七部分的具體配置方法。

三、配置Formbean和Action映射

這兩個配置項是Struts配置的核心,也就是說我,一個完整的Struts應用程序都會擁有這兩項配置。

每一個Formbean要在<form-beans>元素中定義一個<form-bean>子元素。下面的代碼給出了一個標準的Formbean的配置方法:

<form-beans>
   <form-bean name="myForm" type="actionform.MyActionForm" />
</form-beans>

其中name屬性表示Formbean名,type屬性表示Formbean類的全名(包名+類名),一般type屬性值需要指定一個org.apache.struts.action.ActionForm類或其子類。type屬性值還可以指定一個動態form,如org.apache.struts.action.DynaActionForm,或這個類的子類。

在<form-beans>元素中定義的Formbean一般用於將客戶端瀏覽器提交的數據映射爲JavaBean的形式,最終開發人員可以直接使用JavaBean來操作客戶端提交的數據。Formbean同時還有驗證數據的功能(在validate方法中驗證)。Formbean有時還會作爲其他用途使用,如使用動態form和LocaleAction類配合使用來進行本地化操作。

每一個Action映射要在<action-mappings>元素中定義一個<action>子元素。Action映射的主要功能是將Struts動作的訪問路徑(一般以.do結尾)和Struts動作類相對應。同時可以指定一個Formbean來接收和驗證客戶端提交的數據。下面的代碼給出了一個標準的配置Action動作的方法:

<action-mappings>
   <action name="myForm" path="/myaction"  scope="request"  validate="true"type="action.MyAction" input="/mystruts/error.jsp">
        <forward name="success" path=" /mystruts/success.jsp" />
    </action>
</action-mappings>

四、配置全局Forwards

每一個全局的Forwards需要在<global-forwards>元素中定義一個<forward>子元素。全局Forwards可以被所有的Action、異常處理以及一些Struts標籤(如<html:link>)訪問。下面的代碼給出了一個標準的全局Forward的配置方法:

<global-forwards>
    <forward name="myforward" path="/mystruts/newProduct.jsp" />
</global-forwards>

五、配置局部和全局異常(Exception)

在Struts中處理異常的方法非常多,然後,爲了使處理異常的方式更靈活。Struts框架允許以配置的方式來處理異常。

Struts中的異常配置可分爲局部和全局異常。這兩種異常配置的方法完全一樣,只是配置代碼的位置不同。配置局部異常的<exception>元素在<action>元素中,而全局異常的<exception>元素在<global-exceptions>元素中。局部異常的優先級大於全局異常的優先級。

下面的代碼給出了一個標準的全局異常的配置方法:

<global-exceptions >
    <exception key="error.name.blank"type="java.lang.Exception" path="/error.jsp"/>
</global-exceptions>

其中key屬性表示在屬性文件中的key,一但StrutsAction的execute方法拋出異常,Struts首先會在局部和全局異常中匹配type屬性所指定的異常類型。如果匹配成功,就會跳轉到path屬性所指的Web資源(在本例中是"/error.jsp")。如果在error.jsp頁面中使用<html:errors/>標籤顯示錯誤信息,就會輸出key屬性所對應的值。

<exception>元素除了可以使用path屬性指定要跳轉的Web資源外,也可以使用handler屬性指定用於處理異常的類。如下面的代碼所示:   

<global-exceptions>
   <exception key="error.email.invalid"  type="java.lang.Exception"handler="exceptions.EmailException"/>
</global-exceptions>

其中exceptions.EmailException類必須繼承org.apache.struts.action.ExceptionHandler類,而且我們必須覆蓋execute方法。

ExceptionHandler類的execute方法的定義如下:

public ActionForward execute( Exception ex,ExceptionConfig ae,ActionMapping mapping,
                           ActionForm formInstance,HttpServletRequest request,
                           HttpServletResponse response) throws ServletException;

六、配置控制器(Controller)

控制器可能是這七個配置項上使用最少的一項。它主要用來覆蓋一些默認的Struts設置。下面是幾個常用的Struts設置:

1.maxFileSize:指定在文件上傳時的最大文件尺寸。可以使用K、M和G作爲單位。如maxFileSize="2M"。maxFileSize的值只能是整數,不能是小數,如maxFileSize=1.2M是不合法的。

2.nocache:告訴Struts是否應該緩衝內容。指定爲nocache="true",Struts將不會緩衝內容。默認值爲true。

3.contentType:指定默認的ContentType字段值,如果要發送的內容的默認格式是HTML,我們可以指定contentType的值爲"text/html"。

下面的代碼是一個完成的控制器的配置:

<controller maxFileSize="2M"contentType="text/html" nocache="false" />
七、配置信息資源

信息資源使用<message-resources>元素進行配置。下面是一個配置信息資源的例子:

<message-resources parameter="struts.application" key="global" />

其中parameter屬性表示保存信息資源的屬性文件的位置,對於上面的代碼來說,屬性文件的位置是<Web根目錄>"WEB-INF"classes"struts"application.properties。key屬性表示application.properties文件的標識。如果沒有key屬性,這個屬性文件就是默認的屬性文件。當指定key屬性時,在使用這個屬性文件時,需要使用相關標籤的bundle屬性指定這個key值。

屬性文件中的值可以使用Struts標籤來獲取,如屬性文件中的一個key是key.msg.submit。那麼使用<bean:message>標籤獲取這個屬性文件中的key值的代碼如下:

<bean:message key="key.msg.submit" bundle="global"/>

屬性文件也可以用在獲得錯誤信息上,如在validate方法中使用如下的代碼來指定錯誤提示信息:

errors.add("name",new ActionMessage("error.name.blank"));

而在JSP頁面中可以使用如下的代碼來顯示這個錯誤信息:

<html:errors property="name"bundle="global"/>

八、配置Struts插件

Struts之所以強大,在很大程度上取決於它支持通過插件的方式進行擴展,如前面講的Validator和Tiles,都是以Struts插件形式發佈的。Struts插件使用<plug-in>元素進行配置,如下面的代碼所示:

<plug-in className="org.apache.struts.validator.ValidatorPlugIn">
    <set-property property="pathnames" value="/WEB-INF/validator-rules.xml,/WEB-INF/validator.xml" />
</plug-in>

其中className屬性指定了Struts要調用的插件類名。property屬性指定了插件需要的屬性名,而value屬性指定了相應的屬性值。


二、搭建struts框架demo

使用MyEclipse(實現用戶登錄) 

1.打開MyEclipse,需要注意的是這裏應該處於MyEclipse Java Enterprise視圖;新建一個Web Project,輸入適當的工程名字,這裏輸入mystruts1,Finish即可。

2.添加struts1.2框架支持

在mystruts1工程上面右擊,在彈出的菜單中選擇MyEclipse -> Add Struts Capabilities…,添加Struts的支持。

3.新建三個Jsp頁面

login.jsp

 


<%@ page language="java" contentType="text/html;charset=gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>


<html:html lang="true">
  <head>
    <title>login.jsp</title>
 
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body>
   <h2>用戶登陸</h2>
   <html:form action="login.do" method="post">
     用戶名:<html:text property="name"></html:text><br>
     密碼:<html:password property="password"></html:password><br>
     <html:submit value="登陸"></html:submit>
     <html:reset value="重置"></html:reset>
   </html:form>
  </body>
</html:html>

 

login_success.jsp

 


<%@ page language="java" contentType="text/html;charset=gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>


<html:html lang="true">
  <head>
    <title>login.jsp</title>
 
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body>
    <h1>登陸成功!!!</h1>
  </body>
</html:html>

 

login_failure.jsp

 


<%@ page language="java" contentType="text/html;charset=gb2312"%>

<%@ taglib uri="http://struts.apache.org/tags-bean" prefix="bean" %>
<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html" %>
<%@ taglib uri="http://struts.apache.org/tags-logic" prefix="logic" %>
<%@ taglib uri="http://struts.apache.org/tags-tiles" prefix="tiles" %>


<html:html lang="true">
  <head>
    <title>login.jsp</title>
 
 <!--
 <link rel="stylesheet" type="text/css" href="styles.css">
 -->

  </head>
 
  <body>
    <h1>登錄失敗!!!</h1>
  </body>
</html:html>

 

java類--ActionForm 

 


package demo;

import org.apache.struts.action.ActionForm;

public class LoginForm extends ActionForm {
    private String name;
    private String password;
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getPassword() {
        return password;
    }
    public void setPassword(String password) {
        this.password = password;
    }
    
}

 

Action類 

 


package demo;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LoginAction extends Action {
    public ActionForward execute(ActionMapping mapping, ActionForm form,
               HttpServletRequest request, HttpServletResponse response) {
          LoginForm loginForm = (LoginForm) form;
          String name=loginForm.getName();
          String password=loginForm.getPassword();
          if("admin".equals(name)&&"123".equals(password))
          {
           //跳轉到成功頁
           return mapping.findForward("suc");
          }
          else
          {
           //跳轉到失敗頁
           return mapping.findForward("fal");
          }
          
         }
}

 

配置文件 web.xml 

 


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  <servlet>
    <servlet-name>action</servlet-name>
    <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
    <init-param>
      <param-name>config</param-name>
      <param-value>/WEB-INF/struts-config.xml</param-value>
    </init-param>
    <init-param>
      <param-name>debug</param-name>
      <param-value>3</param-value>
    </init-param>
    <init-param>
      <param-name>detail</param-name>
      <param-value>3</param-value>
    </init-param>
    <load-on-startup>0</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>action</servlet-name>
    <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  <welcome-file-list>
    <welcome-file>login.jsp</welcome-file>
  </welcome-file-list>
</web-app>
複製代碼

struts-config.xml 

 


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts-config PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 1.2//EN" "http://struts.apache.org/dtds/struts-config_1_2.dtd">
<struts-config>
  <data-sources />
 
  <!-- ActionForm配置 -->
  <form-beans>
      <form-bean name="LoginForm" type="demo.LoginForm"></form-bean>
  </form-beans>
  
  <global-exceptions />
  
  <!-- 全局轉發配置 -->
  <global-forwards>
        <forward name="suc" path="/login_success.jsp"></forward>
        <forward name="fal" path="/login_failure.jsp"></forward>
  </global-forwards>
  
  <!-- Action 配置 -->
  <action-mappings>
      <action path="/login"  type="demo.LoginAction" name="LoginForm" scope="request">
        <forward name="suc" path="/login_success.jsp"></forward>
        <forward name="fal" path="/login_failure.jsp"></forward>
     </action>
  </action-mappings>
  <message-resources parameter="com.demo.struts.ApplicationResources" />
</struts-config>

部署項目,啓動tomcat,這裏就不詳細說明!

最後打開瀏覽器,輸入http://localhost:8080/mystruts1/,ok啦!

參考:http://www.cnblogs.com/haoxin963/archive/2012/09/03/2668873.html

http://blog.sina.com.cn/s/blog_4bd19a250100ttpl.html


發佈了16 篇原創文章 · 獲贊 3 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章