struts1的一些基本用法和操作


入職兩周了,項目是用struts1+ibatis框架搭建的,數據庫是oracle,其他還行,關鍵是struts1之前沒用用過,所以只好在網上狂查文檔,最后大致整理了一些struts1的基本使用方法。

首先struts1需要引入的jar包:

因為我的IED是Myeclipse8.5直接引入的,實在是不想在struts的網站找jar了

struts1和2的第一個區別就是xml配置的位置不一樣,struts1的配置文件是放在webRoot/WRB-INF/ib下,叫做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 />
  <form-beans />
  <global-exceptions />
  <global-forwards />
  <action-mappings />
  <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
</struts-config>
<form-beans />:配置bean的
<action-mappings />:配置action,和2中的<action>差不多
web.xml中的配置:
 <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>

總的來說struts1就是一個大的servlet,在接收到request這個大的servlet就分配給對應的servlet,這個總的servlet隱藏在幕后,一般不用動,因為這里只是介紹怎么最基本的使用struts1,因為畢竟還是有一些公司的殘余項目再用。如代碼所示,這個servlet攔截所有的*.do的請求。

頁面有3個,一個index.jsp,success.jsp,failuer.jsp,index.jsp有一個表單,后台做驗證,如果用戶名是jackie,密碼是111111就跳轉到success.jsp,不是的話就跳轉到failuer.jsp.index.jsp的表單如下所示

<form action="check.do" method="post">
  username:<input type="text" name="username">
  <br/>password:<input type="password" name="password">
  <br/>
  <input type="submit" value="submit">
  </form>

其實有<html:text>的標簽,但是我不喜歡用,因為標簽實在是記不過來,而且我一直在想,如果不用jsp改用html怎么辦,所以我個人比較喜歡最原生的標簽

success.jsp:

 <body>
    check success!!! <br>
  </body>

如果用戶名為jackie,密碼為111111就跳轉到這個頁面

failuer.jsp:

 <body>
    check failuer!!! <br>
  </body>

驗證錯誤就跳轉到failuer.jsp頁面

好了,前台的頁面寫好了,就是后台了

首先,既然是框架,無論是否是古老的struts1,那么我最關心的就是他可不可以幫我封裝一個bean,

我們先自己寫一個user對象,這樣struts1就可以幫助我們封裝

package com.xiaoxia.form;

import org.apache.struts.action.ActionForm;

public class User extends ActionForm{
    /**
     * 
     */
    private static final long serialVersionUID = 1L;
    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;
    }
    
}

struts1中的bean與2不同,必須繼承一個叫ActionForm的類,其他的和2一樣,屬性私有,提供get和set的方法。

其次,我們來寫一個處理方法的類

Mycheck.java

package com.yourcompany.struts;

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;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.actions.ForwardAction;

import com.xiaoxia.form.User;

public class Mycheck extends Action {
    
    public ActionForward execute(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //先把form轉換成User的實體bean
        User user = (User) form;
        //做邏輯判斷,如果輸入合法,那么尋找一個success的forward
        if(user.getUsername().equals("jackie") && user.getPassword().equals("111111")){
            return mapping.findForward("success");
        }
        //輸入非法,尋尋找一個failuer的forward
        return mapping.findForward("failuer");
    }
}

其中繼承了struts1中一個叫Action的類,做處理的方法名字必須是execute,四個參數中,一個是mapping,主要是處理完后跳轉用的,ActionForm是struts1中幫助我們封裝的實體bean,剩下的request和response和servlet中的一樣。

java代碼寫完了,最后得配置struts的配置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 />
  <form-beans>
      <form-bean name="user" type="com.xiaoxia.form.User"></form-bean>
  </form-beans>
  <global-exceptions />
  <global-forwards />
  <action-mappings >
      <action name="user" 
                path="/check" 
                type="com.yourcompany.struts.Mycheck"
               
                scope="request" validate="false">
            <forward name="success" path="/success.jsp" />
            <forward name="failuer" path="/failuer.jsp" />
        </action>
  </action-mappings>
  <message-resources parameter="com.yourcompany.struts.ApplicationResources" />
  
  
</struts-config>

其中在<form-beans>中配置相對應的實體bean,name是配置文件中實體bean的名字,type是對應的java類

<action-mappings>中配置對應的action,可以配置多個action,一個action對應一個action的標簽,這里只配置一個,<action>中,name對應的是要使用的實體bean

path是對應的路徑,在index.jsp中的form表單中的action就是“check.do”

type是對應的做處理的類

scope是使用的范圍,validate是驗證,通過驗證才會調用相應的方法,但是現在前台驗證一般都是js,所以這個屬性估計沒太大用

下面的子標簽<forward>就是跳轉的頁面,那么是對應的名字,在java代碼中就是mapping.findForward(".....")中間就是<forward>中對應的名字

其他的就不一一介紹了。這樣一個demo的項目就可以開始跑了

關鍵是比較蛋疼的問題還有一個,就是如果我想規定它跳轉到某個具體方法該怎么辦(處女座的強迫症模式開啟……)

其實也很簡單,但是網上例子真心沒找到,這里總結下,首先,你的Mycheck.java必須集成另一個類叫DispathAction,然后你就可以改名字了

package com.yourcompany.struts;

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;
import org.apache.struts.actions.DispatchAction;
import org.apache.struts.actions.ForwardAction;

import com.xiaoxia.form.User;

public class Mycheck extends DispatchAction {
    
    public ActionForward mycheck(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //先把form轉換成User的實體bean
        User user = (User) form;
        //做邏輯判斷,如果輸入合法,那么尋找一個success的forward
        if(user.getUsername().equals("jackie") && user.getPassword().equals("111111")){
            return mapping.findForward("success");
        }
        //輸入非法,尋尋找一個failuer的forward
        return mapping.findForward("failuer");
    }
}

其次,你必須在struts-config.xml的action中加一個屬性:parameter

    <action name="user" 
                path="/check" 
                type="com.yourcompany.struts.Mycheck"
                   parameter="operate"
                scope="request" validate="false">
            <forward name="success" path="/success.jsp" />
            <forward name="failuer" path="/failuer.jsp" />
        </action>

parameter中隨意指定,但是必須在提交過來的參數中有一個參數名為operate,相應的值對應方法名

2015-05-10 17:44:42

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 




免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM