zoukankan      html  css  js  c++  java
  • Struts2基础知识

    一 概述

        

    计算机生成了可选文字: StrutsZ框架的大致处理流程如卜:
O浏览器发送请求,例如请求/m}lpage.acti。1,、/reports八nyrep。rt.pdr等。
O核心控制器Filteroispatcher根据请求决定调用合适的Action。
O城b灿rk的拦截器链自动对一清求应用通用功能,例如worknow、、alidation或文件
上传等功能。
O回调Actioll的。xecut。方法,该。xecut。方法先获取川户请求参数,然后执行某种
数据库操作,既可以是将数据保存到数据库,也可以从数据库中检索信息。实际上,因为
A以ion只是一个控制器,它会调川业务逻辑组件来处理少IJ户的清求。
OA以ion的execute方法处理结果信息将被输出到浏览器中,可以是HTML页面、
图像,也可以是PDF文档或者其他文档。此时支持的视图技术非常多,既支持JSP,也支
持Velocity、FreeMarke:等模板技术。

    struts2配置文件有两种:配置actionstruts.xml和配置全局属性的struts.properties

    Struts.xml文件定义了一些列的action,定义action的时候指定action的指定类,并定义该action处理结果与视图资源之间的映射关系。

    计算机生成了可选文字: 在上面的StrutS.xml文件中,定义了两个Action。定义Action
的实现类,而且的定义Action的处理结果时,指定了多个:esult,
方法返回值和视图资源之间的映射关系。对于如卜配置片段:
时,不仅定义了A以ion
result元素指定execute
<resul七name二”cancel”七ype二”redirec七一ac七ion'>We工come</resul七>
表示当execute方法返回cancel的字符串时,跳转到Welcolne的Action。定义:esult
元素时,可以指定两个属性:tyPe和11ame。其中11ame指定了execute方法返回的字符串,
此处转向的资源可以是JSP,也可以是FreeMarker等,甚至
是另一个Action―这一也是StrutSZ可以支持多种视图技术的原因。

    struts2的核心是控制器组件。

    A FilterDispatcher

    B:业务控制器Action

    二 命名空间

    计算机生成了可选文字: name、pa(e决定了a(t.on的访问,‘默致为…可以接收所有翻引的a(t.。n
name、pace可以写为,,或者,xxx.或者四皿分对回勺ac,ion访问路径为力ndex.action,/洲习index.action,或
者八众八解泊dex.a(tion.
namespa(e最好也用模块来进行命名

    2package,相当于为了区分里面不同的action的重名的情况

    3

    计算机生成了可选文字: <口On,七ant
<p口Ck几Oe
n日五吧.r,S匕rU:!.口三气叮峨:d三”Val议e.砰七r公巴厅I》
name-.fron七.e器tend,二S亡r翻ts-der咨U二七”::己允护,盆己护‘
<aC七IOnn口加吧=’恤月deX一》
<re,。1'na,亡一,s口cce,s")/NO.之,pace.j即</re,ul七>
<jac七lan》
</p.cka切.>

     

    就是说,想要访问某一个action,那么必须加上namespace的值,那么这里

    要访问的话就是 /front/index

    result如果不写里面的name=success”,就默认为成功。因为SUCCESS是继承的类里面的自己定义的常量。

    计算机生成了可选文字: <packaqena.e一”frant叩ex亡en山.'s七r二:s一d已fault'na加吧,pace一l/front今
<口C七10nn.扣e一”二ndeX一)
<rea吐:)/月..巴月pace‘立月p</re,ul七>
</actian>
</pac七age>
<packogen。”吧-.,.二n介ex:end,.介S七rU亡s-def钧U孟t.na,e,pa:e.”一》
<三C艺工Onna功e…二nd已X,>
<re,ul:、/Na功e,poce,二口p</re,ul七》
</actlan》
风/pac比。e>
:艺U七月》
。,。.}
f.,回二“匕”·‘”一;
加触,吕三0u,11。。口rr。per.:。,
「脚困迹面画画肠回面丽翻困圈曰恤
币ace决定了action的访问路径,默认为”',可以接收所有路径的改tion
‘口a〔e可以写为/,或者/众戈.或者/联刀Vvv.对应的action访问路径

    action的话,如果别的包里没有,那么找namespace为空的执行。

    4、学习视频教程的时候,先把里面的代码导入到工程里面去,学习代码,然后自己再去试验,不必要非得第一次就自己完全的写,要注意,自己的最主要的目标是快速掌握知识点,没必要非得自己背着写出来。

    5、如果从eclipse中左边复制一个工程,然后复制,重新命名一个的话,一定要记住,无web那里,把Web contentroot 名字设置为自己新命名的名字。

    三 通配符

    12:59

    计算机生成了可选文字:

    对于这个URL的分析,首先是端口后面的app,然后就是actions命名空间,然后就是一个action名字。

    计算机生成了可选文字: :kaqena翻e一”actions'.xte乙d,一struts一d.介ult'na胜,pace一/actions护卜
<.口叹沪nn~一,studon心。cia二,一c二.勿琢.stots:.act、on.:tudont孟ct、on,,一thod一(i)·>
<re,ul七>/S七udent111
</口C七IOn)
3UCCe
<ac七lanna.e一”二”cla,,一co.。bjsxt。stru七52。ac七ion。fl}Act工on今
<re,ul七>八1》一12》_3ucce,3·j却</re3ul七>
<竺一《O争_,ucce3,·立聋刀一>
</己C七IOn>
,c比aqe>

    但是在上面的配置中,找不到对应的action名字,但是两个里面全部是用通配符设置好的,

    而对于method={1}" 表示的是前面第一个*匹配的内容,例如上面,很显然,选中的*匹配的是“add”,那么后面的method里面的内容代表的自然就是add

    下面的result里面值也是匹配的,以前需要匹配多个result,这里的话就直接一个。这里的话,需要JSP的命名规则一定要约定好,按照一定的格式。

    下面第二个action

    四 注意点

    1:若拷贝项目后,一定要改web

    计算机生成了可选文字: 肠刀FroPertleStorstruts之_UZUU_Namespace
