Struts2Word文档格式.docx
- 文档编号:3007222
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:36
- 大小:3.63MB
Struts2Word文档格式.docx
《Struts2Word文档格式.docx》由会员分享,可在线阅读,更多相关《Struts2Word文档格式.docx(36页珍藏版)》请在冰点文库上搜索。
\ProgramFiles\Java\jdk1.6.0_14\lib
3PATH:
\ProgramFiles\Java\jdk1.6.0_14\bin
4TOMCAT_HOME:
E:
\Softwaretools\apache-tomcat-6.0.20
5CATALINA_HOME:
6CATALINA_BASE:
Struts2的配置(3个步骤)
步骤1.导入最基本的jar包
sturts2-core-2.x.x.jar:
Struts2框架的核心类库
xwork-2.x.x.jar:
Xwork类库,Struts2在其上构建
ognl-2.6.x.jar:
对象导航语言,Struts2框架通过其读写对象属性
freemarker-2.3.x.jar:
Struts2的UI标签的模版使用Freemarker编写
commons-logging-1.1.x.jar:
ASF出品的日志包,Struts框架使用这个日志包来支持Log4j和JDK1.4+的日志记录。
commons-fileupload-1.2.1.jar:
文件上传组件,2.1.6版本后必须加入次文件
commons-io-1..3.2.jar文件上传下载需要
步骤2.将struts.xml放到src下
struts.xml配置
代码:
?
xmlversion="
1.0"
encoding="
?
DOCTYPEstrutsPUBLIC
"
-//ApacheSoftwareFoundation//DTDStrutsConfiguration2.0//EN"
http:
//struts.apache.org/dtds/struts-2.0.dtd"
struts>
<
--<
constantname="
struts.enable.DynamicMethodInvocation"
value="
false"
/>
<
struts.devMode"
//此struts.xml文件修改后是否立即生效
includefile="
example.xml"
packagename="
default"
namespace="
/"
extends="
struts-default"
default-action-refname="
index"
actionname="
resulttype="
redirectAction"
paramname="
actionName"
HelloWorld<
/param>
namespace"
/example<
/result>
/action>
/package>
-->
--Addpackageshere-->
sturts.i18n.encoding"
GBK"
—作用:
官方宣称中文不乱码,但是还有乱码貌似->
修改后不用reload-->
b"
/ab"
>
*"
class="
.Hello2"
method="
{1}"
resultname="
fuckyou"
/Hello2.jsp
fuck"
/Hello.jsp
/struts>
(绿色是保留部分一边copy,不起作用,红色是修改重点)
步骤3.将web.xml放到webroot下的WEB-INF文件夹下
web.xml配置
web-appversion="
2.5"
xmlns="
xmlns:
xsi="
//www.w3.org/2001/XMLSchema-instance"
xsi:
schemaLocation="
filter>
filter-name>
struts2<
/filter-name>
filter-class>
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<
/filter-class>
/filter>
filter-mapping>
url-pattern>
/*<
/url-pattern>
//注意,这里只要这么写/*就可以了,这个从始至终都不要改!
!
/filter-mapping>
/web-app>
注意:
struts2.xml被读取后,将以javabean的形式存放在内存中,以后struts2对每个用户的每次请求处理将使用内存中的数据,而不是每次都读取struts.xml文件了
文件所在
这些struts.xml和web.xml可以在struts-2.1.8.1\apps\struts2-blank-2.1.8.1\WEB-INF\下找到struts.xml和web.xml和jar包
Action注意事项
1更改jsp编码
Window->
Perference->
JSP(搜索)设Encoding为Chinese,nationstander
2复制struts2项目时注意
Copy后的项目->
Property->
web(搜索)修改context-root为“/项目名”
Struts.xml增加文件中的提示
由于xml文件,是根据dtd文件来显示的,而dtd文件并不为MyEclipse所知道,所以要手动的指定dtd所在的位置。
属性中搜索catalog(登记)
将struts的uri复制到key中
Location是那个Struts-2.0.dtd文件的位置(这个文件可以在lib\struts2-core-2.1.8.1.jar解压后找到)
Ok即可
Struts的运行机制
任何的运行机制都要从访问的网址开始:
//localhost:
8888/Struts2Test/hello
首先Tomcat会去寻找Struts2Test这个web站点,然后在这个站点中查看web.xml的配置
发现配置如下:
。
他用/*来匹配所有的访问,则filter调用doFilter,doFileter要参考struts.xml,因此找到struts.xml
查看struts中的namespace“/”,再在namespace为“/”之后查看有没有hello的action,有就直接输出result
NameSpace
namespace是为了较少繁琐的定义路径而设置的
namespace如果不写,就是默认为空:
namespace=””;
如果为空,则namespace匹配所有的url中namespace。
类似*号一样。
8888/1/2/3/4/hello
/1/2/3/4就是可以被空的namespace所匹配。
package与java中的package相似,这里的主要功能是在继承的时候要用的package的name属性,还有用来区分相同的名字。
如果一个package被定义为abstract,则这个包只能被继承,不能定义任何的action
路径问题1(namespace路径问题)
如果访问的路径中的namespace,Struts.xml没有相对应的namespace,则就交给Tomcat去找web.xml是否有相应的设置,如果有就使用例如:
welcome-file-list>
welcome-file>
index.jsp<
/welcome-file>
/welcome-file-list>
就根据它来显示了(其实我试过很过都不行,只有部分可以)
路径问题2(相对和绝对路径问题)
这里要注意:
要全部使用绝对的路径,否则会有问题:
问题例子:
如果你的namespace设置为:
/rotoy要访问的action为hello,hello显示的页面为hello.jsp,index.jsp和hello.jsp是同一目录,都在WebrRoot下面。
而hello.jsp中有一个连接为:
aherf=”index.jsp”>
跳往index.jsp<
/a>
则URL为:
8888/rotoy/hello访问正常,
但是如果点击hello.jsp中的连接,前往index.jsp的时候就出现错误了,找不到页面!
分析:
hello.jsp和index.jsp在同一个目录下面,应该用那个相对路径可以访问的,那为什么出现错误呢?
原因是:
由于程序只知道的是当前的路径,你访问的是hello.jsp则当前的路径是:
888/rotoy,如果你直接点击那个相对路径,则就访问了http:
8888/rotoy/index.jsp页面了,它是在当前的目录寻找,所以就出错了,所以那个连接最好是设置为绝对路径
Action学习内容简要回顾
实现一个Action的3种方法:
1.直接定义一个普通类,有一个返回String类型的execute方法
2.实现Action接口(ActionSupport也是实现此接口)
3.继承ActionSupport接口(最常用,开发时候只用它,
原因:
它封装了许多方法,实现它可以用它的方法
)
struts2调用每个action的类的时候是new一个出来,不是像struts1一样,用相同的一个,这样就避免了线程同步的问题。
查看ActionSupport的源码
如果一个ation没有写class属性,则默认执行的是AtionSupport这个类,这个类用到了另外的一个框架->
xwork
如果要看ActionSupport的源码,必须要给xwor-2.1.X.jar文件附加源码
ActionSupport也是执行的是execute方法,返回success
ActionSupport实现了Action接口
DMI动态方法调用(DynamicMethodInvocation)
运用感叹号(!
)于Action后面来调用Aciton的Class属性所指向的类中的方法
如:
8888/T/abc/abc!
text?
name=abc&
age=20
解:
其中T为一个站点
第一个abc为namespace
第二个abc为action
则text为action类中的一个方法
name和age是向ation类中传递的2个参数
age会自动的在int和String中转换
struts.xml中配置的文件中的<
action>
我们要把它和那个他对应的那个类想成同一个,因为那个类也是一个action,他们指的是同一个的不同映射结果!
不要把它想成:
配置文件中的action,然后这个action对应一个类!
不知这样的!
他们是同一个!
通配符
actionname=”student*”class=”com.baidu.www.count”method=”{1}”>
result>
/ShowResult.jsp
如果访问:
8888/Student/studentadd
那么student就匹配了studentadd,*部分就匹配了add
{1}代码第一个*,{2}代表第二个*……
那么method=”add”了,就是*匹配了add
注意!
匹配顺序:
先匹配最精确的action(就是最符合,最相像的)
带有*号的属于同一级别,谁前谁的优先级别大。
Action接收参数的方法
访问的地址为:
8888/T/abc/count!
add?
age=3
则:
countactionMapping的class中接收:
1用属性接收
1解:
在传递的属性很少时,用属性接收
具体:
要在class中定义好name和age的getter和setter
Struts2会自动的调用并且赋值,我们直接调用name和age即可
man.name=abc&
man.age=3
2用DomainModel接收
所谓的DomainModel就是一个DAO(应该是吧),用来传输数据中一个容器类
2解
可在传递的属性比较多时使用
定义一个DomainModel(另一个类,如man类)
里面定义好属性(name和age),和属性的getter和setter方法
在class中定义好这个DomainModel(即man不初始化),和man的gettersetter方法
Struts2会自动的设置这个man的name和age属性,我们调用即可
用URL来给于参数,调用的URL:
8888/rotoy/add!
man.age=22&
&
man.name=Rotoy
action类中要有man的getter和setter方法
man中要有age和name的getter和setter方法
中文参数问题
如果Struts提交的参数是中文会有乱码
官方解决:
其中的
是官方的解决方案。
配置方法,参看default.properties
简单的参数验证
class中的name属性接收时不满足条件
由于Struts中的class没有request等的对象,所以只能
在class中调用:
this.addFieldError(“name”,”Errormsg”);
JSP中接收
1先在顶端加:
%@tagliburi=”/struts-tags”prefix=”s”%>
2调用<
s:
filederrorfielName=”name”theme=simple”/>
s.propertyvalue=”errors.name[0]”/>
s.debug>
/s:
debug>
//显示debug信息
property>
的作用是专门去取得:
和StackContext(也叫ActionContext)
中的值
ValueStack中放的是:
错误信息和Action类中的属性。
其中
中的:
其中[]是指的数组,{}指的是:
map类型的,{[]}明显是就map中的数组。
Action访问Web元素方法1
Action将要取得:
便于记忆
其中有request(map类型),和session(map类型),application(map类型)放在valuecontext中(也叫Actioncontext,其实是ThreadLocal对象,ThreadLocal就是一个Thead和其值)
而Action中的属性是放在valueStack中的。
这就类似于jsp:
他的page相当于valuesatck中的属性,其他的request,session,application和Action的一一相对应,这样便于记忆。
获取action的web元素:
单态模式:
ActionContext.getContext.get(“request”);
其中:
ActionContext是静态引用,ActionContext.getContext是获得Action Context(ValueContext)的实例。
ActionContext.getContext.get(“request”)是根据key获得request,还可以获得session,和Accpplication
方法分别为:
(由于取得的方法不同,所以只有request要强转)
获取后可以在Action中使用:
Jsp中可以取得:
关于:
propertyvalue=”#request.r1”/>
的写法
由于有说明:
所以可以用#来取值。
(valuestack中的直接取得,不用#)
注意细节:
在action中的requestsessionapplication都是map类型的,在jsp页面中可以取得,说明Struts在这个过程中,已经将action中的map类型的web元素,完全复制到了jsp中的HttpRequsest,HttpSessionHttpApplication中了
Action访问Web元素方法2
Ioc或者DI(最常用)
InversofControl(控制反转)
DependencyInjection(依赖注入)依赖struts2
解释:
都是将自己的属性交给别人来操作,所以依赖别人,叫DI,
有因为交给别人操作是把控制权交给别人,所以是IoC
Action实现了RequestAware,SessionAware,ApplicationAware这些接口,然后重写里买呢的
setRequest(),setSession();
setApplication()方法。
就可以获得他们了
tip:
其实真正开发reuqest几乎不用去获取,因为action的值会自动的放在valuestack里面,
而valuetack又是在request里面!
而application也不用,需要长久的话用数据库,或者放在一个类中。
之前都是map的request等,
如何获得真实HttpRequest呢?
如图:
(因为几乎不用,所以只给图代码)
方法1;
方法2
总结访问web元素
1访问Map类型
a)IoC(反转控制)(主要方法)
b)依赖Struts2
2访问原始类型(真实类型)
a)IoC(反转控制)
模块包含
includefile=”login.xml”/>
//完全复制login.xml内容到这里
这样是为了分工合作比较好。
默认Action
当输入的action不存在时,都转向这个action
Result的类型
type=chain时候的result是指向action的,前面不要加/
默认是dispatcher:
forward)服务器跳转(只能跳转页面,不能是action)(就这2个常用)
redirect:
客户端跳转(只能跳转页面,不能是action)(就这2个常用)
chain:
服务器跳转action(了解即可)
redircAction:
客户端跳转action(了解即可)
freemarker:
跳到freemarker页面(后面讲)
httpheader:
发送头信息(不用)
stream:
:
下载(后面讲)
velocity:
freemarker类似的模版框架(抛弃,freemark超过它)
xslt:
与xml相关的xml语言(不用)
plaintext:
将页面源码显示出来(不用)
tites:
页面分成几块(不用)
result为chain或者redircAction时候跳转其他包的action
用<
paramname/>
来指定
全局的result和package的exends
如果每个action都有一个相同的action,都写麻烦,用global-result
只要配置了这个global-result,这个package的每个action不用写,都有了
那其他的包要用extends来继承这个包的配置,这个继承是继承那个包的所有的配置,所以包括了那个全局结果集
动态result
在struts.xml文件中可以用${属性名}来获取valuestack中的值。
不要和el表达式混淆,el是用在jsp中的
如果在action中将这个变量r根据情况设置,那么就是动态的结果了。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Struts2