struts2每日一记1

1.struts2是作用在表现的基于模型-视图-控制器模式的开源框架,即mvc框架;

2.strutsstruts1注入了webwork的设计理念,统一了struts1webwork框架,所以struts1webwork将不再有新的版本推出。

3.mvc设计模式:mvc思想将应用分成3个基本部分,modelviewcontrollers这三个部分之间耦合性非常小,从而提高了应用的可扩展性和可维护性。

4.struts1框架的复习:struts的大致流程》》将其分成两个部分:1.服务器启动时,启动中央控制器(在web.xml中配置的ActioServlet)。

2.当浏览器端发送请求到服务器,struts1的中央控制器接收请求后根据struts-config.xml中寻找对应的映射关系。若找到就到action里执行相应的方法,去执行相应的逻辑操作,若找不到就返回错误信息到jsp页面。

5.struts2的框架 struts2的大致流程:浏览器发送请求(*.action),中央控制器(过滤器)接收请求,去配置文件(*.properties,*.xml)中找相应的配置和actionaction会去器代 理 的action中找到相应的包,包中若定义了拦截器,则先通过拦截器到达到actionaction通过调用相应的方法处理逻辑业务,然后通过层层拦截器返回给中央控制器,中央控制器将处理结果返回给viewjsp),通过处理够将其展现给浏览器的客户端。

下面开始sturts2的具体工作:1搭建struts2环境 a.加入struts2jar

上传文件

commons-fileupload-1.2.1.jar

commons-io-1.3.2.jar

模板语言

freemarker-2.3.16.jar

分析、编辑和创建Java字节码的类库

javassist-3.7.ga.jar

核心库

ognl-3.0.jar

xwork-core-2.2.1.1.jar

struts2-core-2.2.1.1.jar

可选

使用Struts sx标签

struts2-dojo-plugin-2.1.8.jar

数据校验

commons-validator-1.3.1.jar

与Spring整合

struts2-spring-plugin-2.2.1.1.jar

2.web.xml配置struts2中央控制器(过滤器),可以从

struts2-blank.war\WEB-INF\web.xml下拷贝

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

c.

在src下定义struts.xml,可以从struts2-blank.war\WEB-INF\src\java\struts.xml下拷贝,清空原有的配置

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

<!DOCTYPE struts PUBLIC

 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"

 "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>

</struts>

d.部署测试运用

2.第一个Struts应用程序,运行/hello.action,请求通过Action调转到jsp页面显示Hello World

在Struts2中定义Action来代替Serlvlet处理请求。思路相似,写法不同

编写Servlet类继承HttpServlet

编写Action 继承Action

编写Action

重写services方法处理请求

定义execute方法

定义任何方法处理请求

在services方法内跳转

在struts-config.xml中定义跳转

在struts.xml中定义跳转

在web.xml中注册servlet

在struts-config.xml中注册action

在struts.xml中注册action

a.编写hello.jsp

b.编写HelloWorldAction

public class HelloWorldAction {

public String execute() throws Exception {

return "success";

}

}

c.编写struts.xml

<struts>

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

<action name="hello"

class="com.puckasoft.web.action.HelloWorldAction" method="execute">

<result name="success" type="dispatcher">/hello.jsp</result>

</action>

</package>

</struts>

当访问/hello时,Struts2调用HelloWorldAction类的execute方法处理请求。

Execute方法返回success字符串,Struts2根据success查找对应的路径/hello.jsp跳转

d.测试运用

3. Action的三种写法

a.POJO Actions - 任意的类都可以作为Action,甚至不需要实现任何接口,也不需要继承某个父类

public class HelloWorldAction {

public String execute() throws Exception {

return "success";

}

}

b.实现 com.opensymphony.xwork2.Action 接口,这种方式可以借助于Action接口中定义的方法来规范请求的处理,定义的常量来规范方法的返回值。

Action源码如下

package com.opensymphony.xwork2;

public interface Action {

 public static final String SUCESS"success";

 public static final String NONE = "none";

 public static final String ERROR = "error";

 public static final String INPUT = "input";

 public static final String LOGIN = "login";

 public String execute() throws Exception;

}

public class HelloWorldAction2 implements Action {

public String execute() throws Exception {

return Action.SUCCESS;

}

}

c.继承 com.opensymphony.xwork2.ActionSupport 类。 ActionSupport类实现了Action接口,同时提供了国际化和校验的方法,这样可以大大简化Action的编写,在工作中,通常采用这种方式完成Action的定义。

ActionSupport源码如下

public class ActionSupport implements Action, Validateable, ValidationAware, TextProvider, LocaleProvider, Serializable {

 public String execute() throws Exception {

 return SUCCESS;

}//成功跳转的方法

 public void valiadate() {

}//验证访问的方法

public void addFieldError(String fieldName, String errorMessage) {

 ...

}//文件出错方法

 public Locale getLocale() {//国际化的方法,找到本地路径

 ...

}

public String getText(String aTextName) {//取国际化资源

 ...

}

}

public class HelloWorldAction3 extends ActionSupport {

}

