写在前面-------------------------------------------------------------------------

本文章主要从三个方面来学习Struts2框架 ,

分别是 struts2登录实例 和 struts2工作流程与工作原理 及在开发中注意到问题 ,

之所以把例子放在前面来说,是为了可以使学习者通过代码来学习框架,毕竟"实践出真知"~

然后在根据写的实例来分析Struts2的工作流程和实现原理,最后是总结Struts中的问题~

一,Struts2实现登录的实例

1.jar包下载

以下的jar包是搭建环境所需要的,请根据链接进行下载

Asm-3.3: http://www.java2s.com/Code/Jar/a/Downloadasm33jar.htm

Asm-commons-3.3: http://www.java2s.com/Code/Jar/a/Downloadasmcommons33jar.htm

Asm-tree-3.3: http://www.java2s.com/Code/Jar/a/Downloadasmtree33jar.htm

Commons-fileupload1.3: http://mvnrepository.com/artifact/commons-fileupload/commons-fileupload/1.3

Commons-io-2.6: http://mirror.bit.edu.cn/apache//commons/io/binaries/commons-io-2.6-bin.tar.gz

Commons-lang3-3.7: http://mirror.bit.edu.cn/apache//commons//lang//binaries/commons-lang3-3.7-bin.tar.gz

Freemarker-2.3.20: http://mvnrepository.com/artifact/org.freemarker/freemarker/2.3.20

Javassist-3.11: http://mvnrepository.com/artifact/javassist/javassist/3.11.0.GA

Log4j-api2.9.1: http://mirror.bit.edu.cn/apache/logging/log4j/2.9.1/apache-log4j-2.9.1-bin.tar.gz

Log4j-core-2.3: http://mirror.bit.edu.cn/apache/logging/log4j/2.9.1/apache-log4j-2.9.1-bin.tar.gz

Ognl-3.0.19: http://mvnrepository.com/artifact/ognl/ognl/3.0.19

Struts2-core-2.5.13: http://www.java2s.com/Code/Jar/s/Downloadstruts2core212jar.htm

Xwork-croe-2.2.3: http://www.java2s.com/Code/Jar/x/Downloadxworkcore223jar.htm

2.创建web项目,搭建Struts2环境

  New-project-选择web下的Dynameic Web Project(动态web项目)

  

  选择完成后next

  

  红框:项目的名字

  篮框:项目的位置

  黄框:tomcat版本

  完成后next

  

  不用管继续Next

  

  到这里将黄框的选项打上勾,会生成web.xml文件,然后Finish

  一个动态的Web项目已经建成

  导入jar包,目标:lib目录下

  

  下一步配置web.xml中的struts2的过滤器和拦截器,这一步是重要的一步,当你启动服务器时,会根据这个文件进行初始化,根据web..xml文件中的配置,加载所有的配置文件

  (注意:在struts2-core-2.1.3之前过滤器为filterdispatcher ,之后为后面StrutsPrepareFilter和StrutsExecuteFilter)

  

  接下来配置struts2的核心文件-struts.xml,这个文件可以用过滤器来理解,用户发来请求经过该文件进行过滤,找到对应的action来进行对应的逻辑处理

  下面是为了实现登录来编写的struts.xml的例子

  

  在struts.xml中,是采用package来管理各种action

  Package中的name指定了该包的命名空间

  Extends是说当前这个包继承自struts-default包,这个包可以在struts2-core-2.5.13.jar中找到

  Class指定了逻辑处理类的位置,method制定了逻辑处理类中进行逻辑处理的方法,返回类型固定,为String类

  Result指的是返回的字符串,根据name与返回的字符串进行对比,返回相应的页面,

  注意:1.class可以用鼠标上移的方法来查看位置是否正确

    2.起名时要互相对应(method,result),否则回报错:

  

  现在环境已经搭建完成,下面进行逻辑处理类和jsp的编写

2. JSP  OR 逻辑处理类  J

  JSP;

  根据struts.xml的配置进行jsp的编写,一共需要三个 ,分别是登录的login.jsp,登录成功的success.jsp,登录失败的error.jsp

  a) login.jsp

   

  b) success.jsp(此页面运用了jsp九大内置对象的request,来实现了取值)

  

  a) error.jsp

  

  注意:1.登录页面中form表单提交的 action ,要与struts.xml进行对应

    2.登录成功的页面和失败的页面名称要与struts.xml中result的返回页面对应

  逻辑处理类:

  

  因为要实现登录的效果,所以我们定义了username和password,生成get,set方法

  继承了ActionSupport类,这个类主要是方便实现我们自己的action,大多数情况下都会继承com.opensymphony.xwork2.ActionSupport类,并重写此类里的public String execute() throws Exception方法。因为此类中实现了很多的实用借口,提供了很多默认方法,这些  默认方法包括国际化信息的方法、默认的处理用户请求的方法等,这样可以大大的简化Acion的开发。

  我们创建了execute的方法,来进行登录的逻辑判断,登录的信息必须是admin 123 才会登录成功,且不为空才会返回success,否则会返回error

  注意:这里返回的String类型的值必须与struts.xml中result的name对应

  到此为止,我们已经将struts2的环境搭建完成,并实现了登录的功能

  项目结构:

  

  测试结果

  a)登录页面:

  

  b)登录成功:

  

  c)登录失败:

   

