`
包子_feiFEI
  • 浏览: 73099 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类

Struts2.0学习总结

 
阅读更多

这周花了一个星期的时间学习了Struts2,今天就总结一下,以便后面使用时可以参考,顺便理理思路,嘿嘿。 Struts和Struts2都是属于控制转发的框架,而在Struts2中功能比较强大,而且使用方便,不过我在好多测试中都很费神,因为不报错,也不出来我想要的结果,很无奈,嘿嘿!首先说下它的应用如何搭建:在老版本中有5个必须包,但是现在我用的是2.1.8这个版本就不止5个jar包了,包括: struts2-core-2.1.8.jar(这是struts2的核心包),commons-loging-1.0.4.jar(通用日志记录包), freemarker-2.3.15.jar(是一个模板引擎,一个基于模板生成文本输出的通用工具), ognl-2.7.3.jar(这是struts2的表达式语言库即对象图导航语言), xwork-core-2.1.6.jar(由于struts2就是从xwork衍生过来的,所以这包夜是必须的), commons-fileupload-1.2.1.jar(struts2的上传下载包), common-io-1.3.2.jar(这个包在低版本中是不需要的), struts-convention-plugin-2.1.8.jar(这是注解配置用的),我在这列出了这8个jar包基本是就够用了。导入包后如果不用注解配置,那struts2也肯定有个配置文件,默认叫struts.xml,这个文件必须放在classes中,也就是放在src下。 这两件事做完后就要在web.xml中进行配置,因为struts2跟1不一样,它不用配置servlet,而是过滤器,配置如下(固定写法): struts2 org.apache.struts2.dispatcher.FilterDispatcher

<!-- 这个参数是注解用的 -->

actionPackages com.mwt.action.zhujie struts2 /* 以上步骤做完之后,struts2的架子也就搭起来了,好像不是很复杂哦! 接下来我主要说下struts2的运行流程和它的重点也就是常用的功能:当我们在页面发出一个请求之后,由于服务器提前已经加载了web.xml,所以这个过滤器就会拦截到所有的请求,然后会默认去classes下的struts.xml中找对应的action(即action配置标签中的name属性),在struts2中访问后缀是.action,不写后缀也会被默认加上.action。action执行完后都会返回一个字符串,此时在去struts.xml中找result标签的name属性对应的资源,可以是jsp、html、.action等。举例说明: 1、action struts2中的action很简单,不用集成任何类,也不用实现任何接口,这和struts1是有区别的,他只要有一个返回字符串的execute方法就行了,但如果有多个方法时,名字也可以随便起,不一定是execute。 2、struts.xml 这个配置文件是struts2的核心配置文件,这个没什么可说的,就直接贴出代码再代码中详细的介绍吧:

<!--l version="1.0" encoding="UTF-8"--><!--CTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dt--><!-- struts2的默认过滤编码是utf-8,所以我们也就不用去写过滤器来转码了,但是如果想改的话也可以 --><!-- struts2的配置文件要放在classes下,所以在项目中也就是放在src中了 -->

<!-- 当一个项目中action非常多是我们就可以分开好多个xml配置文件然后用include去引入它们 -->

<!-- 这个struts-default必须继承,它会默认加上好多拦截器,如果不继承它的话就连result等好多标签都无法使用 -->

<!-- 没有配置命名空间namespace,如果页面发出任何请求的话,那么struts会在这里的找所有的action中与name对应的action类,name是要访问的action起的名字,class对应的全类名 -->

/success.jsp

<!-- 在result中有个type属性就是专门配置是否为客户端跳转,默认是服务器端跳转,若加上redirect后浏览器地址栏会从客户端从新访问即就不会传递参数给页面了,就和Servlet中的sentRedirect一样 -->

/fail.jsp

<!-- 跳到命名空间为global下的a2这个action -->

/global/a2

<!-- 在这说说package中的name属性,到现在为止我是没有感觉到它的意义, 但是我的一个朋友(秉承)说是当extends继承包时就是参考的这个name属性,看来这点是被我忽略了。-->

<!-- 这里调用不同的方法,在页面用感叹号动态调用,下面在用method做测试 -->

/methodTest/add.jsp /methodTest/update.jsp /methodTest/delete.jsp

<!-- 这里调用不同的方法用method做测试,缺点是同一个action中的不同方法调用要配置好多action,优点可以加不同的拦截器 -->

/methodTest/add.jsp /methodTest/update.jsp

<!-- 通配符 (使用通配符时struts2会按照你在xml文件中配置的顺序去一一匹配),这样就可以只写一个action,只要方法和页面名字有规律就可以自动调用所有的方法和页面-->

{1}User.jsp

<!-- action之间的跳转 -->

<!-- 这个type="chai"指的是服务器端action的跳转,如果在不同的命名空间下就在a2前面加上另一个action的命名空间就行了,这里的param属性也可以不加 -->

a2

<!-- <result name="success" type="chain">a2</result>也可以这么写 -->

<!-- 在struts2中的配置文件中也可以用${}表达式,这个表达式很想EL表达式,但其实这是struts2自带的OGNL表达式(对象图导航语言),它会把前面action中的有get/set方法的属性值自动取出来 -->

/success.jsp?username=${username}

<!-- 全局结果集,在下面的包中所有的action都会跳到同一个页面 -->

/success.jsp /fail.jsp

<!-- action之间传递值(这个服务器端的传递会把第一个action中同名的属性值直接赋给第二个action中,他两都共用了同一个值栈,而且后放进去的(s2)先取出来。),如果是客户端跳转页可以用***.action?username=${name}&amp;passward=${pwd}这中方式进行传值-->

s2

<!-- 自定义拦截器只要实现接口,或者继承一个类,这都是struts2自带的,如下配置。 <interceptors> <interceptor name="a" class="b"></interceptor> </interceptors> -->

/success.jsp

<!--在这里引用下上面配置的拦截器就行了(切记还要引用下默认的拦截器,否则struts2的好多功能就无效了,这就好比Java中的构造器一样。) <interceptor-ref name="a"></interceptor-ref> -->

3、在看看action,这个action很简单就一个方法。 public class LoginAction extends ActionSupport{ User user; public User getUser() { return user; } public void setUser(User user) { this.user = user; } public String execute(){ if(user.getUsername().trim().equalsIgnoreCase("baobao")) return SUCCESS; //因为继承了ActionSupport,所以可以直接这样返回,其实内部也是返回了一个小写的success字符串。 return ERROR; } } 4、在看看页面的访问方式: add 访问命名空间为test2下的name值为m的这个action种方法名叫add()的方法。 s1


s1


这两中写法是一样的。 5、页面获取值方式:

<!--struts2的核心技术就是ValueStack值栈技术! 默认所有的action都会放在值栈中,一个请求就会产生一个值栈。栈是先进后出,如果是服务器之间action跳转(a1->a2的跳转再到页面),那么这两个action共用同一个值栈,而在前台取出的值是先从a2中找,然后从a1中找,栈是后来的在栈顶。值栈中的值不会在action中相互传递,同名属性值也不会被覆盖,都是遵循后进先出的形式去获取内容。 -->

欢迎您:

用户名:${param.username}


Request作用域测试:username=${username}

<!-- 在action中有get和set方法的属性在这里用值栈技术都能直接取出来 -->

s=${s}


<!-- OGNL表达式测试(对象导航图语言) -->

ognl获得的用户名称:
用el也可以代替上面的struts2标签(说明struts2的值栈中的内容也放进了request作用域!):${user.username}

<!--equest.getAttribute("user.username"-->

<!-- 这里就证明了值栈中的值确实放到了request作用域中 --><!-- 在这里调用方法传递参数的时候,用单引号,像这样调用方法就可以替代自定义函数标签库了 -->

调用user对象中的公共方法(属于值栈中):

<!-- 如果调用action中或者JDK的静态方法就直接写全类名(试验未成功,很纳闷) -->

调用JDK中静态方法(返回个0到1的随机数):
如果是java.lang.Math下的类可以省略掉前面的类:


<!-- 很纳闷,测试失败,这个f()方法一直没有被执行。 -->

action中静态方法调用:

<!-- 这里的vs就代表valuestack值栈,属于固定写法。 -->

6、在action中如何获得HttpServletRequest对象,有了它HttpSession也就很容易获得了。 /* * 第一种方式:用ServletActionContext这个类的getRequest()静态方法就可以直接获取request,但必须在方法中 * 初始化,不能直接给类成员赋值。 * 第二种方式:用IOC控制反转直接注入request,这是struts2自带的注入,只要实现了ServletRequestAware这个借 * 口再实现了它的set方法就行了 * 今天就用第二种方式做个试验 * 注意:其实在用struts2时很少用到request这个对象,因为在action中所有的属性都会通过struts2的值栈技术直接 * 传到页面或者另一个action。 * */ private HttpServletRequest request; public void setServletRequest(HttpServletRequest request) { this.request = request; } //不用request,就用${}再页面直接取值,这种值栈技术很难让人琢磨 //s或者其他域只要有get和set方法就能在令一个action或者页面直接取值。 private String s; private double d; public String execute(){ request.setAttribute("username","感冒快点好吧!"); s="值栈技术存值";//在页面直接用${s}取值 d=1232354;//在另一个action中取值 return SUCCESS; } 7、最后在说下struts2的注解,注解的好处显而易见,它可以让框架完全脱离xml配置文件,很容易学习,配置起来也相当方便,我还是挺喜欢这种配置的,其实好多框架都用到了注解,比如hibernate、spring都有注解,这些就跟JDK中的注解一样,比如@Override这个就是重写提示的注解。我用struts2就做了一个小例子,可结果很令人失望,一直不出效果,难道与版本有关系?哎,还是先贴出代码吧! /* * struts2注解(先看action注解,这个struts2真的很奇怪,老版本跟新版本的注解变化很多) * 老版本直接用,而且注解标示也不多,action也就4个,而这新版本我用的是struts2.1.8还要再导个包 * 叫struts2-convention-plugin-2.1.8.jar幸好这包在源码包中有。 */ //首先标注必须在web.xml中配置注册下 //@ParentPackage(value="struts-default")默认就这包可以不写 //@Namespace(value="space")可以不要命名空间 //@Result(name="success",location="/success.jsp")这里只有一个跳转结果时用,在老版本这个location要换成value @Namespace(value="space") @Action(value="test",results={ @Result(name="success",location="/success.jsp"), @Result(name="error",location="/fail.jsp",type="redirect") }) public class ZhujieAction extends ActionSupport{ //这里的名字可必须以Action为后缀,访问时就以前面的单词首字母改成小写就行了。(不过有多个方法怎么分辨还不清楚,可能会在@Action()中配置多个value属性。) public String test(){ if(1>0) return SUCCESS; else return ERROR; } }//现在还是测试不成功,算了,先放弃吧!代码绝对没问题(多么自信的男人呀,嘿嘿!)。 好了,Struts2就先写到这,这些都是比较常用的知识点,其实struts2还有好多功能呢,比如自带了好多拦截器跟过滤器作用差不多,不过功能比较强大,还有它的好多标签在页面我也很少用,我从来不专门学习一个框架的标签的,感觉很浪费时间,而且意义不大,struts2还有自己的文件上传下载、异常处理、OGNL导航表达式等等,这些就等用到了再学吧。好了就先说到这吧,今天上班来的早,公司就我一个人,太安静了,所以突然说了这么多,嘿嘿! 补充: ★Struts中的OGNL(对象图导航语言)采用了struts2的标签获取值,因此我很少用,上面也说过不喜欢用某种框架自带的标签,但见了要能认识。比如:Struts2中的HttpSession已经被封装成了Map类型,只要类实现了SessionAware这接口,重写了setSession就可以自动注入进去,在页面用的话就直接 ,这只是#的其中一种用法,其实它也就等价于session.getAttribute("userName");不过我还是习惯用HttpSession。

分享到:
评论

相关推荐

    Struts2.0学习Struts2.0文档

    ### Struts 2.0 学习指南与关键技术解析 #### 一、Struts 2.0 框架概述 Struts 2.0 是一个基于MVC(Model-View-Controller)设计模式的开源Web应用框架,它在Struts 1.x的基础上进行了大幅度的改进和完善。自推出...

    struts2.0学习笔记,代码整理

    总结,Struts2.0是一个强大且成熟的Web开发框架,它提供了完整的MVC实现,丰富的插件支持,以及灵活的配置选项。通过深入学习和实践,开发者能够更好地理解和利用这个框架,构建高效、可维护的Java Web应用。

    struts 2.0 详细配置

    2. **为什么学习 Struts 2?** - 在现代 Web 开发中,Struts 2 框架提供了一种高效且模块化的应用构建方式。 - 它支持 MVC 设计模式,能够帮助开发者更好地组织代码结构。 - MVC 模式下: - 控制器(Controller)...

    Struts2.0大结合

    总结,学习Struts2.0不仅需要掌握其基本概念和配置,还需要理解拦截器机制,熟练使用Struts2.0提供的标签库,以及如何与其他框架如Spring进行集成。通过不断地实践和项目经验积累,才能真正掌握这个强大的Web开发...

    struts2.0中文教程

    总结来说,"struts2.0中文教程"涵盖了Struts2.0的各个方面,包括Action、拦截器、OGNL、视图技术、控制器、异常处理和插件集成等,是学习和掌握Struts2.0框架的重要参考资料。通过深入学习,开发者可以更好地利用...

    struts1.2-2.0学习总结

    总结来说,Struts 从 1.2 到 2.0 的发展反映了 Web 开发技术的进步,特别是 MVC 设计模式的深入应用,为开发者提供了更高效、更灵活的工具来构建复杂的 Web 应用。尽管现在有更多选择,如 Spring Boot,但 Struts ...

    Struts2.0培训笔记

    通过深入学习和实践Struts2.0,开发者可以提高开发效率,创建出结构清晰、易于维护的Web应用。在实际项目中,理解并熟练运用MVC模式、拦截器、Action与结果、配置方式、异常处理以及国际化等核心概念,将对提升项目...

    struts2.0标签使用

    在探讨Struts2.0标签库的使用时,我们首先需要了解Struts2.0框架的基本概念及其在MVC架构中的角色。Struts2.0是基于Java的一...对于想要深入学习Struts2.0框架的开发者来说,熟练掌握其标签库的使用是非常重要的一步。

    struts2.0 spring2.0 hibernate3.0整合开发快速入门-3

    通过以上内容的学习,我们可以了解到Struts2.0、Spring2.0与Hibernate3.0整合开发的基本概念和步骤。这三个框架相互配合,可以极大地提高Java Web应用的开发效率和维护性。在实际项目中,还需要结合具体的业务需求和...

    struts2.0的总结

    ### Struts2.0核心知识点总结 #### 一、简介 Struts2 是一款基于 Java 的开源 MVC(Model-View-Controller)框架,用于构建动态的 Web 应用程序。相较于 Struts1.x 版本,Struts2 提供了更强大的功能与灵活性,它...

    struts2.0jar包

    Struts2.0 jar包是Java Web开发中的一个重要组件,它是Apache Struts框架的一个特定版本。Struts2是一个基于MVC(Model-View...通过学习和掌握Struts2.0,开发者能够更好地理解和实践MVC模式,提高开发效率和代码质量。

    struts2.0培训机构-修订版+日常练习

    在这个“struts2.0培训机构-修订版+日常练习”资料包中,你将找到一系列与Struts2.0相关的学习资源,包括PPT和PDF文档,以及可能的代码示例或练习题。 1. **PPT讲解**:通常,PPT是讲师用来传授课程内容的主要工具...

    struts2.0学习资料

    总结,Struts2.0的学习涉及到了框架的基础配置、国际化、文件上传、拦截器、结果类型以及OGNL表达式的运用等多个方面。通过深入学习和实践,你将能够熟练地利用Struts2构建高效、可维护的Java Web应用。

    struts2.0教程

    总结,Struts2.0是一个强大且灵活的MVC框架,它的核心概念、新特性和丰富的插件库使其在企业级Web开发中广受欢迎。通过深入学习提供的教程和源码,开发者可以掌握Struts2.0的核心技术,从而提高开发效率和代码质量。

    Struts2.0中文教程

    总结来说,Struts2.0教程将引导你掌握这个框架的基本使用,包括但不限于标签的使用、EL表达式的理解、数据库操作的实现以及拦截器和异常处理的原理。通过学习,你可以快速构建出功能丰富的Java Web应用程序。

    网络商城j1051_struts2.0

    总结,网络商城“j1051_struts2.0”项目是Struts2.0框架的一个实例展示,通过该项目,开发者不仅可以掌握Struts2.0的基础知识,还能了解到如何将这些知识应用到实际的电商系统开发中。在实践中,不断探索和优化,将...

    struts2.0基础学习

    总结,Struts2.0作为Java Web开发的重要工具,其基础学习涵盖了MVC模式的理解、配置文件的编写、Action和拦截器的使用、数据绑定与校验、视图展示、国际化和主题设置等多个方面。通过深入学习和实践,开发者可以构建...

    struts2.0+freemarker实例.rar

    总结起来,Struts2.0和FreeMarker的结合使用,能帮助开发者构建清晰的MVC架构,提高代码的可读性和可维护性。通过学习和实践这样的实例,你可以更好地掌握这两个工具的用法,提升Java Web开发能力。

    搭建Struts2.0开发和运行环境

    ### 搭建Struts2.0开发和运行环境 #### 一、概述 本文将详细介绍如何搭建Struts2.0的开发与运行环境。Struts2是基于MVC架构的开源框架,广泛用于Java Web应用程序的开发。通过本指南,您将能够成功配置所需的工具与...

Global site tag (gtag.js) - Google Analytics