日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) >

java创建描述文件,IT技术交流:Java 轻量级整合开发

發(fā)布時(shí)間:2025/5/22 103 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java创建描述文件,IT技术交流:Java 轻量级整合开发 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

原標(biāo)題:IT技術(shù)交流:Java 輕量級(jí)整合開發(fā)

ervlet-ActionServlet

控制器,接受用戶請(qǐng)求和狀態(tài)改變,以及發(fā)出視圖選擇

FilterDispatcher

Action

控制器的一部分,與模型交互,執(zhí)行狀態(tài)改變或狀態(tài)查詢,以及告訴ActionServlet 下一個(gè)選擇的視圖

ActionForm

狀態(tài)改變的數(shù)據(jù)

vo

ActionMapping

狀態(tài)改變事件

xwork.xml

ActionForward

用戶指向或者視圖選擇

Result

三.運(yùn)行流程

[p=30, 2, left]

1.提交request→web容器(即tomcat);

2.依據(jù)web應(yīng)用上下文找到web應(yīng)用;如:

3.再依據(jù)部署描述文件web.xml找到ActionServlet

action

org.apache.struts.action.ActionServlet

config

/WEB-INF/struts-config.xml

2

action

*.do

4. ActionServlet接著大致執(zhí)行順序如下:

a.讀struts-config.xml形成ActionMapping

b. 依據(jù)path找到相應(yīng)的Action類定義

type="cn.javass.s2test.web.action.UserAction"

name="userForm"

scope="request"

input="/pages/add.jsp">

c.依據(jù)action定義找到Form的定義

name="userForm"

type="cn.javass.s2test.vo.UserForm">

d.把頁(yè)面參數(shù)填充到Form中

e. 調(diào)用execute()

f.執(zhí)行execute()得到ActionFoward

g.依據(jù)ActionFoward到mapping中去下一個(gè)頁(yè)面

四.怎么做

1. 創(chuàng)建ActionForm

package cn.javass.s2test.vo;

import java.io.Serializable;

import java.util.*;

import org.apache.struts.action.ActionForm;

public class UserForm extends ActionForm implements Serializable {

private String uuid,userId,name;

private int age;

private Collection ufCol = new ArrayList();

@Override

public String toString(){

return "uuid=="+uuid+"userId=="+userId+"name=="+name+"age=="+age+"ufCol=="+ufCol;

}

public String getUuid() {

return uuid;

}

public void setUuid(String uuid) {

this.uuid = uuid;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public int hashCode() {

final int prime = 31;

int result = 1;

result = prime * result + ((uuid == null) ? 0 : uuid.hashCode());

return result;

}

public boolean equals(Object obj) {

if (this == obj)

return true;

if (obj == null)

return false;

if (getClass() != obj.getClass())

return false;

final UserForm other = (UserForm) obj;

if (uuid == null) {

if (other.uuid != null)

return false;

} else if (!uuid.equals(other.uuid))

return false;

return true;

}

public String getUserId() {

return userId;

}

public void setUserId(String userId) {

this.userId = userId;

}

public Collection getUfCol() {

return ufCol;

}

public void setUfCol(Collection ufCol) {

this.ufCol = ufCol;

}

}

說(shuō)明:

l ActionForm是一個(gè)JavaBean,需繼承org.apache.struts.action.ActionForm類,它捕獲通過(guò)HTTP請(qǐng)求傳送的參數(shù)

l ActionForm針對(duì)每個(gè)HTML表單中的字段具有一個(gè)對(duì)應(yīng)的屬性

l ActionServlet匹配請(qǐng)求中的參數(shù)和ActionForm中的屬性,并調(diào)用ActionForm中的setter方法,將參數(shù)傳入ActionForm

l 我們的add.jsp有四個(gè)表單字段(下面將會(huì)看到),所以,我們需要定義ActionForm中相應(yīng)的setter方法ActionForm中的getter/setter方法,可以通過(guò)Eclipse集成環(huán)境,自動(dòng)生成

l ActionForm中的內(nèi)部屬性全部定義為私有的(private),并通過(guò)公共(public)的getter/setter方法來(lái)訪問(wèn)

2.創(chuàng)建Action類

package cn.javass.s2test.web.action;

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 cn.javass.s2test.business.ebi.UserEbi;

import cn.javass.s2test.util.springhelp.SpringBF;

import cn.javass.s2test.vo.UserForm;

public class UserAction extends Action {

private UserEbi getEbi(){

return (UserEbi)SpringBF.getBF().getBean("user-ebi");

}

public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){

UserForm uf = (UserForm)form;

this.getEbi().create(uf);

uf.setUfCol(this.getEbi().getAll());

System.out.println("col============="+this.getEbi().getAll());

ActionForward af = mapping.findForward("toList");

return af;

}

}}

