struts2和servlet的共存问题
struts2和servlet的共存问题
Posted on2012-08-0517:24xcp阅读(799)评论(0)编辑收藏所属分类:struts2
先看一下struts2的web.xml文件:
org.apache.struts2.dispatcher.FilterDispatcher
在请求应用时,struts2将会截获所有请求,对于servlet请求将不能够正常相应,是struts2把servlet 当成action了,因为servlet和action都是没有后缀的
解决方法目前有四种:
方法1:统一在servlet后面加上.servlet(包括web.xml配置文件中和页面上使用servlet的地方)方法2:继承StrutsPrepareAndExecuteFilter,实现以下两个方法。
public void init(FilterConfig filterConfig)throws
ServletException{
..............................
}
public void doFilter(ServletRequest request,ServletResponse response,
FilterChain chain)throws
IOException,ServletException{ ...............................
if(url.contain("servlet")){
((HttpServletResponse)response).sendRedirect(redirectUrl);
}
super.doFilter(request,response,chain);
}
方法3:修改拦截页面配置
原:
org.apache.struts2.dispatcher.FilterDispatcher
/*
现:
servlet的请求路径不必改变
方法4:在struts.xml文件中修改
SCME_STRUTS2试卷
--------------------------------------装--------------------------------------订------------------------------线---------------------------------------- **学院课程考试试卷 课程名称:《使用Struts2开发基于MVC设计模式的企业级应用》(A)卷 年级:班级: 姓名:_______________ 学号:_________________ 考试(考查) 闭卷 选择题(每题2分,共计100分) 1.在控制器类中一般需要添加相应属性的( A )和(C )。(选两项) A.setter方法 B.as方法 C.getter方法 D.is方法 2.业务控制器需要在( B )配置文件中进行配置 A.web.xml B.struts.xml C.struts2.xml D.webwork.xml 3.不属于Struts 2表单标签库的是( D )。 A.
java面试题
基本概念 ?操作系统中heap 和stack 的区别 ?什么是基于注解的切面实现 ?什么是对象/关系映射集成模块 ?什么是Java 的反射机制 ?什么是ACID ?BS与CS的联系与区别 ?Cookie 和Session的区别 ?fail-fast 与fail-safe 机制有什么区别 ?get 和post请求的区别 ?Interface 与abstract 类的区别 ?IOC的优点是什么 ?IO 和NIO的区别,NIO优点 ?Java 8 / Java 7 为我们提供了什么新功能 ?什么是竞态条件?举个例子说明。 ?JRE、JDK、JVM 及JIT 之间有什么不同 ?MVC的各个部分都有那些技术来实现?如何实现? ?RPC 通信和RMI 区别 ?什么是Web Service(Web服务) ?JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。?WEB容器主要有哪些功能? 并请列出一些常见的WEB容器名字。 ?一个”.java”源文件中是否可以包含多个类(不是内部类)?有什么限制
?简单说说你了解的类加载器。是否实现过类加载器 ?解释一下什么叫AOP(面向切面编程) ?请简述Servlet 的生命周期及其相关的方法 ?请简述一下Ajax 的原理及实现步骤 ?简单描述Struts的主要功能 ?什么是N 层架构 ?什么是CORBA?用途是什么 ?什么是Java虚拟机?为什么Java被称作是“平台无关的编程语言” ?什么是正则表达式?用途是什么?哪个包使用正则表达式来实现模式匹配 ?什么是懒加载(Lazy Loading) ?什么是尾递归,为什么需要尾递归 ?什么是控制反转(Inversion of Control)与依赖注入(Dependency Injection)关键字 finalize ?什么是finalize()方法 1.finalize()方法什么时候被调用 2.析构函数(finalization)的目的是什么 3.final 和finalize 的区别 4.final ?final关键字有哪些用法 1.final 与static 关键字可以用于哪里?它们的作用是什么 2.final, finally, finalize的区别
Struts2学习笔记
Struts2项目的构建与配置 1.配置struts.xml (1)配置struts.xml可以参考下载的struts-2.3.14.1-all.zip解压后的apps文件夹下的 参考项目的struts.xml文件。 (2)主要的配置如下:
类型转换中的异常处理及资源国际化教学内容
类型转换中的异常处理及资源国际化
Struts2的类型转换异常处理 在视图页面中,用户的输入是很复杂的,偶然的输入错误或者恶意输入都会导致程序异常。因此,必须对用户输入的数据进行校验。例如,年龄信息必须是整数,一但用户输入了一个ABC,这时就需要进行数据类型校验。 Struts 2.0提供了类型转换异常处理机制,使用的是一个名字为conversionError的拦截器,这个拦截器被注册在默认的拦截器栈中。如果Struts 2.0在类型转换过程中出现问题,这个拦截器就会进行拦截,并将异常信息封装成一个fieldError对象在视图页面上显示出来。 整个过程无须我们参与,Struts 2.0的类型转换器和conversionError拦截器会自动实现。 (一)简单类型转换异常 主要是处理一些String、int、Date等数据类型之间的转换异常。 见例子“convError”,一个用户注册的功能: (1)Action的代码: package conv; import com.opensymphony.xwork2.ActionSupport; public class userAction extends ActionSupport { private String name; private int age; public String getName() { return name; } public void setName(String name) { https://www.360docs.net/doc/304347908.html, = name; } public int getAge() { return age; }
Struts2+Spring3+Hibernate4+Maven整合
Struts2+Spring3+Hibernate4+Maven整合 目录 1.建立Maven工程 2.搭建Spring3 3.搭建Struts2并整合Spring3 4.搭建Hibernate4并整合Spring3 内容 1.建立Maven工程 第一步: 第二步:
第三步:
第四步: 注意:这里的JDK要选择默认的,这样别人在使用的时候,如何JDk不一致的话也不会出错,如下图所示:
第五步: Maven标准目录 src/main/java src/main/resources src/test/java src/test/resources 第六步: 发布项目:Maven install 清除编译过的项目:Maven clean
OK,Mean 工程创建成功! 2. 搭建 Spring3
(1)下载Spring3需要的jar包 1.spring-core 2.spring-context 3.spring-jdbc 4.spring-beans 5.spring-web 6.spring-expression 7.spring-orm 在pom.xml中编写Spring3需要的包,maven会自动下载这些包。
JAVAWEB考试B卷
一、选择题(每题1分,共35分) 1. Struts2主要核心功能是由()实现 a) 过滤器b) 拦截器c) 类型转换器d) 配置文件 2. Struts中的ActionServlet属于MVC模式() a) 视图b) 模型c) 控制器d) 业务层 3. Struts2框架由()和()框架发展而来的【选择二项】 a) Hibernateb) Strutsc) Springd) WebWork 4. Struts2以(B)为核心,采用()的机制处理用户请求 a) Struts b) WebWork c) 拦截器 d) jar包 5. struts2中,不属于Action接口中定义的字符串常量的是() a) SUCCESS b) FAILURE c) ERROR d) INPUT 6. struts2在控制器类中一般需要添加相应属性的()和()【选择二项】 a) setter方法 b) as方法 c) getter方法 d) is方法 7. struts2控制器需要在()配置文件中进行配置 a) web.xml b) struts.xml c) application.porperties d) webwork.xml 8. 不属于struts2标签库的是() a)
struts2复习题(含答案)
Struts2复习题 1.以下属于struts2的控制器组件是: 2.以下属于struts2的体系结构的是:(多选) 控制器组件配置文件 3.以下属于struts2配置文件中的配置元素是:(多选) A.
Struts2的工作机制原理分析及实例
Struts2的工作机制分析及实例 一、概述 本章讲述Struts2的工作原理。 读者如果曾经学习过Struts1.x或者有过Struts1.x的开发经验,那么千万不要想当然地以为这一章可以跳过。实际上Struts1.x 与Struts2并无我们想象的血缘关系。虽然Struts2的开发小组极力保留Struts1.x的习惯,但因为Struts2的核心设计完全改变,从思想到设计到工作流程,都有了很大的不同。 Struts2是Struts社区和WebWork社区的共同成果,我们甚至可以说,Struts2是WebWork的升级版,他采用的正是WebWork 的核心,所以,Struts2并不是一个不成熟的产品,相反,构建在WebWork基础之上的Struts2是一个运行稳定、性能优异、设计成熟的WEB框架。 本章主要对Struts的源代码进行分析,因为Struts2与WebWork的关系如此密不可分,因此,读者需要下载xwork的源代码,访问https://www.360docs.net/doc/304347908.html,/xwork/download.action即可自行下载。 下载的Struts2源代码文件是一个名叫struts-2.1.0-src.zip的压缩包,里面的目录和文件非常多,读者可以定位到 struts-2.1.0-src\struts-2.0.10\src\core\src\main\java目录下查看Struts2的源文件,如图14所示。 (图14) 二、主要的包和类 Struts2框架的正常运行,除了占核心地位的xwork的支持以外,Struts2本身也提供了许多类,这些类被分门别类组织到不同的包中。从源代码中发现,基本上每一个Struts2类都访问了WebWork提供的功能,从而也可以看出Struts2与WebWork千丝万缕的联系。但无论如何,Struts2的核心功能比如将请求委托给哪个Action处理都是由xwork完成的,Struts2只是在WebWork 的基础上做了适当的简化、加强和封装,并少量保留Struts1.x中的习惯。
struts2题目
1.下面关于Struts2描述正确的是()。 A. Struts2是线程安全的 B. Strut2为每个请求都只生成一个Action实例 C .Strut2是在Struts1基础上发展起来的 D. Struts2只支持jsp视图组件 2.Struts2配置包时,必须继承struts-default包,在下 面的哪个文件中可以找到struts-default包的配置()。 A.default.properties B. struts-message.properties C. struts.dtd D.struts-default.xml 3.Struts2默认的处理结果类型是()。 A. dispatcher B. redirect C. chain D. 以上说法都不正确 4.在Struts2框架中,实现Action接口的作用是()。 A.实现其中的execute()方法 B.实现数据校验 C.实现国际化 D.规范Action类 5.在Struts2中动态方法调用的格式为()。 A. ActionName_methodName.do B. ActionName!methodName.do C. ActionName_methodName.action D. ActionName!methodName.action 6.在Struts2中自定义的类型转换器必须实现的接口是 ()。 A.Convert B.TypeConverter C. StrutsTypeConverter D. StrutsConvert 7.在Struts2中,Action类中的属性从表单获取用户输入 的值,以下哪个组件将表单的值解析出来赋给Action ()。 A. ActionServlet B. Action C. 拦截器栈 D. HttpServletRequest 8.在Struts2中,关于 Struts2原理 上图来源于Struts2官方站点,是Struts 2 的整体结构。 Struts2框架由3个部分组成:核心控制器FilterDispatcher、业务控制器和用户实现的业务逻辑组件。在这3个部分里,Struts 2框架提供了核心控制器FilterDispatcher,而用户需要实现业务控制器和业务逻辑组件。 (1)核心控制器:FilterDispatcher FilterDispatcher是Struts2框架的核心控制器,该控制器作为一个Filter运行在Web应用中,它负责拦截所有的用户请求,当用户请求到达时,该Filter 会过滤用户请求。如果用户请求以action结尾,该请求将被转入Struts2框架处理。 Struts2框架获得了*.action请求后,将根据*.action请求的前面部分决定调用哪个业务逻辑组件,例如,对于login.action请求,Struts2调用名为login的Action来处理该请求。 Struts2应用中的Action都被定义在struts.xml文件中,在该文件中定义Action 时,定义了该Action的name属性和class属性,其中name属性决定了该Action 处理哪个用户请求,而class属性决定了该Action的实现类。 Struts2用于处理用户请求的Action实例,并不是用户实现的业务控制器,而是Action代理——因为用户实现的业务控制器并没有与Servlet API耦合,显然无法处理用户请求。而Struts2框架提供了系列拦截器,该系列拦截器负责将HttpServletRequest请求中的请求参数解析出来,传入到Action中,并回调Action 的execute方法来处理用户请求。 (2)一个请求在Struts2框架中的处理大概分为以下几个步骤 1 .客户端初始化一个指向Servlet容器(例如Tomcat)的请求,即HttpServletRequest请求。 2 .这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin) 3. 接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请是否需要调用某个Action 4 .如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 5 .ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类 6 .ActionProxy创建一个ActionInvocation的实例。 7 .ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。 8 .一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2 框架中继承的标签。在这个过程中需要涉及到ActionMapper Create Struts 2 Web Application With Artifacts In WEB-INF lib and Use Ant To Build The Application Edit Page Browse Space Add Page Add News You can download this complete example, Basic_Struts2_Ant, from Google Code - https://www.360docs.net/doc/304347908.html,/p/struts2-examples/downloads/list. Click on the link for Basic_Struts2_Ant.zip and save the file to your computer. Unzip the file and you should have a folder named Basic_Struts2_Ant. In that folder is a README.txt file with instruction on how to build and run the application. Icon This tutorial assumes you already know how to create a Java web application, use Ant to build the web application archive (war) file, and deploy the war file to a Servlet container such as Tomcat or Jetty. To create a Struts 2 web application with the Struts 2 artifacts added to the the application's class path manually you will need to download the Struts 2 distribution from the Apache Struts website. On the Struts 2 download page, click on the link for the current General Availability release. In that release's section you'll find several links. To get started with a basic Struts 2 web application you need to only download the Essential Dependencies Only zip file, which is approximately 12mb. After downloading this zip file, unzip it. You should have a folder named the same as the current general availability release and in that folder will be a lib folder. The lib folder contains the Struts 2 jar files (e.g. struts2-core-X.X.X.X.jar, where X.X.X.X is the version) and other jar files Struts 2 requires (e.g. xwork-core.X.X.X.jar). As we create our basic Struts 2 web application we will copy from the Struts 2 distribution lib folder just the jar files our application requires. As we add features to our application in future tutorials we will copy other jar files. Step 1 - Create A Basic Java Web Application In your Java IDE create a web application project named Basic_Struts2_Ant. To follow along with this tutorial your web application should have the following folder structure: Remember Struts 2 requires Servlet API 2.4 or higher, JSP 2.0 or higher, and Java 5 or higher. The example project, Basic_Struts2_Ant, which you can download from Google Struts2在WebWork基础上发展起来的,可扩展的JAVA EE web框架。框架设计的目标贯穿整个开发周期,从开发到发布,包括维护的整个过程。 Action类:Struts 2 Action类可以实现一个Action接口,也可实现其他接口,使可选和定制的服务成为可能。Struts2提供一个ActionSupport基类去实现常用的接口。Action接口不是必须的,任何有execute标识的POJO 对象都可以用作Struts2的Action对象。 线程模式:Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。 Servlet依赖:Struts 2 Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest 和 HttpServletResponse的必要性。 可测试性:Struts2 Action可以通过初始化、设置属性、调用方法来测试,“依赖注入”支持也使测试更容易。 捕获输入:Struts2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。Action属性能够通过web页面上的taglibs访问。 表达式语言:Struts 2 使用"ValueStack"技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。Struts2不仅支持JSTL, Struts2 还可使用OGNL进行类型转换。提供基本和常用对象的转换器。 校验:Struts2支持通过validate方法和XWork校验框架来进行校验。XWork 校验框架使用为属性类类型定义的校验和内容校验,来支持chain校验子属性。 Struts2自定义类型转换 原理 struts2的自定义类型转换机制为复杂类型的输入输出处理提供了便捷.struts2已经为我们提供了几乎所有的primitive类型以及常用类型(如Date)的类型转换器,我们也可以为我们自定义类添加自定义类型转化器. struts2为我们提供了一个类型转化器的入口: ognl.DefaultTypeConverter,或继承org.apache.struts2.util.StrutsTypeConverter,由于StrutsTypeConverter提供了更好的封装,所以建议大家在写转换器时通常采用继承StrutsTypeConverter方式来实现. StrutsTypeConverter类实质上是DefaultTypeConverter的扩展 public abstract class StrutsTypeConverter extends DefaultTypeConverter { } StrutsTypeConverter中的两个核心方法 public abstract Object convertFromString(Map context, String[] values, Class toClass); public abstract String convertToString(Map context, Object o); convertFromString方法用于从前台页面获取字符串,将字符串转化为对象 convertToString方法用于将对象以字符串的方式输出到页面 我们在写struts2自定义类型转换类的时候主要就是覆盖上面两个方法 分类 struts2自定义类型转换从大的方面来讲分两种: u局部类型转换 一、第一个异常处理 严重: Servlet.service() for servlet jsp threw exception The Struts dispatcher cannot be found. This is usually caused by using Struts tags without the associated filter. Struts tags are only usable when the request has passed through its servlet filter, which initializes the Struts dispatcher needed for this tag. - [unknown location] at org.apache.struts2.views.jsp.TagUtils.getStack(TagUtils.java:60) at org.apache.struts2.views.jsp.StrutsBodyTagSupport.getStack(StrutsBodyTagSupport.java:44) at https://www.360docs.net/doc/304347908.html,ponentTagSupport.doStartTag(ComponentTagSupport.java:48) at https://www.360docs.net/doc/304347908.html,_005fstruts2_005flz.YpxxbQuery_jsp._jspx_meth_s_005fdebug_005f0(Ypxxb Query_jsp.java:108) at https://www.360docs.net/doc/304347908.html,_005fstruts2_005flz.YpxxbQuery_jsp._jspService(YpxxbQuery_jsp.java:83) 解决的办法:(4种解决方案) 1. web.xml 中添加一个filter 前提条件:strut2的必须架包已经引入,struts2的配置文件全部配置完成 1.首先创建一个struts.properties在src目录下,服务器启动时候会自动加载该文件,在这个文件中写入struts.custom.i18n.resources=globalMessages,服务器会自动选择前缀为globalMessages资源文件。(或者你在你的struts.xml文件中添加structs2知识点
struts2.3.20环境搭建详解
Struts2的介绍及总结
Struts2自定义类型转换
Struts 2 异常处理的常用的解决方法
struts2国际化配置