struts2 第一讲

一个寒假过去,学过的,全忘啦发火

好吧。现在继续!


以前学习的都是一些java基础,struts2接触的很少,所以刚开始还是有点吃力,因为好多东西,都不明白,遇到问题解决很困难。

问题如下:

1.jsp加载问题

把含有一个表单的JSP放入tomcat中,然后加载显示,不知为什么一直显示不了,提示The requested resource (/struts2/login.jsp) is not available.

查找<Context path="/struts2" docBase="F:\jiajia\struts2\WebRoot" reloadable="true" /> 发现少了WebRoot(看视屏不认真啊)。不过,加入还是不行!可是,最后它竟然自己可以显示啦,真的很搞不懂!!!

大概有几种解决方法(转载)

IE中提示“404”错误有以下三种情况

  • 1.未部署 Web 应用
  • 2URL 输入错误

       排错方法

首先,查看URLIP地址和端口号是否书写正确。

       其次,查看上下文路径是否正确 Project--------Properties------MyElipse-----Web-----

Web Context-root检查这个路径名称是否书写正确。

最后,检查一下文件名称是否书写正确。

  • 3.目录不能被引用

       排错方法:

       在 Eclipse的“包资源管理器(Package Explorer)”检查文件存放的位置。由于META-INF

WEB-INF文件夹下的内容无法对外发布,所以,如果你引用了带这两个目录的文件,肯定是不允许。例如:http://localhost:8080/guestbook/WEB-INF/index.html就是错误的

文件位置存放错误

  • 4. Tomcat服务器中web.xml中的问题

       排错方法:

      如果你的web应用程序有多个jsp页面的话,当你点击你web应用程序的虚拟根目录时可能会出现404错 误,只是你只需要修改Tomcat服务器中web.xml

       <init-param>
            <param-name>listings</param-name>
            <param-value>false(将其该为true)</param-value>
        </init-param>



2.jar包问题

真心不知道,jar是干嘛的,也不知道那些需要,那些不需要,然后,出现了一大推的异常,最后用最苦力的方式,就是找到apps中一个web-inf中的一个全部复制,然后一个一个的删除,来搞清楚那些需要,那些不需要!!!⊙﹏⊙b汗大哭


3.还有许多的关于struts2的问题,不太清楚,如:表单中输入的怎么转到action中的、又是怎么控制转到页面的。

转载:

struts2的执行流程、工作原理

1045
作者:管理员
发布时间:2013/4/30 23:15:44
评论数:0
转载请自觉注明原文:http://www.jq-school.com/Show.aspx?id=269

文章由【网友木蚂蚁】提供:个人博客:http://hi.baidu.com/m_mayi


Struts2框架本身大致可以分为3个部分:核心控制器FilterDispatcher、业务控制器Action和用户实现的企业业务逻辑组件。核心控制器FilterDispatcher是Struts 2框架的基础,包含了框架内部的控制流程和处理机制。业务控制器Action和业务逻辑组件是需要用户来自己实现的。用户在开发Action和业务逻辑组件的同时,还需要编写相关的配置文件,供核心控制器FilterDispatcher来使用。


Struts 2的工作流程相对于Struts 1要简单,与WebWork框架基本相同,所以说Struts 2是WebWork的升级版本。

基本简要流程如下:
1、客户端浏览器发出HTTP请求。
2、根据web.xml配置,该请求被FilterDispatcher接收。
3、根据struts.xml配置,找到需要调用的Action类和方法, 并通过IoC方式,将值注入给Aciton。
4、Action调用业务逻辑组件处理业务逻辑,这一步包含表单验证。
5、Action执行完毕,根据struts.xml中的配置找到对应的返回结果result,并跳转到相应页面。
6、返回HTTP响应到客户端浏览器。


