struts2学习日志.docx

上传人:b****4 文档编号:11718968 上传时间:2023-03-31 格式:DOCX 页数:39 大小:2.93MB
下载 相关 举报
struts2学习日志.docx_第1页
第1页 / 共39页
struts2学习日志.docx_第2页
第2页 / 共39页
struts2学习日志.docx_第3页
第3页 / 共39页
struts2学习日志.docx_第4页
第4页 / 共39页
struts2学习日志.docx_第5页
第5页 / 共39页
点击查看更多>>
下载资源
资源描述

struts2学习日志.docx

《struts2学习日志.docx》由会员分享,可在线阅读,更多相关《struts2学习日志.docx(39页珍藏版)》请在冰豆网上搜索。

struts2学习日志.docx

struts2学习日志

POJO:

普通的java类

从eclipse导出项目:

export——war包直接在tomcat中运行

Eclipse配置按钮:

在菜单栏空白处右击,选CustomizePerspective_CommandGroupsAvailability选中webbrowser

设置使用ie浏览器:

webbrowser__Ie

在eclipse中配置自己的jre和tomcat

MVC架构模式framework框架:

提供了基础类和类库。

Struts2是struts1和webwork的融合license

目的:

将模型和视图分离

M(Model,模型):

表示处理业务逻辑,操作数据

V(View,视图):

表示显示数据和获取用户输入

C(Controller,控制器):

类似中介,保证M和V不会直接交互

MVC的特点:

数据的获取和显示分离;

控制器将不同的模型和视图组合在一起;

应用分为三部分:

模型、视图和控制器

 struts2五大核心jar包 

<从下载的struts2框架中找出下面的jar包> 

1。

Commons-logging.jar --------------  用于通用日志处理 

2。

Freemarker.jar --------------  表现层框架,定义了struts2的可视组件主题 

3。

Ognl.jar --------------  OGNL表达式语言,struts2支持该EL 

4。

Struts2-core.jar --------------   struts22.0.11.2的核心库 

5。

Xwork.jar --------------  webwork的核心库 

如要整合其他框架,则需要添加相应的xxx-plugin.jar如:

 

整合spring需要将这个jar包导入]。

struts2-spring-plugin.jar---struts2的spring插件 

开发struts2项目时,不要一股脑把struts2框架lib下的所有jar复制到自己的项目中,要是在整合其他框架。

那样使得项目显得非常之臃肿。

而且根本没有什么用的加进去。

起不了什么作用。

DomainModel领域模型核心业务

MVC使用filter作为控制器:

方便在应用程里对所有资源进行访问。

Struts概述

Struts2是一个用来开发MVC应用程序的框架。

它提供了web应用程序开发过程中的一些常见问题的解决方案。

1,对输入的数据进行合法的验证

2.统一的布局

3.可扩展性。

Myeclipses使用

导入Tomcat:

window——Preferences——Myeclipse——Servers——Tomcat——enable

导入Jdk:

window——Preferences——Java——InstalledJREs

struts2项目

1.导入jar包lib下边

D:

\struts-2.2.1.1\apps\struts2-blank\WEB-INF\lib

下的jar包

2.在web.xml中配置过滤器WEB_INF下lib下

D:

\struts-2.2.1.1\apps\struts2-blank\WEB-INF下的web.xml

中找

struts2

org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter

struts2

