笔记本电脑在追求梅花纤薄系列的路上都做出过哪些改变

Struts2支持的不同类型的返回结果为:
Chain Result--&type="chain"用来处理Action链
Dispatcher Result --&type="dispatcher"用来转向页面,通常处理JSPFreeMarker
Result --&type="freemarker"处理FreeMarker模板HttpHeader
Result --&type="httpheader"用来控制特殊的Http行为Redirect
Result --&type="redirect"重定向到一个URLRedirect Action
Result --&type="redirectAction"重定向到一个ActionStream
Result --&type="stream"向浏览器发送InputSream对象,通常用来处理文件下载Velocity
Result --&type="velocity"处理Velocity模板XLST Result --&type="xslt"处理XML/XLST模板PlainText
Result --&type="plainText"显示原始文件内容,例如文件源代码另外第三方的result类型还包括JasperReports Plugin,专门用来处理JasperReport类型的报表输出。
dispatcher:用于页面转发,页面跳转过程一直是同一个线程,Action中的数据一直保存在。
redirect:可用于返回一个页面、一个action、链接到一个网址。&&&&&&&缺点:redirect把一个http返回码(SUCCESS)以及返回的页面位置一起重新发给web服务器,容纳后由web服务器产生一个新的HTTP请求,就会产生一个新的线程,保存在原来Action执行的线程中的数据就无法访问。所以,result需要包含Action的数据,那么redirect不是一个可行的办法。因为新的HTTP请求时在Servlet容器的新的线程中处理的,ActionContext中的所有状态都不会存在。
chain:功能与redirect的action转发类似,不过与redirectaction转发功能不同的是它可以将Action中的数据一直保存在同一个HTTP请求中。
关于struts2的其他事儿
===============&& &package&===============
struts.xml 中的package的name可以随意定义,只做继承时使用。
===============& &constent&===============struts.xml 中用&constent name="" value=""/&来改变default.proerties 中key对应的值
==============================================覆盖默认的资源文件 -- default.properties==============================================也可以在clasess(/src)下建立struts.properties的方式,覆盖默认的配置文件default.proerties内容如:struts.i18n.encoding=gbk&&&& &设置字符集struts.action.extension=do&&& 设置请求后缀名struts.configuration.files=struts-default.xml,struts-plugin.xml,struts.xml&&&&&Struts2自动加载的配置文件
==============&&& 抽象包==============&package name="..."&abstract="true"&表示该包中不能有action定义,只能通过包来继承来定义
=============& 命名空间=============&package name="..."&namespace=""&将不同的应用分割开如果不配置,表示当前包在一个默认的命名空间里
namespace="/hello"请求路径就改变为 /hello/register
需要更改表单路径 并且一定要手工加.action&s:form action="/hello/register.action"&
寻找方式,如果namespace为默认,而表单路径为/hello/register.action当struts没有找到该命名空间是,自动到默认的命名空间找
=============================&& &include&& 模块化的配置&=============================
&include file="struts_1.xml"&&/include&&include file="struts_2.xml"&&/include&
struts_1.xml和struts_2.xml都是标准的strust的xml配置文件include后,struts会在启动后将struts_1.xml和struts_2.xml的配置信息一同加载到内存中。
===============& Struts2 MVC===============FilterDispatcher ----- 核心控制器
每个action ------- 业务控制器&--------- 调用业务逻辑组件 ---- 调用DAO ---- 数据库交互
=================&&& 分模块开发=================
src下建立struts1.xmlstruts2.xml
不同的开发人员,只需要写自己的xml配置文件只需要加入到struts.xml中&include&file="struts1.xml"/&&include&file="struts2.xml"/&
----------------struts1.xmlxml声明,DTD信息...& 结构与struts.xml相同&struts&&&package name="" ...&&&...&......
----------------struts2.xmlxml声明,DTD信息...& 结构与struts.xml相同&struts&&&package name="" ...&&&...&......
================&& 模型驱动================
**属性驱动**:表单的字段都作为Action的属性存在
**模型驱动**:用一个JavaBean来装载对象 类似于ActionForm
模型Beanpublic class User {&private S&private S&private S&&private D
&// setter... getter...}
### ValueStack ### --值栈
ModelDriven&T&&该接口使用的泛型,&&模型是什么类型那个的泛型就是什么类型------ T getModel()
Action 需要实现&ModelDriven接口
public class RigesterAction extends ActionSupport&&implements ModelDriven&User&&{
&private&User user&= new User();&public&User getModel()&{&&&}
&@Override&public String execute() throws Exception {
&&return SUCCESS;&}}
====================&& Preparable 接口====================
Preparable接口中有一个void prepare() throws Exception方法,实现该接口的Action类,将在执行这个action所以方法之前执行prepare(),称为action准备方法。
=========================&&& 显示特定的出错信息=========================
&s:fielderror cssStyle="color:red"&&&s:param&username&/s:param&&/s:fielderror&
去掉前面的&原点&需要自己修改 fielderror.ftl模板去掉前面的点代码
阅读(...) 评论()2010年2月 Java大版内专家分月排行榜第二
2011年7月 Java大版内专家分月排行榜第三2010年1月 Java大版内专家分月排行榜第三2009年12月 Java大版内专家分月排行榜第三
本帖子已过去太久远了,不再提供回复功能。JavaEE(40)
一.命名空间:namespace
为了解决同一package中的不同action不能出现相同name属性值的问题,即不同package的namespace属性值不同时,就可以实现当前package中action的name属性值与其他package中的action的name属性值相同的情况。
&a href=”users/addMethod.action?name=zhangsanAdd”&添加&/a&
&a href=”users/showMethod.action?name=lisiShow”&展示&/a&
struts.xml配置:
&package name=&default& namespace=&/users& extends=&struts-default&&
&action name=&addMethod& class=&com.study.test.MethodAction& method=&add&&
&result name=&add&&add.jsp&/result&
&action name=&showMethod& class=&com. study.test.MethodAction& method=&show&&
&result name=&show&&show.jsp&/result&
&/package&MethodAction类如下:
public class MethodAction extends ActionSupport{
public String getName() {
public void setName(String name) {
this.name =
public String add(){
//其他逻辑代码
return &add&;
public String show(){
return &show&;
注:如果处理某个action请求的方法返回值为SUCCESS,那么可以再配置文件的result中省略那么属性,如下:
&result&show.jsp&/result&&!-- 表示的就是返回值为SUCCESS时进行的操作 --&
二.配置默认action:为了提高用户对访问出错时的体验度,如:404错误
action配置代码如下:一般写在package中的最上方位置:
&default-action-ref name=&defaultAction& /&
&action name=&defaultAction&&
&result&error.jsp&/result&
三.配置result:根据在struts.xml文件中的不同位置分为全局result和局部result
1.局部result:定义在action中,如下:
&action name=&showMethod& class=&com.study.test.MethodAction& method=&show&&
&result name=&show&&show.jsp&/result&
2.全局result:定义在&global-results&中,&global-results&在package中与action同级,对所有的action都起作用。
代码如下:
&global-results&
&result& syserror.jsp&/result&
&/global-results&
上面result的name属性值默认为SUCCESS,所以只会处理返回值为SUCCESS的请求。
(1)发起action请求后,需要在struts.xml中查找result时先查找局部result,如果没有查找到,就再去查找全局result,最后没查找到就好报错了。
&result name=&& type=&&&&/result&
(2)name属性:表示返回的逻辑视图名,默认为SUCCESS。
(3)type属性:表示结果处理的方式,默认为dispatcher(请求跳转)
常用属性值:
type=&redirect&:
表示重定向处理,一般到JSP页面,但是也可以到另一个Action。
type=&redirectAction&:
表示重定向到另一个Action,使用该类型时,需要指定参数param(actionName,namespace)。如下:
&action name=&addMethod& class=&com.study.test.MethodAction&&
&result name=&add& type=&redirectAction&&
&param name=&actionName&&showMethod&/param&
&param name=&namespace&&/&/param&
&/action&type=&chain&:表示将请求下发,下面的代码能够将参数值从addMethod这个action传到showMethod这个action,在showMethod这个action中使用参数后,最终将参数传到delMethod这个action:
&action name=&addMethod&class=&com.study.test.MethodAction&method=&add&&
&result name=&add& type=&redirectAction&&
&param name=&actionName&&showMethod&/param&
&param name=&namespace&&/&/param&
&!—使用&param name=&参数名&&参数值&/param&可以将值传递给下一个action,一般建议这样使用,不建议使用&param name=&参数名&&action名称?参数=值 &/param&的方式--&
&param name=&name&&zhangsan&/param&
&action name=&showMethod&class=&com.study.test.MethodActio&method=&show&&
&!— 使用chain可以在当前请求处理完后将请求下发,参数也将传递过去--&
&result name=&show& type=&chain& &delMethod&/result&
&/action&(4)配置动态result:*代表一个或者多个任意字符串
&action name=&*Method&class=&com.study.test.MethodActio&method=&{1}&&
&result name=&show&&{1}.jsp&/result&
四.Struts异常处理:在action配置(struts.xml)中可以捕获在action处理方法中throw抛出的异常。
MethodAction类中show方法可以如下抛出异常:
public String show(){
if(name.length() &= 6){
return &showrs&;
throw new RuntimeException(&用户名不能少于6位&);
1.全局异常处理:作用于当前package的全部action
在struts.xml中的package中的&global-exception-mappings&中配置全局异常处理:
&global-exception-mappings&
&exception-mapping result=&error&exception=&java.lang.Exception&/&
&/global-exception-mappings&在struts.xml中的package中的&global-results&中配置全局result:
&global-results&
&result name=&error&&error.jsp&/result&
&/global-results&注意:上面result的那么熟悉值与exception-mapping&的result属性值对应。
2.局部异常处理:只作用于当前action
在struts.xml中的package中的action中配置局部异常处理并且配置局部result:
&action name=&showMethod& class=&com.study.test.MethodAction& method=&show&&
&result name=&showrs&&show.jsp&/result&
&result name=&error&&error.jsp&/result&
&exception-mapping result=&error& exception=&java.lang.Exception&/&
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:9949次
排名:千里之外
原创:51篇
(3)(37)(11)--------《三大框架》------(39)
问题!Struts2.xml文件中的常量有哪些,Struts2的处理过程,如何自动更新配置文件、全局错误的配置及相关动态方法的调用和方式,表单请求参数数据通过拦截器如何到实体类
1.Struts2的处理过程
2.相关常量(在开发中有些需要注意的)
上述的配置自动更新,我们使用的devMode,因为它不仅具有打印详细错误的功能,还具有自动更新配置文件的功能。还有就是静态页面的缓存,我们开发的时候是需要关闭的,后缀名的设置,若是需要多个后缀名逗号隔开,编码不用我们设置,默认请求参数为UTF-8格式。最后就是objectFactory,这个在整合ssh框架时才会用到。
3、全局错误的配置
有两种方式:
(1):单个包中的设置
&!-- package的继承案例:配置全局的结果视图 ,在下面这个例子中就有多个action被全局global控制--&
&package name=&scope& namespace=&/scope& extends=&mypackage&&
&global-results&
&result type=&dispatcher& name=&error&&/error.jsp&/result&
&/global-results&
&action name=&scopeAction& class=&cn.itcast.action.ScopeAction& method=&execute&&
&result type=&redirect& name=&success&&/scope.jsp&/result&
&action name=&scopeAction& class=&cn.itcast.action.ScopeAction& method=&execute&&
&result type=&redirect& name=&success&&/scope1.jsp&/result&
&/package&
(2)多个包的全局设置
&!-- 配置所有包的全局错误结果 :范围整个struts.xml文件,采用的是继承包的方式--&
&package name=&mypackage& extends=&struts-default&&
&global-results&
&result type=&dispatcher& name=&error&&/error.jsp&/result&
&/global-results&
&/package&
&include file=&customer.xml&&&/include&&!--这个采用分布式集成管理struts.xml,在开发中主要是利于查看和方便管理--&
&package name=&orders& namespace=&/orders& extends=&mypackage&&
&action name=&orders& class=&cn.itcast.action.OrdersAction& method=&add&&
&result type=&dispatcher& name=&success&&/2.jsp&/result&
&result type=&dispatcher& name=&input&&/1.jsp&/result&
&/package&
4、相关动态方法的调用和方式
& & &该常量主要是对动态方法的设置,默认是开启的,开发中我们需要关闭这个常量设置
&package name=&scope& namespace=&/scope& extends=&mypackage&&
&action name=&scopeAction& class=&cn.itcast.action.ScopeAction& method=&execute1&&
&result type=&redirect& name=&success&&/scope.jsp&/result&
&/package&
就好比上面这个例子,假设只写execute1方法,而这个类中有另外一个execut2方法,只是在这里并没有调用它,但是因为走到action时就实例化了,我们可以采用以下方式来调用第二个方法,相对来说不安全。
而关闭了该方式动态方法的设置:再去以同样的方式去访问它就会出以下错误(在这个namespace包空间下找不到该方法)。
& & & & & & & &&
试用通配符来调用在action中实例化而又没有写的方法(这样方便了很多,我们不需要去写很多方法,而同时可以访问)。
5、表单请求参数数据通过拦截器到实体类(案例说明)
package cn.itcast.
import java.io.S
import com.opensymphony.xwork2.ActionS
public class AddressAction extends ActionSupport implements Serializable {
public Integer getId() {
public void setId(Integer id) {
public String getCity() {
public void setCity(String city) {
this.city =
public String getProvince() {
public void setProvince(String province) {
this.province =
package cn.itcast.
import java.io.S
import java.util.D
import com.opensymphony.xwork2.ActionC
import com.opensymphony.xwork2.ActionS
//(不建议使用)动态方法调用:http://localhost:8080/struts2day02/customer/addCustomer!updateCustomer(应该执行addCustomer,使用!updateCustomer,在请求addCustomer就执行了updateCustomer)
//关闭动态调用的功能:struts.enable.DynamicMethodInvocation = false
public class CustomerAction extends ActionSupport implements Serializable{
//每次请求都会重新实例化该类,是线程安全的。
// public CustomerAction(){
System.out.println(&实例化了&);
private I//Struts2会自动类型转换:仅限基本类型
private String[]
private AddressA//Struts2设置值时,如果发现该类没有实例,则创建实例(通过反射调用默认构造方法)
public Integer getId() {
public void setId(Integer id) {
public String getName() {
public void setName(String name) {
this.name =
public AddressAction getAddress() {
public void setAddress(AddressAction address) {
this.address =
public Date getBirthday() {
public void setBirthday(Date birthday) {
this.birthday =
public String[] getHobby() {
public void setHobby(String[] hobby) {
this.hobby =
public String addCustomer(){
System.out.println(&addCustomer&);
System.out.println(&ID:&+id+&\tNAME:&+name+&\tProvince:&+address.getProvince()+&\tCITY:&+address.getCity());
System.out.println(&爱好:&);
for(String s:hobby){
System.out.println(s);
System.out.println(birthday);
ActionContext.getContext().put(&birthday&, birthday);
//调用service层保存用户的信息
return SUCCESS;
}catch(Exception e){
return ERROR;
public String updateCustomer(){
System.out.println(&updateCustomer&);
//调用service层更新用户的信息
return SUCCESS;
}catch(Exception e){
return ERROR;
&package name=&customer& namespace=&/customer& extends=&struts-default&&
&action name=&updateCustomer& class=&cn.itcast.action.CustomerAction& method=&addCustomer&&
&result type=&dispatcher& name=&success&&/customer/success.jsp&/result&
&/package&
这个例子就可以说明。我们封装数据到实体类,不需要再配置文件中写什么,只需要保证,实体类中的setter方法名字和表单的名字相同就可以了。还有就是接下来我们要注意的自动类型转化了。这个在封装数据中很重要,请查看博客:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:221832次
积分:4625
积分:4625
排名:第6102名
原创:246篇
评论:41条
文章:11篇
阅读:2086
阅读:4322
阅读:5383
文章:39篇
阅读:18408
文章:12篇
阅读:8136
(3)(3)(16)(13)(1)(2)(1)(7)(9)(25)(17)(10)(9)(5)(41)(14)(38)(30)(4)(3)(2)}

我要回帖

更多关于 笔记本电脑 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信