二,Struts2工作流程和实现原理 

1,工作流程:

  用户发送请求—web.xml中的filterdispatcher---struts.xml---找到对应的action---逻辑处理----返回一个String类型的结果---result根据返回的结果找到jsp的位置—将结果返回到jsp

  注意:struts2的核心控制器(过滤器)在2.1.3版本之前为FilterDispatcher,后面的版本为StrutsPrepareFilter和StrutsExecuteFilter

2.实现原理:

   

  根据上图我们来进行梳理:

    a)     收到请求的服务器首先被初始化(上述登录实例用的是tomcat服务器)

    b)    这个请求经过过滤器file,被filteredispatcher调用,filterdispatcher会访问ActionMapper来决定是否需要调用某个Action

    c)     如果需要调用,则将请求发给ActionProxy, ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类

    d)    ActionProxy创建一个ActionInvocation的实例。

    e)     ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,会影响到相关拦截器(Intercepter)的调用。

    f)      一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可 能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。

    g)    将请求的结果返回给请求发送者

三.关于struts2应该注意的问题.

1.核心控制器(过滤器) StrutsPrepareAndExecuteFilter

  StrutsPrepareAndExecuteFilter与struts2以前版本中的FilterDispatcher一样。它是struts2框架的核心控制器,该控制器作为一个Filter运行在web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter会过滤用户请求,如果用户请求以action结尾,该请求就会被转入struts2框架来处理。

  Struts2框架获取*.action请求后,将根据*.action请求的前面部分决定调用那个业务逻辑组件,例如:对于login.action请求,Struts2调用名为login的Action来处理该请求

  2.1.3之前的版本FilterDispatcher,后面版本为StrutsPrepareFilter和StrutsExecuteFilter

2.struts2的作用(为什么要有这个框架,优缺点)

  优点:

    (1)实现MVC模式,结构清晰,使开发者只关注业务逻辑的实现。

    (2)有丰富的标签库,如能灵活动用,则能大大提高开发效率

  缺点:

    (1)     跳转到页面需要配置 配置文件  有几个页面就要配置几个路径

    (2)     对Servlet的依赖性过强。Struts处理Action时必需要依赖ServletRequest和ServletResponse,所以它摆脱不了Servlet容器。

    (3)     Action类中使用全局变量,值容易乱

3,过滤器和拦截器的区别

  过滤器:是在java web中,你传入的发出请求时过滤掉一些信息,或者提前设置一些参数,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符

  拦截器:是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出  异常的时候做业务逻辑的操作。

  区别:

  拦截器是基于java的反射机制的,而过滤器是基于函数回调。

  拦截器不依赖与servlet容器,过滤器依赖与servlet容器。

  拦截器只能对action请求起作用,而过滤器则可以对所有的请求起作用。

  拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问。

  在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次

4.Action中java的反射机制

  概念:主要是指程序可以访问,检测和修改它本身状态或行为的一种能力,并能根据自身行为的状态和结果,调整或修改应用所描述行为的状态和相关的语义。

   反射是Java中一种强大的工具,能够使我们很方便的创建灵活的代码,这些代码可以再运行时装配,无需在组件之间进行源代码链接。

  在刚开始学习java的时候,写的java程序的时候都会生成.class文件,所谓反射机制就是把所有的类文件放到一起,再另一个地方需要用的时候通过名字对应的方式去类中匹配。

  

  在action里创建了一个方法 ,用来显示所用表里所有内容

  在action这个方法里并没有像往常一样创建session来实现存值

  

  在jsp里面直接在迭代器里的value里直接写上list集合

  下面的value里直接写上对象名就ok

  如jsp文件需要用的时候通过名字来调用,比如说list,再action内创建集合,再页面里通过name来与action里的list对应,jsp页面就会取到list集合中的内容,

  这里推荐一篇文章: 深入理解Jave反射,有兴趣可以看看,速成反射的就算了吧~

Struts2从入门到放弃到此结束~

项目地址: https://pan.baidu.com/s/1jIouDka 密码: 7nzn

如有不解,请加本人qq:1196319567~

感谢博客园提供的平台~

欢迎同行评论,交流~