/*

3.编写一个login.jsp文件,用html创建一个表单。

WEB_INF下

4.创建java项目LoginAction.javasrc下

5.创建struts.xmlsrc下

D:

\struts-2.2.1.1\apps\struts2-blank\WEB-INF\classes下的struts.xml

注意:

对struts文件更改之后不需要重新启动服务器将上边的false改为true

Constant常量devMode开发模式

基本操作

1.查看StrutsPrepareAndExecuteFilter源码:

Struts2-core-2.2.1.1.jar——右击——Properties——JavaSourceAttachment—ExternalFolder——D:

/struts-2.2.1.1/src/core/src/main/java

2.导入api文档

Struts2-core-2.2.1.1.jar——右击——Properties——JavadocLocation——Browse——file:

/D:

/java相关软件/struts-2.3.16.3-docs/struts-2.3.16.3/docs/struts2-core/apidocs/

3.复制项目时需注意:

选中项目——右击——Properties——Myeclipse——Web——WebContent-root改为当前项目名。

4.导入别人的项目需注意:

找到项目中的JRESystemLibrary——右击——buildPath——RemovefromBuildpath

重置buildpath:

ConfigureBuildPath——libaries——AddLibaray——选择JreSystemLibaray——WorkSpacedefault

Struts2项目:

1.新建struts2webProject

2.在lib目录下导入jar包。

D:

\struts-2.2.1.1\apps\struts2-blank\WEB-INF\lib需要解压D:

\struts-2.2.1.1\apps下的struts2-blank和struts2-showcase文件。

3.web.xml文件:

参考D:

\struts-2.2.1.1\apps\struts2-blank\WEB-INF中的web.xml

4.增加dtd约束:

复制http:

//struts.apache.org/dtds/struts-2.0.dtd

Window~~prefence~~MyEclipse~~FilesandEditors~~XML~~XMLCatalog~~add~~将上述路径复制到key下~~FileSystem~~D:

\struts-2.2.1.1\src\core\src\main\resources~~struts-2.0.dtd~~打开。

Window~~preference~~选中原来的项目~~Edit~~将KeyType改为URI。

1.Createaclasstostorethewelcomemessage(themodel)

2.Createaserverpagetopresentthemessage(theview)

3.CreateanActionclasstocontroltheinteractionbetweentheuser,themodel,andtheview(thecontroller)

4.Createamapping(struts.xml)tocoupletheActionclassandview

 

Package标签:

struts2使用package来组织模块

Name属性:

必须写,用于其他的包应用当前包

Extends:

当前包继承的包,struts-default为要继承的包的name属性,可以继承其中所有的配置,通常情况下继承struts-default.struts-default这个包在struts-default.xml中定义

Namespace:

可选属性,没有定义,则默认值为”/”,可以访问namespace为/XXX的所有。

如果给定一个值,要调用这个包里的action,则需把这个属性所定义的命名空间添加到有关的url字符串中

http:

//localhost:

8080/contextPath/namespace/actionName.action

index.jsp

Action标签:

一个struts2的请求就是一个action。

Name:

对应url中的请求地址:

http:

//localhost:

8080/项目名/helloworld.action

Class的默认值为:

com.opensymphony.xwork2.ActionSupport

Method的默认值为:

execute

Result标签:

结果表示action方法执行后可能返回一个结果,所以action节点会有多个result节点,多个result子节点使用其name属性来区分。

Name:

标识一个result,和action中method属性的方法对应,默认为success

Type:

表示结果的类型,默认值为dispatcher,即转发到结果(请求转发)

 

在javabean中写:

PublicStringsave(){

Return“details”;

}

在struts2.xml中写:

/WEB-INF/pages/details.jsp

从请求页面的name属性调转到.helloworld.Product类中,用该类的对象调用save()方法,跳转到details.jsp页面

在Product类中定义一个save方法,且返回值为details.

input.jsp

上边的代码实际上默认形式为下:

input.jsp

 

Result标签:

1.Result是action节点的子节点,代表action方法执行后,可能去的一个目的地。

2.同一个action中可以配置多个属性,即action类中的一个方法可以有多个返回值。

Action的name属性对应action方法可能有的一个返回值。

3.Result共有两个属性,name和type:

表示结果的响应类型。

如redirect和dispatcher等

4.Result的type属性:

在struts-default包的result-types标签的name属性中定义。

常用的有:

Dispatcher(默认):

Redirect:

RedirectAction:

重定向到一个action

注意:

通过redirect的响应类型也可以便捷的实现redirectAction的功能。

testAction

/atguigu

OR

/atguigu/testAction

Chain:

转发到一个action

注意:

不能通过type=dispatcher的方式转发到一个action。

只能是:

testAction

/atguigu

 

Namespace

Namespace决定了action的访问路径,默认是“”,可以接收所有路径的action

Namespace可以是/,/xxx,/xxx/yyy,对应的action访问路径为/index.action,/xxx/index.action,/xxx/yyy/index.action

Namespace最好也用模块来进行命名。

Action

具体视图的返回可以由用户自定义的Action来决定

具体的手段是根据返回的字符串找到对应的配置项,来决定视图的内容

具体Action的实现可以是一个普通的java类,里面有publicStringexecute方法即可,或者实现Action接口

不过最常用的是从ActionSupport继承,好处在于可以直接使用struts2封装好的方法。

action和Action类的区别:

1.action:

代表一个struts2的请求;

2.Action类:

能够处理struts2请求的类

》属性的名字必须遵守与javabean属性名相同的命名规则,属性的类型可以是任意类,从字符串到非字符串(基本数据类型)之间可以自动进行类型转换。

》必须有一个不带参的构造器。

通过类反射来创建实例

》struts在执行这个action时,至少有一个供它调用的方法。

》同一个action类可以包含多个action方法。

即一个类可以应答多个action请求。

可以通过不同的name属性来访问不同的方法。

》struts会为每次请求都创建一个新的action实例,即action不是单例的,是线程安全的。

在action中访问web资源

1.什么是web资源

HttpServlet,HttpSession,ServletContext等原生的servletAPI

2为什么访问web资源?

b\s应用的Controller中必然要访问web资源:

向域对象中读写属性,读写cookie,读写realPath。

3.如何访问?

11.和servletAPI解耦的方式:

只能访问有限的servletAPI对象,且只能访问其有限的方法(读取请求参数,读写域对象的属性,使session失效)

》使用servletContext

》实现XxxAware接口

选用的建议:

若一个action类中有多个action方法,且多个方法多需要使用域对象的Map或parameters,则建议使用Aware接口方式。

Session对应的map实际上是SessionMap类型的。

强转后调用其invalidate()方法可以是其session失效!

12.和servletAPI耦合的方式:

可以访问更多的servletAPI的对象,且可以调用其原生方法。

》使用ServletActionContext:

与action相关的servlet上下文

》实现ServletXxxAware接口

Struts2的默认配置文件:

META-INF——struts-default.xml

关于struts2请求的扩展名:

1.在org.apache.struts2包下的default.properties中配置了struts2应用的一些常量。

2.struts2.action.extension定义了当前struts2应用可以接受的请求的扩展名。

3.修改扩展名:

在struts.xml文件中以常量配置的方式修改default.properties所配置的常量。

Default.properties是只读文件

or在src下创建struts.properties设置键值对:

truts.action.extension=action,do,html

访问action的过程:

1.每次访问action,都会创建一个对象

2.调用execute()方法。

返回success

Action类的创建:

(有三种方法,一般使用下边的一种)

PublicclassIndexAction3extendsActionSupport{

PublicStringexecute(){

Return“success”;

}

}

Action执行时并不一定要执行excute方法。

1.在配置文件中配置Action时用method=来指定要执行哪个方法,忘掉。

2.在url地址栏中动态指定(动态方法调用DMI),一般使用此方法。

基本操作:

更改默认语言编码:

Window——Preferences——在搜索栏输入jsp——Encoding给为ChineseNationalStandard

通配符

使用通配符,将配置量降到最低,要遵守约定优于配置的原则。

1.如果输入的action满足多个匹配条件,没有通配符的那个将胜出(即精确匹配的优先)

2.若指定的动作不存在,struts将会尝试把这个uri与任何一个包含着通配符*的动作名进行匹配

3.被匹配到的字符串可以用{1},{2}来引用。

{1}匹配第一个字符串,{2}匹配第二个字符串。

4.{0}匹配整个uri

5.若struts找到的通配符不止一个,则按先后顺序进行匹配。

6.*可以匹配零个或多个字符,但不包括/字符。

若想把/字符包括在内,需要使用**,若需要对某个字符进行转义,需要使用\.

路径问题?

?

?

Struts2中的路径问题是根据action的路径而不是jsp的路径来确定,所以尽量不要使用相对路径

虽然可以用redirect方式解决,但redirect方式并非必要,解决方法很简单,使用统一的绝对路径。

(在jsp中用request.getContextRoot方式来拿到webapp的路径)

或者使用myeclipse经常用的basepath

基本操作:

设置编译器的级别:

项目——右击——properties——JavaCompiler——Compilercompliance(顺从;承诺)level(编译器兼容级别)设为1.6

设置与tomcat关联的jdk:

window——找到Tomcat——jdk——设为使用的jdk

参数的接收

11.Action属性接收参数

1.privateStringname;

privateintage;

publicStringadd(){

System.out.println("name="+name);

System.out.println("age="+age);

returnSUCCESS;

}

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

Action传递参数:

user/user!

add?

name=a&age=8

12.用DomainModel(域模型)接收参数

构建模型:

publicclassUser{

privateStringname;

privateintage;

publicStringgetName(){

returnname;

}

publicvoidsetName(Stringname){

this.name=name;

}

publicintgetAge(){

returnage;

}

publicvoidsetAge(intage){

this.age=age;

}

}

构建action:

privateUseruser;

//privateUserDTOuserDTO;

publicStringadd(){

System.out.println("name="+user.getName());

System.out.println("age="+user.getAge());

returnSUCCESS;

}

publicUsergetUser(){

returnuser;

}

publicvoidsetUser(Useruser){

this.user=user;

}

privateUseruser;

//privateUserDTOuserDTO;

publicStringadd(){

System.out.println("name="+user.getName());

System.out.println("age="+user.getAge());

returnSUCCESS;

}

publicUsergetUser(){

returnuser;

}

publicvoidsetUser(Useruser){

this.user=user;

}

域模型传递参数:

user/user!

add?

user.name=a&user.age=8

13.用ModelDriver(模型驱动)接收参数:

不常用,学习思想。

Stru

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1