~巴二习止型口鱼里困
.
Resource
Builders
JavaBuildpath
JavaCodeStyle
JavaCompiler
JavaEditor
JavadocLocation
'MyEclipse
Javascript
JSpFragments
TaskTags
UMLI
1Validation
Web
XDocl改
projectReferenceS
RefactoringHistory
Run/DebugSettings
Rootl丁。9Libraries}Deployment
Web一rootfolder:ZWebRoot
WebContext一root:/StrutsZ一ZO0eNamespace
一巨赢二
(seeNotice)
Notice
Context一rootchangesonlyapplytoexplodedandpackagedWARdeploymentsoft卜15project.
Toupdatet卜econtext一rootwhenthisproject15deployeda、amoduleofanenterpri,eproject
selecttheenterpriseproject.Fromthecontextmenu(;.e.,right一click)choose
MyEclip,e>Add/RemoveModuledialog.Fromt卜15dialogremovetheweb一projectfrom
t卜eenterpri,eproject.Thenre一addtheweb一projecttot卜eenterpriseprojectwhile
specifyingthenewcontext一root·

    2

    23:30

    1Action返回一个结果的名字字符串,例如SUCCESSERROR以及INPUT等,从struts.xml中获取映射信息。一个给定的结果字符串将选择一个页面或其他资源(图片或PDF)来返回给用户。

    3

    1:首先下载 struts2jar

    2:建立 web project

    3然后再struts2的包里面apps里面解压blank那个例子

    4:把里面classes里面的struts配置文件拷到项目的src下,

    5:然后拷贝类库lib中的jarweb_inf下的lib中,可以从navigater视图中看到。

    6:配置web.xml,参考示例程序,把里面filter的东西复制过来

    7:然后在strut.xml配置文件中,将package全部注释掉,重新写一个package

    8Struts2是集成了以前的Webwork

    五 DMI

    9DMI

    2011911

    12:47

    计算机生成了可选文字: ta口ena功e=Nuser'.ex七end,="s七ruts一defaul七”name,pace="/user">
二aCt1On
n~=,恤鑫困’'
<re3ul七>/u,eradd
cla,,'"cozu.b〕sxt.st刊tsZ.user。act工on.UserAction”硬七hod="add">
,ucce,,。j,p</:e3ul七>

    最后面的参数是method,表示:这里调用的不是execute方法了,而是电泳method指定的add方法。这样的话,类里面只要一个名字为add的方法就可以。

    计算机生成了可选文字: pnbliccla8SU,erAc七ion
publlcs七rin口add()
eXtends
i
Actlonsupport《
retUrn
S叮犯SS'

    上面这种不怎么用。

    一、下面是指动态的方法调用DMI

    计算机生成了可选文字: <act工onna功e,,,user.cla,,,'cc腼.bjsx七.stru七sZ.user。action。UserAction,,>