Struts工作机制?为什么要使用Struts? 
工作机制: 
Struts的工作流程: 
在web应用启动时就会加载初始化ActionServlet,ActionServlet从 
struts-config.xml文件中读取配置信息,把它们存放到各种配置对象 
当ActionServlet接收到一个客户请求时,将执行如下流程. 
-(1)检索和用户请求匹配的ActionMapping实例,如果不存在,就返回请求路径无效信息; 
-(2)如果ActionForm实例不存在,就创建一个ActionForm对象,把客户提交的表单数据保存到ActionForm对象中; 
-(3)根据配置信息决定是否需要表单验证.如果需要验证,就调用ActionForm的validate()方法; 
-(4)如果ActionForm的validate()方法返回null或返回一个不包含ActionMessage的ActuibErrors对象, 就表示表单验证成功; 
-(5)ActionServlet根据ActionMapping所包含的映射信息决定将请求转发给哪个Action,如果相应的 Action实例不存在,就先创建这个实例,然后调用Action的execute()方法; 
-(6)Action的execute()方法返回一个ActionForward对象,ActionServlet在把客户请求转发给 ActionForward对象指向的JSP组件; 
-(7)ActionForward对象指向JSP组件生成动态网页,返回给客户; 


为什么要用: 
JSP、Servlet、JavaBean技术的出现给我们构建强大的企业应用系统提供了可能。但用这些技术构建的系统非常的繁乱,所以在此之上,我们需要一个规则、一个把这些技术组织起来的规则,这就是框架,Struts便应运而生。 


基于Struts开发的应用由3类组件构成:控制器组件、模型组件、视图组件 


Struts的validate框架是如何验证的? 
在struts配置文件中配置具体的错误提示,再在FormBean中的validate()方法具体调用。 


说下Struts的设计模式 
MVC模式: web应用程序启动时就会加载并初始化ActionServler。用户提交表单时,一个配置好的ActionForm对象被创建,并被填入表单相应的数据,ActionServler根据Struts-config.xml文件配置好的设置决定是否需要表单验证,如果需要就调用ActionForm的 Validate()验证后选择将请求发送到哪个Action,如果Action不存在,ActionServlet会先创建这个对象,然后调用 Action的execute()方法。Execute()从ActionForm对象中获取数据,完成业务逻辑,返回一个ActionForward对象,ActionServlet再把客户请求转发给ActionForward对象指定的jsp组件,ActionForward对象指定的jsp生成动态的网页,返回给客户。 


struts1和struts2的区别其实并不是太大,两者的区别: 


Action 类: 

  ◆Struts1要求Action类继承一个抽象基类。Struts1的一个普遍问题是使用抽象类编程而不是接口。 
  ◆Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现 常用的接口。Action接口不是必须的,任何有execute标识的POJO对象都可以用作Struts2的Action对象。 


线程模式: 

  ◆Struts1 Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 
  ◆Struts2 Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题) 


Servlet 依赖: 

  ◆Struts1 Action 依赖于Servlet API ,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 
  ◆Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 


可测性: 

  ◆测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。 
  ◆Struts 2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 


捕获输入: 

  ◆Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。 
  ◆ Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种ModelDriven 特性简化了taglib对POJO输入对象的引用。 


表达式语言: 

  ◆Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 
  ◆Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--"Object Graph Notation Language" (OGNL). 


 绑定值到页面(view): 

  ◆ Struts 1使用标准JSP机制把对象绑定到页面中来访问。 
  ◆Struts 2 使用 "ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 


类型转换: 

  ◆Struts 1 ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。 
  ◆Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。 

 

校验: 

  ◆Struts 1支持在ActionForm的validate方法中手动校验,或者通过Commons Validator的扩展来校验。同一个类可以有不同的校验内容,但不能校验子对象。 

  ◆Struts2支持通过validate方法和XWork校验框架来进行校验。XWork校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性 


 Action执行的控制: 

  ◆Struts1支持每一个模块有单独的Request Processors(生命周期),但是模块中的所有Action必须共享相同的生命周期。 
  ◆Struts2支持通过拦截器堆栈(Interceptor Stacks)为每一个Action创建不同的生命周期。堆栈能够根据需要和不同的Action一起使用  

虽然,有许多的不懂,不过,继续加油!!!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值