Struts2入门到放弃的更多相关文章

  1. CYQ.Data 从入门到放弃ORM系列:开篇:自动化框架编程思维

    前言: 随着CYQ.Data 开始回归免费使用之后,发现用户的情绪越来越激动,为了保持这持续的激动性,让我有了开源的念头. 同时,由于框架经过这5-6年来的不断演进,以前发的早期教程已经太落后了,包括 ...

  2. [精品书单] C#/.NET 学习之路——从入门到放弃

    C#/.NET 学习之路--从入门到放弃 此系列只包含 C#/CLR 学习,不包含应用框架(ASP.NET , WPF , WCF 等)及架构设计学习书籍和资料. C# 入门 <C# 本质论&g ...

  3. OpenStack从入门到放弃

    OpenStack从入门到放弃 目录: 为何选择云计算/云计算之前遇到的问题 什么是云计算 云服务模式 云应用形式 传统应用与云感知应用 openstack及其相关组件介绍 flat/vlan/gre ...

  4. Struts2 入门

    一.Struts2入门案例 ①引入jar包 ②在src下创建struts.xml配置文件 <?xml version="1.0" encoding="UTF-8&q ...

  5. 绕过校园网的共享限制 win10搭建VPN服务器实现--从入门到放弃

    一.开篇立论= =.. 上次说到博主在电脑上搭建了代理服务器来绕过天翼客户端的共享限制,然而经过实际测试还不够完美,所以本着生命不息,折腾不止的精神,我又开始研究搭建vpn服务器= =... (上次的 ...

  6. 《区块链:从入门到放弃》之obc安装步骤

    obc安装步骤 朋友们可能会好奇,厨师不研究菜谱怎么改研究兵法了,哈哈,我原本是app出身,最近被安排去预研区块链和比特币技术,2个月下来,颇有斩获.期间得到IBM的CC同学指导我一步一步安装obc的 ...

  7. Struts2入门3 深入学习

    Struts2入门3 深入学习 处理结果和异常 前言: Struts学习的差不多了,还有最后的一点就收官了就是结果处理和异常处理.前面学习Struts主要围绕就是Action以及struts.xml配 ...

  8. Struts2入门2 Struts2深入

    Struts2入门2 Struts2深入 链接: http://pan.baidu.com/s/1rdCDh 密码: sm5h 前言: 前面学习那一节,搞得我是在是太痛苦了.因为在Web项目中确实不知 ...

  9. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

随机推荐

  1. windows 上rsync客户端使用方法

    1.1 获取 windows上实现rsync的软件(cwRsync) cwRsync是Windows 客户端GUI的一个包含Rsync的包装.您可以使用cwRsync快速远程文件备份和同步. 1.1. ...

  2. (二): 基于ZeroMQ的实时通讯平台

    基于ZeroMQ的实时通讯平台 上篇:C++分布式实时应用框架 (Cpp Distributed Real-time Application Framework)----(一):整体介绍 通讯平台作为 ...

  3. 实现基于Keepalived高可用集群网站架构的多种方法

    实现基于Keepalived高可用集群网站架构 随着业务的发展,网站的访问量越来越大,网站访问量已经从原来的1000QPS,变为3000QPS,目前业务已经通过集群LVS架构可做到随时拓展,后端节点已 ...

  4. unity下跨平台excel读写

    这是以前写的跨windows和ios读写excel的工具,因为原来导表工具引用的第三方读写excel的dll只能在windos下使用,造成要在mac机器上跑PC端或者打包的时候,每次都要先在windo ...

  5. let 和const与var的不同

    1. let的作用域在代码块中仅限在当前的作用于中 { var str1 = 12; console.log(str1); let str2 = 20; console.log(str2); //20 ...

  6. C#实现中国身份证验证问题

    C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准...   今天写的 C#中国身份证验证,包括省份验证和校验码验证,符合GB11643-1999标准... 理论部分: 1 ...

  7. .Net中各种不同的对象创建方式的速度差异

    在.Net中,微软给我们提供了很多不同的创建对象实例的方法,它们的速度又各有不同,以下一一列举. 使用new关键字 这在.Net中是最常见,也是速度最快的方式:                     ...

  8. ios -Unity3D的EasyAR集成到已经有项目中。

    近期 在做AR这一块,用EasyAR集成到iOS端,由于现在到项目已经上线,下一版本要做一个AR功能,于是迫于需求需要,自己研究和翻阅读好多集成到资料. 通过整理分出几个重要到模块,其中在这里指出Xc ...

  9. [转载] 基于Dubbo的Hessian协议实现远程调用

    转载自http://shiyanjun.cn/archives/349.html Dubbo基于Hessian实现了自己Hessian协议,可以直接通过配置的Dubbo内置的其他协议,在服务消费方进行 ...

  10. 设计模式的征途—12.享元(Flyweight)模式

    现在在大力推行节约型社会,“浪费可耻,节俭光荣”.在软件系统中,有时候也会存在资源浪费的情况,例如,在计算机内存中存储了多个完全相同或者非常相似的对象,如果这些对象的数量太多将导致系统运行代价过高.那 ...