struts2的Action非单例,每次用户请求到来以后都会产生一个新的实例,而struts1的Action 是单例的,在编写struts1的Action的时候务必要小心线程安全问题 , 而struts2中该问题不复存在

注:如何查看框架源码

点击Attach Source… 按钮,点击 External Folder ... 按钮,弹出文件对话框.选择源码存放的路径,再点击Apply按钮完成操作。

Struts2的源码在struts-2.2.1.1\src\core\src\main\java目录下

Webwork的源码在struts-2.2.1.1\src\xwork-core\src\main\java 目录下

4.配置文件介绍

在tomcat的config目录下有个全局web.xml ,对所有部署在tomcat中的webapp都有效。

在Struts2_01_Helloworld的WebRoot/WEB-INF目录下也有一个局部的web.xml,只对该工程有效。Struts2也有这样的设计。

Struts2配置文件:

struts-default.xml :struts2全局配置文件, struts2框架启动时会自动加载该文件

位置:struts2-core-2.2.1.1.jar/struts-default.xml

作用:定义bean和一个抽象的包。包中定义了返回类型、拦截器、拦截器栈、默认的拦截器和默认的Action

<struts>

 <bean class="com.opensymphony.xwork2.ObjectFactory" name="xwork" />

. . .

 <package name="struts-default" abstract="true">

 <result-types>

 <result-type name="dispatcher" class="org.apache.struts2.dispatcher.ServletDispatcherResult" default="true"/>

 <result-type name="redirect" class="org.apache.struts2.dispatcher.ServletRedirectResult"/>

 

 </result-types>

 <interceptors>

 <interceptor name="autowiring" class="com.opensymphony.xwork2.spring.interceptor.ActionAutowiringInterceptor"/>

 <interceptor name="fileUpload" class="org.apache.struts2.interceptor.FileUploadInterceptor"/>

 <interceptor name="i18n" class="com.opensymphony.xwork2.interceptor.I18nInterceptor"/>

 <interceptor name="modelDriven" class="com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor"/>

 <interceptor name="params" class="com.opensymphony.xwork2.interceptor.ParametersInterceptor"/>

  . . .

 <interceptor-stack name="basicStack">

 <interceptor-ref name="exception"/>

 <interceptor-ref name="servletConfig"/>

 <interceptor-ref name="prepare"/>

 <interceptor-ref name="checkbox"/>

 <interceptor-ref name="multiselect"/>

 <interceptor-ref name="actionMappingParams"/>

 <interceptor-ref name="params">

 <param name="excludeParams">dojo\..*,^struts\..*</param>

 </interceptor-ref>

 <interceptor-ref name="conversionError"/>

 </interceptor-stack>

. . .

 

 <interceptor-stack name="defaultStack">

 <interceptor-ref name="exception"/>

 <interceptor-ref name="alias"/>

 <interceptor-ref name="servletConfig"/>

 <interceptor-ref name="i18n"/>

 <interceptor-ref name="prepare"/>

 <interceptor-ref name="chain"/>

 <interceptor-ref name="debugging"/>

 <interceptor-ref name="scopedModelDriven"/>

 <interceptor-ref name="modelDriven"/>

 <interceptor-ref name="fileUpload"/>

 <interceptor-ref name="checkbox"/>

 <interceptor-ref name="multiselect"/>

 <interceptor-ref name="staticParams"/>

 <interceptor-ref name="actionMappingParams"/>

 <interceptor-ref name="params">

 <param name="excludeParams">dojo\..*,^struts\..*</param>

 </interceptor-ref>

 <interceptor-ref name="conversionError"/>

 <interceptor-ref name="validation">

 <param name="excludeMethods">input,back,cancel,browse</param>

 </interceptor-ref>

 <interceptor-ref name="workflow">

 <param name="excludeMethods">input,back,cancel,browse</param>

 </interceptor-ref>

 </interceptor-stack>

 </interceptors>

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

 <default-class-ref class="com.opensymphony.xwork2.ActionSupport" />

 </package>

</struts>

struts.xml : 用户自定义,

位置:src /struts.xml

作用:定义WebApp中的各种Action、返回结果、异常处理和拦截器信息

default.properties:Struts2全局常量文件,框架启动时会自动加载该文件

位置:struts2-core-2.2.1.1.jar/org/apache/struts2/default.properties

作用:定义系统配置信息

# struts.configuration=org.apache.struts2.config.DefaultConfiguration

# struts.locale=en_US

struts.i18n.encoding=UTF-8

# struts.objectFactory = spring

struts.objectFactory.spring.autoWire = name

struts.objectFactory.spring.useClassCache = true

struts.objectFactory.spring.autoWire.alwaysRespect = false

#struts.objectTypeDeterminer = tiger

#struts.objectTypeDeterminer = notiger

# struts.multipart.parser=cos

# struts.multipart.parser=pell

struts.multipart.parser=jakarta

# uses javax.servlet.context.tempdir by default

struts.multipart.saveDir=

struts.multipart.maxSize=2097152 