說(shuō)明:

l Action是一個(gè)Java類,需繼承org.apache.struts.action.Action類

l ActionServlet將會(huì)組裝ActionForm,并將它傳遞給Action

l Action 通常負(fù)責(zé):

? 輸入校驗(yàn)

? 調(diào)用業(yè)務(wù)邏輯類執(zhí)行業(yè)務(wù)邏輯操作

? 決定返回哪個(gè)ActionForward

l 我們的UserAction做了如下事情,這些是一個(gè)Action通常都會(huì)做的最典型的事情:

? 將輸入的ActionForm強(qiáng)制轉(zhuǎn)換為UserActionForm

? 從UserActionForm對(duì)象中獲取數(shù)據(jù)信息

? 執(zhí)行數(shù)據(jù)信息的邏輯判斷操作

? 根據(jù)業(yè)務(wù)邏輯執(zhí)行的結(jié)果,決定返回哪個(gè)ActionForward

3.創(chuàng)建Struts配置文件struts-config.xml

/p>

"-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"

"http://struts.apache.org/dtds/struts-config_1_3.dtd">

name="userForm"

type="cn.javass.s2test.vo.UserForm">

name="userForm"

scope="request"

input="/pages/add.jsp">

說(shuō)明:

l struts-config.xml文件,是由ActionServlet讀取的配置文件,它定義了所有關(guān)于Action、ActionForm、ActionForward等的詳細(xì)信息

l 標(biāo)簽內(nèi)部可以包含多個(gè)標(biāo)簽

l 標(biāo)簽必須指定name和type屬性

925]? name屬性是給此ActionForm一個(gè)標(biāo)識(shí)名稱

925]? type屬性指定了此ActionForm是哪個(gè)類,必須是全路徑的類名

05]l 標(biāo)簽可以配置的重要屬性包括:

95]? path-從頁(yè)面上通過(guò)一個(gè)什么樣的URL路徑來(lái)訪問(wèn)Action(不包含.do)

95]? type – 訪問(wèn)這個(gè)URL的時(shí)候,調(diào)用哪個(gè)Action類,這是Action的全路徑類名

95]? name – 這個(gè)屬性用來(lái)標(biāo)識(shí)哪個(gè)ActionForm將被創(chuàng)建,并將提交的表單組件給它

95]? scope – FormBean的作用域范圍,可以取值為session和request,一般取值都是request

創(chuàng)建add.jsp

pageEncoding="gb2312"%>

新增頁(yè)面

業(yè)務(wù)編號(hào):

用戶編號(hào):

用戶姓名:

用戶年齡:

說(shuō)明:

l 添加一個(gè)表單,action為cc.do,這個(gè)cc.do的意思,將會(huì)告訴struts的ActionServlet,它將需要調(diào)用哪個(gè)Action來(lái)處理這個(gè)表單的請(qǐng)求

l 添加輸入域name,這個(gè)name的表單字段,必須跟UserActionForm中的屬性一致

運(yùn)行流程:

