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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

struts2知识

發布時間:2023/12/2 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 struts2知识 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一、?MVC

??Model 1將所有的程序代碼,都寫到JSP頁面中。

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

??改進的Model2:Servlet(流程控制)?+ Jsp(數據顯示)?+ JavaBean(業務邏輯、數據處理)

??MVC:將整個應用程序劃分為3大組件(Model、View、Controller

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

二、?Struts2簡介

struts2是一個典型的MVC框架。

struts2 = Struts1 + WebWork

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


一、?Struts2項目的開發流程

1.?創建web項目

2.?導入struts2相關的Jar

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

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

<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.?創建Action類,并添加Action方法

l?方式一:實現接口Action

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

l?方式二:繼承類ActionSupport

l?方式三:POJO

6.?在struts.xml文件中配置action節點

7.?編寫JSP頁面

一、?struts.xml配置詳解

1.?struts2的常量,可以在struts.xmlconstant中設置,也可以單獨寫到struts.properties中。

2.?result節點的type屬性

??dispatcher:轉發(JSP),默認值

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

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

??chain:轉發到其他的action

??stream:文件下載

??jsonajax請求時,一般以json格式串返回

3.?常見配置介紹

l?resultname屬性可以省略,默認值為success

l?resulttype屬性可以省略,默認值為dispatcher

l?用戶訪問的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>

<!-- 設置struts2的常量 -->

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

<!-- 可以有多個package節點 -->

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

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

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

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

<!-- 結果類型 -->

<result-types>

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

</result-types>

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

<interceptors>

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

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

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

<interceptor-stack name="">

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

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

</interceptor-stack>

</interceptors>

<!-- 配置默認的攔截器 -->

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

<!-- 默認的action。當用戶在瀏覽器地址欄中沒有輸入任何action時,將訪問本節點配置的action -->

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

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

<!-- 默認的action類(當action節點省略時,將使用本節點配置的類) -->

<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可以有多個(name必填;classmethod可以省略;method如果省略默認為execute) -->

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

<!-- name可以省略,默認值為successtype可以省略,默認值是dispatcher -->

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

</action>

</package>

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

<include file=""></include>

</struts>

二、?攔截器

1.?定義攔截器

實現接口:Interceptor

繼承類:AbstractInterceptor

2.?配置攔截器

首先,在Interceptors節點下添加Interceptor節點;

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

3.?注意

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

怎么破?新添加一個攔截器棧,里面添加對自定義攔截器和defaultStack的引用,然后將這個攔截器棧設置為默認的攔截器。

4.?struts2提供的攔截器

params攔截器

validation攔截器

fileUpload攔截器

workflow攔截器

…?…

三、?文件上傳

1.?jsp頁面的form標記,method屬性值必須為post

2.?jsp頁面的form標記,必須添加enctype=multipart/form-data屬性

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

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

5.?在Action類中添加三個屬性:

private ?File ?xxx;

private ?String ?xxxFileName;

private ?String ?xxxContentType;

6.?在action方法中實現文件的保存

避免文件名重名時文件被覆蓋:uuid作為文件名

數據庫中存儲的文件路徑一定要是相對路徑

如何獲取項目中指定目錄的絕對路徑

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

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

通過設置fileUpload攔截器的參數即可實現。

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>

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

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

</interceptor-ref>

8.?多文件上傳

只需要將action中的那三個屬性設置為數組即可

private ?File[] ?xxx;

private ?String[] ?xxxFileName;

private ?String[] ?xxxContentType;

四、?文件下載

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

2.?在struts.xmlactionresult節點中,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類實現接口:RequestAwareSessionAwareApplicationAware

六、?OGNL

1.?ognl:對象圖導航語言

2.?ognlel相似,都是用來簡化jsp中的java代碼

3.?ongl可以從2個地方獲取數據

??ValueStack:值棧。一般值棧中只會存放當前Action類的對象。

??ActionContextapplicationsessionrequestpageContextparametersattr

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

#application

#session

#request

#pageContext

#paramteters

#attr

其中attr表示依次從pageContextrequestsessionapplication中獲取數據。

七、?struts2的標簽

1.?jstl-?JSP標準標簽庫

??核心標簽

forEachchoosewhenotherWiseif

??格式化標簽

formatDateformatNumber

2.?struts2提供的標簽

formiteratorifelseselectcheckboxcheckboxlistradiofielderror

八、?數據校驗

1.?客戶端驗證

通過JavaScript腳本驗證用戶數據是否合法

<form>

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

</form>

<script type=”text/javascript”>

function checkFormData(){

??…?…

??return true|false;

}

</script>

注意:客戶端驗證是不安全的。用戶可以通過禁用js腳本讓js代碼失效;用戶也可以使用HttpRequest來模擬用戶請求來避免js驗證。

2.?服務器端驗證

服務器端的驗證不能省。

如果沒有通過數據校驗,那么默認返回input

如果數據類型轉換失敗了,那么仍然會執行數據校驗。

如果沒有通過數據校驗,那么肯定不再執行目標action方法。

??重寫父類ActionSupportvalidate方法

該Action類中所有的action方法都會被驗證。

??在Action類中添加驗證方法validateXxx方法

該驗證方法只對xxx方法起作用。

??在Action類同一個包中添加xml驗證文件

只對特定的action方法起作用。最大的好處就是不用再編寫java驗證代碼。

驗證文件的格式:ActionClassName-actionAlias-validation.xml

struts2內置的校驗器:

l?required:必填校驗器

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

l?int:整數校驗器

l?stringlength:字符串長度校驗器(minLengthmaxLength)

l?regex:正則表達式校驗器

l?date:日期校驗器

l?double:雙精度校驗器

<?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>用戶長度必須介于${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>手機號不能為空</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>手機號碼格式錯誤</message>

</field-validator>

</field>

</validators>

九、?國際化

1.?國際化

同一套應用程序,針對不同語系、不同地區的用戶顯示特定的語言文字。

zh-CNzh-HKzh-TWen-US

2.?本地化

針對不同語系、不同地區添加不同的資源文件

3.?struts2中如何實現國際化

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

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

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

message_zh_CN.properties

message_en.properties

message.properties

最后,在JSP頁面中使用s:text來顯示文字,在數據驗證文件中使用<message key=”key”>

十、?ajax

1.?ajax的定義

異步的javascriptxml

2.?ajax的作用

異步請求,局部刷新

3.?ajax基本概念

ajax不是一種單獨的技術,它涉及javascriptcssXMLHttpRequest等。它的核心組件是XMLHttpRequest,但是不同的瀏覽器對XMLHttpRequest的支持不同,所以在創建它的對象時,要分別對瀏覽器做出判斷。因此在實際開發過程中,我們很少編寫原生的ajax代碼,而是使用jQuery等框架提供的ajax函數來快速實現ajax效果。

4.?XMLHttpRequest

l?open(method, url, async)

methodget|post請求發送的類型

l?onreadystatechange

請求狀態改變事件,需要掛載function

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

l?send(data)

向服務器正式發送請求

5.?jquery提供的ajax函數

l?load(url)

加載指定url請求的結果

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

以get方式向服務器發送請求

url:請求的地址

parameter:請求的參數,一般是json格式的對象{id:5, name:”zhangsan”}

callback:回調函數function(data){},其中data代表服務器返回的結果

typetext|json|html|xml

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

以post方式向服務器發送請求。參數同$.get一樣。

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

以get方式向服務器發送請求。返回的結果為json格式。

l?$.ajax({})

最底層的ajax函數。上面的所有函數都可以通過本函數實現。

$.ajax({

urlurl地址,

type: “get|post”,

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

dataType: “json”,

success: ?function(data){},

error: function(xhr){}

});

轉載于:https://www.cnblogs.com/ws1313123/p/6424721.html

總結

以上是生活随笔為你收集整理的struts2知识的全部內容,希望文章能夠幫你解決所遇到的問題。

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