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

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

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

struts2知识

發(fā)布時(shí)間:2023/12/2 编程问答 52 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2知识 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

一、?MVC

??Model 1將所有的程序代碼,都寫(xiě)到JSP頁(yè)面中。

??Model 2:JSP(流程控制、數(shù)據(jù)顯示)?+ JavaBean

??改進(jìn)的Model2:Servlet(流程控制)?+ Jsp(數(shù)據(jù)顯示)?+ JavaBean(業(yè)務(wù)邏輯、數(shù)據(jù)處理)

??MVC:將整個(gè)應(yīng)用程序劃分為3大組件(Model、View、Controller

注意:MVC和三層不是一回事。

二、?Struts2簡(jiǎn)介

struts2是一個(gè)典型的MVC框架。

struts2 = Struts1 + WebWork

struts2下載包的目錄結(jié)構(gòu):apps(示例程序)、docs(幫助文檔)、libjar包)、src(源碼)


一、?Struts2項(xiàng)目的開(kāi)發(fā)流程

1.?創(chuàng)建web項(xiàng)目

2.?導(dǎo)入struts2相關(guān)的Jar

提示:可以解壓apps目錄下的struts-blank.war,從它的lib目錄中拷貝相關(guān)的jar

3.?在web.xml文件中配置struts2的核心控制器(過(guò)濾器)

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

4.?在src中添加struts.xml文件

5.?創(chuàng)建Action類,并添加Action方法

l?方式一:實(shí)現(xiàn)接口Action

常量:INPUT(input)、SUCCESS(success)ERROR(error)、LOGIN(login)、NONE(none)

l?方式二:繼承類ActionSupport

l?方式三:POJO

6.?在struts.xml文件中配置action節(jié)點(diǎn)

7.?編寫(xiě)JSP頁(yè)面

一、?struts.xml配置詳解

1.?struts2的常量,可以在struts.xmlconstant中設(shè)置,也可以單獨(dú)寫(xiě)到struts.properties中。

2.?result節(jié)點(diǎn)的type屬性

??dispatcher:轉(zhuǎn)發(fā)(JSP),默認(rèn)值