l 當(dāng)你從瀏覽器輸入地址:http://localhost:808...b/pages/add.jsp,Tomcat將按通常情況來(lái)處理這個(gè)JSP并返回瀏覽器

l 當(dāng)你提交表單,實(shí)際上是提交到了這樣一個(gè)URL地址:http://localhost:8088/web/cc.do,Tomcat將會(huì)根據(jù)web.xml的配置,將這個(gè)請(qǐng)求發(fā)送給相應(yīng)的Servlet,在我們的應(yīng)用中,Tomcat將會(huì)把這個(gè)請(qǐng)求發(fā)送給org.apache.struts.action.ActionServlet這個(gè)類(請(qǐng)參看web.xml的配置)

l 然后ActionServlet根據(jù)struts-config.xml的配置信息,調(diào)用UserAction對(duì)象去處理這個(gè)請(qǐng)求,在此之前,它會(huì)將頁(yè)面表單的請(qǐng)求數(shù)據(jù)封裝到UserForm對(duì)象中,并傳遞給LoginAction

l UserAction返回一個(gè)ActionForward對(duì)象,包含了將要轉(zhuǎn)向的路徑信息

l ActionServlet根據(jù)這個(gè)ActionForward對(duì)象所包含的路徑信息,調(diào)用相應(yīng)的頁(yè)面去執(zhí)行響應(yīng)

Struts1和Struts2的區(qū)別和對(duì)比:

u Action 類:

? Struts1要求Action類繼承一個(gè)抽象基類。Struts1的一個(gè)普遍問(wèn)題是使用抽象類編程而不是接口。

? Struts 2 Action類可以實(shí)現(xiàn)一個(gè)Action接口,也可實(shí)現(xiàn)其他接口,使可選和定制的服務(wù)成為可能。Struts2提供一個(gè)ActionSupport基類去 實(shí)現(xiàn) 常用的接口。Action接口不是必須的,任何有execute標(biāo)識(shí)的POJO對(duì)象都可以用作Struts2的Action對(duì)象。

u 線程模式:

? Struts1 Action是單例模式并且必須是線程安全的,因?yàn)閮H有Action的一個(gè)實(shí)例來(lái)處理所有的請(qǐng)求。單例策略限制了Struts1 Action能作的事,并且要在開發(fā)時(shí)特別小心。Action資源必須是線程安全的或同步的。

? Struts2 Action對(duì)象為每一個(gè)請(qǐng)求產(chǎn)生一個(gè)實(shí)例,因此沒有線程安全問(wèn)題。(實(shí)際上,servlet容器給每個(gè)請(qǐng)求產(chǎn)生許多可丟棄的對(duì)象,并且不會(huì)導(dǎo)致性能和垃圾回收問(wèn)題)

u Servlet 依賴:

? Struts1 Action 依賴于Servlet API ,因?yàn)楫?dāng)一個(gè)Action被調(diào)用時(shí)HttpServletRequest 和 HttpServletResponse 被傳遞給execute方法。

? Struts 2 Action不依賴于容器,允許Action脫離容器單獨(dú)被測(cè)試。如果需要,Struts2 Action仍然可以訪問(wèn)初始的request和response。但是,其他的元素減少或者消除了直接訪問(wèn)HttpServetRequest 和 HttpServletResponse的必要性。

u 可測(cè)性:

? 測(cè)試Struts1 Action的一個(gè)主要問(wèn)題是execute方法暴露了servlet API(這使得測(cè)試要依賴于容器)。一個(gè)第三方擴(kuò)展--Struts TestCase--提供了一套Struts1的模擬對(duì)象(來(lái)進(jìn)行測(cè)試)。

? Struts 2 Action可以通過(guò)初始化、設(shè)置屬性、調(diào)用方法來(lái)測(cè)試,“依賴注入”支持也使測(cè)試更容易。

u 捕獲輸入:

? Struts1 使用ActionForm對(duì)象捕獲輸入。所有的ActionForm必須繼承一個(gè)基類。因?yàn)槠渌鸍avaBean不能用作ActionForm,開發(fā)者經(jīng) 常創(chuàng)建多余的類捕獲輸入。動(dòng)態(tài)Bean(DynaBeans)可以作為創(chuàng)建傳統(tǒng)ActionForm的選擇,但是,開發(fā)者可能是在重新描述(創(chuàng)建)已經(jīng)存 在的JavaBean(仍然會(huì)導(dǎo)致有冗余的javabean)。

? Struts 2直接使用Action屬性作為輸入屬性,消除了對(duì)第二個(gè)輸入對(duì)象的需求。輸入屬性可能是有自己(子)屬性的rich對(duì)象類型。Action屬性能夠通過(guò) web頁(yè)面上的taglibs訪問(wèn)。Struts2也支持ActionForm模式。rich對(duì)象類型,包括業(yè)務(wù)對(duì)象,能夠用作輸入/輸出對(duì)象。這種 ModelDriven 特性簡(jiǎn)化了taglib對(duì)POJO輸入對(duì)象的引用。

u 表達(dá)式語(yǔ)言:

? Struts1 整合了JSTL,因此使用JSTL EL。這種EL有基本對(duì)象圖遍歷,但是對(duì)集合和索引屬性的支持很弱。

? Struts2可以使用JSTL,但是也支持一個(gè)更強(qiáng)大和靈活的表達(dá)式語(yǔ)言--"Object Graph Notation Language" (OGNL).

u 綁定值到頁(yè)面(view):

? Struts 1使用標(biāo)準(zhǔn)JSP機(jī)制把對(duì)象綁定到頁(yè)面中來(lái)訪問(wèn)。

? Struts 2 使用 "ValueStack"技術(shù),使taglib能夠訪問(wèn)值而不需要把你的頁(yè)面(view)和對(duì)象綁定起來(lái)。ValueStack策略允許通過(guò)一系列名稱相同但類型不同的屬性重用頁(yè)面(view)。

u 類型轉(zhuǎn)換:

? Struts 1 ActionForm 屬性通常都是String類型。Struts1使用Commons-Beanutils進(jìn)行類型轉(zhuǎn)換。每個(gè)類一個(gè)轉(zhuǎn)換器,對(duì)每一個(gè)實(shí)例來(lái)說(shuō)是不可配置的。

? Struts2 使用OGNL進(jìn)行類型轉(zhuǎn)換。提供基本和常用對(duì)象的轉(zhuǎn)換器。

u 校驗(yàn):

? Struts 1支持在ActionForm的validate方法中手動(dòng)校驗(yàn),或者通過(guò)Commons Validator的擴(kuò)展來(lái)校驗(yàn)。同一個(gè)類可以有不同的校驗(yàn)內(nèi)容,但不能校驗(yàn)子對(duì)象。

? Struts2支持通過(guò)validate方法和XWork校驗(yàn)框架來(lái)進(jìn)行校驗(yàn)。XWork校驗(yàn)框架使用為屬性類類型定義的校驗(yàn)和內(nèi)容校驗(yàn),來(lái)支持chain校驗(yàn)子屬性

u Action執(zhí)行的控制:

? Struts1支持每一個(gè)模塊有單獨(dú)的Request Processors(生命周期),但是模塊中的所有Action必須共享相同的生命周期。

? Struts2支持通過(guò)攔截器堆棧(Interceptor Stacks)為每一個(gè)Action創(chuàng)建不同的生命周期。堆棧能夠根據(jù)需要和不同的Action一起使用。

u MyEclipse支持struts1,不支持struts2。返回搜狐,查看更多

責(zé)任編輯:

總結(jié)

以上是生活随笔為你收集整理的java创建描述文件,IT技术交流:Java 轻量级整合开发的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。