日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

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

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

原標題:IT技術交流:Java 輕量級整合開發

ervlet-ActionServlet

控制器,接受用戶請求和狀態改變,以及發出視圖選擇

FilterDispatcher

Action

控制器的一部分,與模型交互,執行狀態改變或狀態查詢,以及告訴ActionServlet 下一個選擇的視圖

ActionForm

狀態改變的數據

vo

ActionMapping

狀態改變事件

xwork.xml

ActionForward

用戶指向或者視圖選擇

Result

三.運行流程

[p=30, 2, left]

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

2.依據web應用上下文找到web應用;如:

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

action

org.apache.struts.action.ActionServlet

config

/WEB-INF/struts-config.xml

2

action

*.do

4. ActionServlet接著大致執行順序如下:

a.讀struts-config.xml形成ActionMapping

b. 依據path找到相應的Action類定義

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

name="userForm"

scope="request"

input="/pages/add.jsp">

c.依據action定義找到Form的定義

name="userForm"

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

d.把頁面參數填充到Form中

e. 調用execute()

f.執行execute()得到ActionFoward

g.依據ActionFoward到mapping中去下一個頁面

四.怎么做

1. 創建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;

}

}

說明:

l ActionForm是一個JavaBean,需繼承org.apache.struts.action.ActionForm類,它捕獲通過HTTP請求傳送的參數

l ActionForm針對每個HTML表單中的字段具有一個對應的屬性

l ActionServlet匹配請求中的參數和ActionForm中的屬性,并調用ActionForm中的setter方法,將參數傳入ActionForm

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

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

2.創建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;

}

}}

說明:

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

l ActionServlet將會組裝ActionForm,并將它傳遞給Action

l Action 通常負責:

? 輸入校驗

? 調用業務邏輯類執行業務邏輯操作

? 決定返回哪個ActionForward

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

? 將輸入的ActionForm強制轉換為UserActionForm

? 從UserActionForm對象中獲取數據信息

? 執行數據信息的邏輯判斷操作

? 根據業務邏輯執行的結果,決定返回哪個ActionForward

3.創建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">

說明:

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

l 標簽內部可以包含多個標簽

l 標簽必須指定name和type屬性

925]? name屬性是給此ActionForm一個標識名稱

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

05]l 標簽可以配置的重要屬性包括:

95]? path-從頁面上通過一個什么樣的URL路徑來訪問Action(不包含.do)

95]? type – 訪問這個URL的時候,調用哪個Action類,這是Action的全路徑類名

95]? name – 這個屬性用來標識哪個ActionForm將被創建,并將提交的表單組件給它

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

創建add.jsp

pageEncoding="gb2312"%>

新增頁面

業務編號:

用戶編號:

用戶姓名:

用戶年齡:

說明:

l 添加一個表單,action為cc.do,這個cc.do的意思,將會告訴struts的ActionServlet,它將需要調用哪個Action來處理這個表單的請求

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

運行流程:

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

l 當你提交表單,實際上是提交到了這樣一個URL地址:http://localhost:8088/web/cc.do,Tomcat將會根據web.xml的配置,將這個請求發送給相應的Servlet,在我們的應用中,Tomcat將會把這個請求發送給org.apache.struts.action.ActionServlet這個類(請參看web.xml的配置)

l 然后ActionServlet根據struts-config.xml的配置信息,調用UserAction對象去處理這個請求,在此之前,它會將頁面表單的請求數據封裝到UserForm對象中,并傳遞給LoginAction

l UserAction返回一個ActionForward對象,包含了將要轉向的路徑信息

l ActionServlet根據這個ActionForward對象所包含的路徑信息,調用相應的頁面去執行響應

Struts1和Struts2的區別和對比:

u Action 類:

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

? Struts 2 Action類可以實現一個Action接口,也可實現其他接口,使可選和定制的服務成為可能。Struts2提供一個ActionSupport基類去 實現 常用的接口。Action接口不是必須的,任何有execute標識的POJO對象都可以用作Struts2的Action對象。

u 線程模式:

? Struts1 Action是單例模式并且必須是線程安全的,因為僅有Action的一個實例來處理所有的請求。單例策略限制了Struts1 Action能作的事,并且要在開發時特別小心。Action資源必須是線程安全的或同步的。

? Struts2 Action對象為每一個請求產生一個實例,因此沒有線程安全問題。(實際上,servlet容器給每個請求產生許多可丟棄的對象,并且不會導致性能和垃圾回收問題)

u Servlet 依賴:

? Struts1 Action 依賴于Servlet API ,因為當一個Action被調用時HttpServletRequest 和 HttpServletResponse 被傳遞給execute方法。

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

u 可測性:

? 測試Struts1 Action的一個主要問題是execute方法暴露了servlet API(這使得測試要依賴于容器)。一個第三方擴展--Struts TestCase--提供了一套Struts1的模擬對象(來進行測試)。

? Struts 2 Action可以通過初始化、設置屬性、調用方法來測試,“依賴注入”支持也使測試更容易。

u 捕獲輸入:

? Struts1 使用ActionForm對象捕獲輸入。所有的ActionForm必須繼承一個基類。因為其他JavaBean不能用作ActionForm,開發者經 常創建多余的類捕獲輸入。動態Bean(DynaBeans)可以作為創建傳統ActionForm的選擇,但是,開發者可能是在重新描述(創建)已經存 在的JavaBean(仍然會導致有冗余的javabean)。

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

u 表達式語言:

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

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

u 綁定值到頁面(view):

? Struts 1使用標準JSP機制把對象綁定到頁面中來訪問。

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

u 類型轉換:

? Struts 1 ActionForm 屬性通常都是String類型。Struts1使用Commons-Beanutils進行類型轉換。每個類一個轉換器,對每一個實例來說是不可配置的。

? Struts2 使用OGNL進行類型轉換。提供基本和常用對象的轉換器。

u 校驗:

? Struts 1支持在ActionForm的validate方法中手動校驗,或者通過Commons Validator的擴展來校驗。同一個類可以有不同的校驗內容,但不能校驗子對象。

? Struts2支持通過validate方法和XWork校驗框架來進行校驗。XWork校驗框架使用為屬性類類型定義的校驗和內容校驗,來支持chain校驗子屬性

u Action執行的控制:

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

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

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

責任編輯:

總結

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

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。