??redirect:重定向(JSP或外部url

??redirectAction:重定向到其他的action

??chain:轉(zhuǎn)發(fā)到其他的action

??stream:文件下載

??jsonajax請(qǐng)求時(shí),一般以json格式串返回

3.?常見(jiàn)配置介紹

l?resultname屬性可以省略,默認(rèn)值為success

l?resulttype屬性可以省略,默認(rèn)值為dispatcher

l?用戶訪問(wèn)的url地址,為namespace+actionName

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

<!-- 設(shè)置struts2的常量 -->

<constant name="struts.enable.DynamicMethodInvocation" value="true"></constant>

<!-- 可以有多個(gè)package節(jié)點(diǎn) -->

<!-- name:每個(gè)packagename值都不能相同,必填

?namespace:命名空間(URL地址的一部分)

?extends:一般都要繼承struts-default包 ?-->

<package name="default" namespace="/" extends="struts-default">

<!-- 結(jié)果類型 -->

<result-types>

<result-type name="" class=""></result-type>

</result-types>

<!-- interceptors用戶聲明所有的攔截器 -->

<interceptors>

<!-- interceptor聲明攔截器 -->

<interceptor name="" class=""></interceptor>

<!-- 配置攔截器棧(多個(gè)攔截器可以構(gòu)成攔截器棧) -->

<interceptor-stack name="">

<!-- 引用的攔截器,可以是一個(gè)攔截器棧 -->

<interceptor-ref name="defaultStack"></interceptor-ref>

</interceptor-stack>

</interceptors>

<!-- 配置默認(rèn)的攔截器 -->

<default-interceptor-ref name=""></default-interceptor-ref>

<!-- 默認(rèn)的action。當(dāng)用戶在瀏覽器地址欄中沒(méi)有輸入任何action時(shí),將訪問(wèn)本節(jié)點(diǎn)配置的action -->

<!-- http://localhost:8080/projectname/ -->

<default-action-ref name="login"></default-action-ref>

<!-- 默認(rèn)的action類(當(dāng)action節(jié)點(diǎn)省略時(shí),將使用本節(jié)點(diǎn)配置的類) -->

<default-class-ref class=""></default-class-ref>

<!-- 全局的result -->

<global-results>

<result name="login" type="dispatcher">/login.jsp</result>

<result name="error" type="dispatcher">/error.jsp</result>

</global-results>

<!-- 全局的異常映射 -->

<global-exception-mappings>

<exception-mapping result="error" exception="Java.lang.Exception"></exception-mapping>

<exception-mapping result="error" exception="java.sql.SQLException"></exception-mapping>

<exception-mapping result="error" exception="java.lang.NullPointerException"></exception-mapping>

</global-exception-mappings>

<!-- action可以有多個(gè)(name必填;classmethod可以省略;method如果省略默認(rèn)為execute) -->

<action name="login" class="" method="">

<!-- name可以省略,默認(rèn)值為successtype可以省略,默認(rèn)值是dispatcher -->

<result name="" type=""></result>

</action>

</package>

<!-- 導(dǎo)入其他的struts配置文件,不管有多少個(gè)struts的配置文件,struts2框架而言,只會(huì)加載struts.xml,所有需要將其他的配置文件導(dǎo)入到struts.xml文件中 -->

<include file=""></include>

</struts>

二、?攔截器

1.?定義攔截器

實(shí)現(xiàn)接口:Interceptor

繼承類:AbstractInterceptor

2.?配置攔截器

首先,在Interceptors節(jié)點(diǎn)下添加Interceptor節(jié)點(diǎn);

其次,要么在action中通過(guò)interceptor-ref使用攔截器,要么配置default-interceptor-ref

3.?注意

一旦使用了自定義的攔截器,那么struts2提供的默認(rèn)的攔截器defaultStack將不再起作用。

怎么破?新添加一個(gè)攔截器棧,里面添加對(duì)自定義攔截器和defaultStack的引用,然后將這個(gè)攔截器棧設(shè)置為默認(rèn)的攔截器。

4.?struts2提供的攔截器

params攔截器

validation攔截器

fileUpload攔截器

workflow攔截器

…?…

三、?文件上傳

1.?jsp頁(yè)面的form標(biāo)記,method屬性值必須為post

2.?jsp頁(yè)面的form標(biāo)記,必須添加enctype=multipart/form-data屬性

3.?jsp頁(yè)面中使用type=file的文件域

4.?添加apache文件上傳的jar包:commons-fileuploadcommons-io

5.?在Action類中添加三個(gè)屬性:

private ?File ?xxx;

private ?String ?xxxFileName;

private ?String ?xxxContentType;

6.?在action方法中實(shí)現(xiàn)文件的保存

避免文件名重名時(shí)文件被覆蓋:uuid作為文件名

數(shù)據(jù)庫(kù)中存儲(chǔ)的文件路徑一定要是相對(duì)路徑

如何獲取項(xiàng)目中指定目錄的絕對(duì)路徑

String path = ServletActionContext.getServletContext().getRealPath(“files”);

7.?限制文件大小和文件類型

通過(guò)設(shè)置fileUpload攔截器的參數(shù)即可實(shí)現(xiàn)。

maximumSize:限制文件上傳的大小

allowedTypes:限制文件上傳的類型

<constant name="struts.multipart.maxSize" value="1024000"></constant>

<interceptor-ref?name="fileUpload">

<!--配置允許上傳的文件類型-->

<param?name="allowedTypes">image/bmp,image/png,image/gif,image/jpeg</param>

<!--配置允許上傳的文件大小單位字節(jié)-->

<param?name="maximumSize">5242880</param>

</interceptor-ref>

8.?多文件上傳

只需要將action中的那三個(gè)屬性設(shè)置為數(shù)組即可

private ?File[] ?xxx;

private ?String[] ?xxxFileName;

private ?String[] ?xxxContentType;

四、?文件下載

1.?在action中必須存在一個(gè)InputStream類型的屬性,并且該屬性具有get方法

2.?在struts.xmlactionresult節(jié)點(diǎn)中,type屬性值為stream

<result name=”xxx”?type=”stream”>

??<param name=”contentType”></param>

<param name=”inputName”>類型為inputstream的屬性名</param>

<param name=”contentDisposition”>

??attachment;filename=”${fileName}”

</param>

</stream>

?

五、??struts2中如何使用servlet api

1.?方式一(耦合)

HttpServletRequest request = ServletActionContext.getRequest();

HttpSession session = ServletActionContext.getRequest.getSession();

HttpServletResponse response = ServletActionContext.getResponse();

ServletContext application = ServletActionContext.getServletContext();

2.?方式二(非耦合)

Map<String, Object> request = (Map<String, Object>) ActionContext.getContext().get(“request”);

Map<String, Object> session = ActionContext.getContext().getSession();

Map<String, Object> application = ActionContext.getContext().getApplication();

3.?方式三(非耦合)

讓Action類實(shí)現(xiàn)接口:RequestAwareSessionAware、ApplicationAware

六、?OGNL

1.?ognl:對(duì)象圖導(dǎo)航語(yǔ)言

2.?ognlel相似,都是用來(lái)簡(jiǎn)化jsp中的java代碼

3.?ongl可以從2個(gè)地方獲取數(shù)據(jù)

??ValueStack:值棧。一般值棧中只會(huì)存放當(dāng)前Action類的對(duì)象。

??ActionContextapplication、sessionrequest、pageContextparameters、attr。

注意:值棧中的數(shù)據(jù)可以直接通過(guò)名字獲取;但是ActionContext中的數(shù)據(jù)則需要添加前綴#

#application

#session

#request

#pageContext

#paramteters

#attr

其中attr表示依次從pageContext、request、session、application中獲取數(shù)據(jù)。

七、?struts2的標(biāo)簽

1.?jstl-?JSP標(biāo)準(zhǔn)標(biāo)簽庫(kù)

??核心標(biāo)簽

forEachchoose、when、otherWiseif

??格式化標(biāo)簽

formatDate、formatNumber

2.?struts2提供的標(biāo)簽

form、iteratorifelseselect、checkbox、checkboxlist、radiofielderror

八、?數(shù)據(jù)校驗(yàn)

1.?客戶端驗(yàn)證

通過(guò)JavaScript腳本驗(yàn)證用戶數(shù)據(jù)是否合法

<form>

??<input type=”submit”?value=”save Data”?οnclick=”return checkFormData();”?/>

</form>

<script type=”text/javascript”>

function checkFormData(){

??…?…

??return true|false;

}

</script>

注意:客戶端驗(yàn)證是不安全的。用戶可以通過(guò)禁用js腳本讓js代碼失效;用戶也可以使用HttpRequest來(lái)模擬用戶請(qǐng)求來(lái)避免js驗(yàn)證。

2.?服務(wù)器端驗(yàn)證

服務(wù)器端的驗(yàn)證不能省。

如果沒(méi)有通過(guò)數(shù)據(jù)校驗(yàn),那么默認(rèn)返回input

如果數(shù)據(jù)類型轉(zhuǎn)換失敗了,那么仍然會(huì)執(zhí)行數(shù)據(jù)校驗(yàn)。

如果沒(méi)有通過(guò)數(shù)據(jù)校驗(yàn),那么肯定不再執(zhí)行目標(biāo)action方法。

??重寫(xiě)父類ActionSupportvalidate方法

該Action類中所有的action方法都會(huì)被驗(yàn)證。

??在Action類中添加驗(yàn)證方法validateXxx方法

該驗(yàn)證方法只對(duì)xxx方法起作用。

??在Action類同一個(gè)包中添加xml驗(yàn)證文件

只對(duì)特定的action方法起作用。最大的好處就是不用再編寫(xiě)java驗(yàn)證代碼。

驗(yàn)證文件的格式:ActionClassName-actionAlias-validation.xml。

struts2內(nèi)置的校驗(yàn)器:

l?required:必填校驗(yàn)器

l?requiredstring:必填字符串校驗(yàn)器(trim)

l?int:整數(shù)校驗(yàn)器

l?stringlength:字符串長(zhǎng)度校驗(yàn)器(minLength、maxLength)

l?regex:正則表達(dá)式校驗(yàn)器

l?date:日期校驗(yàn)器

l?double:雙精度校驗(yàn)器

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE validators PUBLIC

????????"-//Apache Struts//XWork Validator 1.0.2//EN"

????????"http://struts.apache.org/dtds/xwork-validator-1.0.2.dtd">

<validators>

<field name="user.userName">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>用戶名不能為空</message>

</field-validator>

<field-validator type="stringlength">

<param name="minLength">6</param>

<param name="maxLength">10</param>

<message>用戶長(zhǎng)度必須介于${minLength}-${maxLength}之間</message>

</field-validator>

</field>

<field name="user.password">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>密碼不能為空</message>

</field-validator>

</field>

<field name="user.phone">

<field-validator type="requiredstring">

<param name="trim">true</param>

<message>手機(jī)號(hào)不能為空</message>

</field-validator>

<field-validator type="regex">

<param name="regex">^(13[0-9]|14[5|7]|15[0|1|2|3|5|6|7|8|9]|18[0|1|2|3|5|6|7|8|9])\d{8}$</param>

<message>手機(jī)號(hào)碼格式錯(cuò)誤</message>

</field-validator>

</field>

</validators>

九、?國(guó)際化

1.?國(guó)際化

同一套應(yīng)用程序,針對(duì)不同語(yǔ)系、不同地區(qū)的用戶顯示特定的語(yǔ)言文字。

zh-CN、zh-HK、zh-TWen-US、

2.?本地化

針對(duì)不同語(yǔ)系、不同地區(qū)添加不同的資源文件

3.?struts2中如何實(shí)現(xiàn)國(guó)際化

首先,在struts.xml文件中配置常量

<constant name="struts.custom.i18n.resources" value="message"></constant>

其次,添加名稱為message的資源文件

message_zh_CN.properties

message_en.properties

message.properties

最后,在JSP頁(yè)面中使用s:text來(lái)顯示文字,在數(shù)據(jù)驗(yàn)證文件中使用<message key=”key”>

十、?ajax

1.?ajax的定義

異步的javascriptxml。

2.?ajax的作用

異步請(qǐng)求,局部刷新

3.?ajax基本概念

ajax不是一種單獨(dú)的技術(shù),它涉及javascript、cssXMLHttpRequest等。它的核心組件是XMLHttpRequest,但是不同的瀏覽器對(duì)XMLHttpRequest的支持不同,所以在創(chuàng)建它的對(duì)象時(shí),要分別對(duì)瀏覽器做出判斷。因此在實(shí)際開(kāi)發(fā)過(guò)程中,我們很少編寫(xiě)原生的ajax代碼,而是使用jQuery等框架提供的ajax函數(shù)來(lái)快速實(shí)現(xiàn)ajax效果。

4.?XMLHttpRequest

l?open(method, url, async)

methodget|post請(qǐng)求發(fā)送的類型

l?onreadystatechange

請(qǐng)求狀態(tài)改變事件,需要掛載function。

readyState==4 ???status==200 ??表示成功

l?send(data)

向服務(wù)器正式發(fā)送請(qǐng)求

5.?jquery提供的ajax函數(shù)

l?load(url)

加載指定url請(qǐng)求的結(jié)果

l?$.get(url, parameter, callback, type)

以get方式向服務(wù)器發(fā)送請(qǐng)求

url:請(qǐng)求的地址

parameter:請(qǐng)求的參數(shù),一般是json格式的對(duì)象{id:5, name:”zhangsan”}

callback:回調(diào)函數(shù)function(data){},其中data代表服務(wù)器返回的結(jié)果

typetext|json|html|xml

l?$.post(url, parameter, callback, type)

以post方式向服務(wù)器發(fā)送請(qǐng)求。參數(shù)同$.get一樣。

l?$.getJSON(url, parameter, callback)

以get方式向服務(wù)器發(fā)送請(qǐng)求。返回的結(jié)果為json格式。

l?$.ajax({})

最底層的ajax函數(shù)。上面的所有函數(shù)都可以通過(guò)本函數(shù)實(shí)現(xiàn)。

$.ajax({

urlurl地址,

type: “get|post”,

data:{id:5, name:”zhangsan”},

dataType: “json”,

success: ?function(data){},

error: function(xhr){}

});

轉(zhuǎn)載于:https://www.cnblogs.com/ws1313123/p/6424721.html

總結(jié)

以上是生活随笔為你收集整理的struts2知识的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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