# struts.custom.properties=application,org/apache/struts2/extension/custom

#struts.mapper.class=org.apache.struts2.dispatcher.mapper.DefaultActionMapper

struts.action.extension=action,,

struts.serve.static=true

struts.serve.static.browserCache=true

struts.enable.DynamicMethodInvocation = true

struts.enable.SlashesInActionNames = false

struts.tag.altSyntax=true

struts.devMode = false

struts.i18n.reload=false

struts.ui.theme=xhtml

struts.ui.templateDir=template

#sets the default template type. Either ftl, vm, or jsp

struts.ui.templateSuffix=ftl

struts.configuration.xml.reload=false

struts.velocity.configfile = velocity.properties

struts.velocity.contexts =

struts.velocity.toolboxlocation=

struts.url.http.port = 80

struts.url.https.port = 443

struts.url.includeParams = none

# struts.custom.i18n.resources=testmessages,testmessages2

struts.dispatcher.parametersWorkaround = false

#struts.freemarker.manager.classname=org.apache.struts2.views.freemarker.FreemarkerManager

struts.freemarker.templatesCache=false

struts.freemarker.beanwrapperCache=false

struts.freemarker.wrapper.altMap=true

struts.freemarker.mru.max.strong.size=100

struts.xslt.nocache=false

struts.mapper.alwaysSelectFullNamespace=false

struts.ognl.allowStaticMethodAccess=false

struts.el.throwExceptionOnFailure=false

struts.ognl.logMissingProperties=false

struts.ognl.enableExpressionCache=true

struts.properties: 用户自定义

位置:src/struts.properties

作用:覆盖系统配置信息

5.Action的访问路径与常量配置方法

Action的访问路径是由Action的名字,所在包的命名空间,和常量struts.action.extension共同决定的
struts.action.extension的默认值是action, ,
也就是说要访问配置文件中的Action 可以运行/helloworld 和 /helloworld.action
指定请求Action的后缀为do,action后,就只能通过/helloworld.do helloworld.action 访问Action

常量配置:

Struts2常量可以在web.xml,struts.xml,struts.properties等多处配置

以配置Action访问路径的后缀为例子

a.在struts.xml中配置 

格式

<constant name="参数名" value="参数值"> 

代码

<constant name="struts.action.extension" value="do"></constant>

b.在struts.properties中配置

格式

参数名=参数值 

代码

struts.action.extension=action

c.在web.xml中的StrutsPrepareAndExecuteFilter中配置 

格式

<init-param>

<param-name>参数名</param-name> 

<param-value>参数值</param-value> 

</init-param>

代码

<filter>

<filter-name>struts2</filter-name>

<filter-class>

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

</filter-class>

<init-param>

 <param-name>struts.action.extension</param-name>

 <param-value>do,action,,</param-value>

</init-param>

</filter>

不推荐在web.xml中配置,比较繁琐,可读性差

struts.xmlstruts.properties选择一种即可

练习:比较三种配置方法谁的优先级最高

加载顺序如下:

1.struts2-core-2.2.1.1.jar/struts-default.xml(最最低)

2.struts2-core-2.2.1.1.jar/org/apache/struts2/default.properties(最低)

3.%class_path%/struts.xml(低)

4.%class_path%/struts.properties

5.web.xml(高)

练习:配置开发模式,struts.devMode的默认值是false,改成true时可以热启动web服务器

配置字符集编码为Utf-8

<constant name="struts.devMode" value="true"></constant>

<constant name="struts.i18n.encoding" value="GBK"></constant>

6.struts.xml配置文件详解

Package标签

在struts.xml 配置业务逻辑控制器, Action 必须要配置在package中,package的概念跟程序中包的概念类似。

功能:

解决了Action命名冲突

将功能类似的Action放到同一个包中,易于维护和管理。

配置格式:

<package name="" namespace="" extends=" " >

属性:

name属性(必选) : 包的名字,最好根据业务功能模块命名,如果其他包要继承该包,必须通过该属性进行引用

namespace属性(可选,默认为空字符串) : 定义该包的命名空间,命名空间作为访问该包下的Action的路径的一部分

abstract属性(可选) : 定义该包是否抽象,抽象时不能包含action。

extends属性(可选) : 定义父包,可继承父包的Action,拦截器和拦截器栈。通常继承struts-default包, 因为它 定义了一些拦截器和跳转类型。这些拦截器实现了 诸如将请求中把请求参数封装到action、文件上传和数据验证等等核心功能。

struts-default包定义在struts2-core-2.2.1.1.jar/struts-default.xml中

Action标签

配置格式:

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

属性:

name属性(必填):action的名字

class属性(选填,默认值为ActionSupport类):action的类名

method属性(选填,默认值为execute):action的方法名

Result标签

配置格式

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

name属性(选填,默认值为success):result名字,和Action的execute方法的返回对应

type属性(选填,默认值为dispatcher):result类型,dispatcher为服务器内部跳转

简化Struts配置

<action name="hello">

<result>/hello.jsp</result>

</action>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值