<re3ul七>/u,er_add_succe,,·j,p</re,ult>
</aC七10n》

    这样的话,就不使用method这个参数,直接动态调用里面的方法,就是在action的名字和要调用的方法中间加上一个!,这样的话,如果action类里面有多个方法,却不用写多个action了,想要调用的时候直接用DMI方式就可以了。

    计算机生成了可选文字: '.rlu写叮I'dd

    六 Action接受参数

    x

    2011911

    13:19

    action属性接收参数。

    1:在自己的action类里面,设置属性,然后gettersetter方法。

    2DomainModel接收参数

    所谓的域模型,就是在一个单独的类里存储属性,然后action方法里直接调用就可以了,不要newstruts2会自动new

    例如:

    计算机生成了可选文字: 幻。毛,让吐泛”er
血.r人心t1.跳j.v.
bjotttrut咬.”廿
恤。rja,。
句。吃‘tr吐口篮盯
色仁t】
p.blioclas,口3e:Ac七ionex七endsA。七ionsuppor七二
田.由c.
下O
x」,trut,.x一1
J龟,翻nSL污、r解1.'
盆.f.r.几e.dL盆卜r廿1.二
几卫S,,te.
.od'
prlvateUseru,er尝
『汹『囚
}毋闷由闲
同白日·
pablIcs七rlnoadd(){
Sy,:e扭.ou七.p:1。:Inl一匕压,e=一+u,er.qe七,己口e《)卜君
SY。七e扭.out.pr二n七Inl一aae一+uoe二。Oe七A口e峨》卜;
returnSUCC艺写g:
Llbr叮,}〕众t60_l
贯.、对。ot
',吧了^-I姗
‘才视刃一r即
尹:。吐.二J:P
I
pDblioU,e二
ret口rn
qe:U,e二咤)主
U,er二
以吐么己囱田
J
尸
,尹r.,1.,
跳’\巴知二:1曰口
p百bl几0vo几d,e七口,erlU,eru,er)《
thl,。U日er=U,er言

    计算机生成了可选文字: 口口口口口口口口口口口口口口口口‘...............
',1了,If
叽‘~,',“心月。。.=峙.解“二
鄙

    这样就可以直接调用了。

    还可以对于user里面的属性,多一个DTO,数据传输对象,里面定义属性。那么再根据DTO生成一个user就可以了。

    计算机生成了可选文字: publiccla,。Uae二DIO《
privotes七rlnono.巴:
privates亡rlnqpa,a甘Ord二
privates七rin口ccnf工:比二nqPa,。,ord声
}
T

    计算机生成了可选文字: p.bllcolass口,e:Ac七工onextendsAc七工onsuppor七《
pr!vate口seru,er:
,,p::va:e画熟扭:,er叮。:
p协blIcs七rlnoaddl){
SY,七e也.Ou七·prln:In(一匕。.e二”+u,er.qe七Na口e《)》二
SY,七em.out。prin七In(一a口e一+u,er。Oe匕A口e《》加;
retur。写口亡C艺写S:
口口叨叫双朋朋咖口0000000000000000'
poblIcvo乞d,e七UaerIU,eru,er)丈
thl.。U月er.uBer尝

    3:模型驱动

    计算机生成了可选文字: p.bllcolassUse:Ac七ionextend,Actio。月uppor七11叫ple.旧nt,胜。de1Dr工,en<U,er》丈
prlvateU,eruser昌neUU3erl)言
p.:。。,:::n。。dd《,J
sy,七e皿.Ou七.prln:In(一二盈比e='+u,er.ge七Na口巴()卜;
SY。七em.out.prin七In(一a口e一+uoe二。Oe仁AOel),二
returnSUCC艺S写:
.0,err之已e
p妞bltcU,er口e《Hadel()I
retornU3er尝

    对于MVCv就是那些JSPM就是数据类,c就是action

  • 相关阅读:
    ($children,$refs,$parent)的使用
    watch监听变化
    vue组件间通信六种方式(完整版)
    CSS水平垂直居中常见方法总结2
    CSS水平垂直居中常见方法总结
    Uncaught SyntaxError: Unexpected identifier 报错 import Vue from 'vue';
    前端跳槽面试必备
    防止重复发送Ajax请求问题
    JQuery中的$().each 以及 $.each的区别
    数组中的forEach和map的区别
  • 原文地址:https://www.cnblogs.com/allenzhaox/p/3201811.html
Copyright © 2011-2022 走看看