struts2 找不到action,急!
展开全部 XML档案的阶层格式适用于于组态设定,也因此许多的开源专案都将XML作为预设的组态定义方式,但通常也会提供非XML定义档的方式,像属性档案. properties,Spring也可以让您使用属性档案定义Bean,例如定义一个beans-config.properties:beans-config.properties helloBean.class=onlyfun.caterpillar.HelloBeanhelloBean.helloWord=Welcome!下个properties.jar的包就可以在eclipse中创建.properties文件了 和一般的资源文件创建一样 都是KEY=VALUE的形式 key都是英文 value是中文 只不过*.properties文件不能显示中文 所以要经过java自带的工具进行编码处理 操作如下 1.在命令行下转到你要转换文件的目录 2.要输入的命令格式如下: native2assii [-encoding Encoding] [inputfile [outputfile]] 例子: native2assii -encoding gb2312 application_temp.properties application_zh_CN.properties...
可以帮我看看struts2里为什么报错找不到action吗
1.Guice简介 2.Helloworld 简介:本文为如何用Guice进行DI和如何整合Struts2 1. 简介 Guice是Google推出的一款DI框架,因其优秀荣获了Jolt大奖。
和Spring相比,要轻量很多。
运行时只要指定一个配置类,实现其com.google.inject.Module接口,指定接口和实现类即可。
需要的基础jar包有 Guice需要的jar包,如果是web应用,需要guice-servlet-2.0.jar,整合Struts2则需要guice-struts2-plugin-2.0.jar aopalliance.jar guice-2.0.jar guice-servlet-2.0.jar guice-struts2-plugin-2.0.jar Struts2需要的jar包 commons-fileupload-1.2.1.jar commons-io-1.3.2.jar commons-logging-1.0.4.jar freemarker-2.3.13.jar ognl-2.6.11.jar struts2-core-2.1.6.jar xwork-2.1.2.jar Guice与Spring的对比SpringGuice使用XML使用将类与类之间的关系隔离到xml中,由容器负责注入被调用的对象,因此叫做依赖注入不使用xml,将类与类之间的关系隔离到Module中,声名何处需要注入,由容器根据Module里的描述,注入被调用的对象。
使用Annotation使用 支持自定义Annotation标注,对于相同的接口定义的对象引用,为它们标注上不同的自定义Annotation注释,就可以达到同一个类里边的同一个接口的引用,注射给不同的实现,在Module里用标注做区分,灵活性大大增加。
使用Annotation也未必是好事,范型等新特性也未必是好事,目前大多的服务器均不支持jdk1.5,wls要9以前才支持,而目前的客户由于价格原因也很少选用wls9的,至少我们做过的项目中都没有。
功能再强,客户不需要,何用?运行效率装载spring配置文件时,需解析xml,效率低,getBean效率也不高,不过使用环境不会涉及到getBean,只有生产环境的时候会用到getBean,在装载spring应用程序的时候,已经完成全部的注射,所以这个低效率的问题不是问题。
使用Annotation,cglib, 效率高与spring最明显的一个区别,spring是在装载spring配置文件的时候把该注入的地方都注入完,而Guice呢,则是在使用的时候去注射,运行效率和灵活性高。
类耦合度耦合度低,强调类非侵入,以外部化的方式处理依赖关系,类里边是很干净的,在配置文件里做文章,对类的依赖性极低。
高,代码级的标注,DI标记@inject侵入代码中,耦合到了类层面上来,何止侵入,简直侵略,代码耦合了过多guice的东西,大大背离了依赖注入的初衷,对于代码的可维护性,可读性均不利类编写时需要编写xml,配置Bean,配置注入只需声明为@inject,等着被注入, 最后在统一的Module里声明注入方式仅支持IOC否,spring目前已经涉猎很多部分是,目前仅仅是个DI容器是否易于代码重构统一的xml配置入口,更改容易配置工作是在Module里进行,和spring异曲同功支持多种注入方式构造器,setter方法Field,构造器,setter方法灵活性1,如果同一个接口定义的引用需要注入不同的实现,就要编写不同的Module,烦琐2,动态注入如果你想注射的一个实现,你还未知呢,怎么办呢,spring是没办法,事先在配置文件里写死的,而Guice就可以做到,就是说我想注射的这个对象我还不知道注射给谁呢,是在运行时才能得到的的这个接口的实现,所以这就大大提高了依赖注射的灵活性,动态注射。
与现有框架集成度1, 高,众多现有优秀的框架(如struts1.x等)均提供了spring的集成入口,而且spring已经不仅仅是依赖注入,包括众多方面。
2, Spring也提供了对Hibernate等的集成,可大大简化开发难度。
3, 提供对于orm,rmi,webservice等等接口众多,体系庞大。
1,可以与现有框架集成,不过仅仅依靠一个效率稍高的DI,就想取代spring的地位,有点难度。
配置复杂度在xml中定位类与类之间的关系,难度低代码级定位类与类之间的关系,难度稍高 写了一个demo,对于简单的应用Guice还是比Spring方便很多 └─com └─greysh └─guice ├─action │ UserAction.java │ ├─config │ ModuleConfig.java │ ├─model │ User.java │ └─service │ UserService.java │ └─impl UserServiceImpl.java 代码见附件 Guie加载的原理是 先去调用自己实现Module接口的类,这个类类似Spring的applicationcontext.然后调用configure函数的 binder进行绑定,相当于spring里面的ref绑定,然后绑定完后就在需要注入的放指定 @Inject 进行注入,主要有构造函数注入,方法注入,字段注入。
一般而言用方法注入 本教程的User为实体类,仅仅有一个字段userName; public interface UserService { void invoke(User user); } 对于接口实现 public void invoke(User user) { user.setUserName("Name : " + user.getUserName()); 当然最重要的是action @Inject private UserService userService; @Inject private User user; 本教程采用字段注入 由于不采用Struts2的自身的DI,因此要指定为guice
struts 2 的难点在哪?
struts2 知识要点2009-12-24 10:501. 按这个顺序加载 Struts2 的常量,struts-default.xml、struts-plugin.xml、struts.xml、web.xml;后加载的会覆盖前面的同名常量。
强烈不推荐在 web.xml 中配置 Struts2 常量。
2. Struts1 中有一种 Action 类型是 ForwardAction,而在 Struts2 中相应的配置方式是 ,Showcase.action 直接映射到 /showcase.jsp。
/showcase.jsp3. struts.xml 中 的 namespace (命名空间) 相当于 Struts1 的模块的概念,但比 Struts1 的模块间切换要便。
例如,对于以下的配置 因 action GetBooks 所在的包指定了命名空间,所以 URL 就需要 /book/GetBooks.action 与它映射了。
如果未指定命名空间或指定为 "" 就是默认命名空间,指定 "/" 就是根命名空间,URL 就应该是 /GetBooks.action。
配置在默认命名空间中的 Action 相当于全局的,即类似于 Struts1 的 。
也就是说当找不到指定命名空间(例如 /barspace/bar.action) 中的 Action (bar.action) 时,就会尝试去默认命名空间 ("") 里去找。
4. 系统不会严格区分 Action 里哪个属性是用于封装请求参数的属性,那个属性是封装处理结果的属性。
对系统而言,封装请求参数的属性和封装处理结果的属性是完全平等的。
5. Struts2 的 Action 可以是一个 POJO,可以实现 Action 接口,也可以继承 ActionSupport。
实际上 ActionSupport 类是 Struts2 默认的 Action 处理类,就是说,配置 Action 时未指定 class 属性时,系统自动指定为 ActionSupport 类。
6. Struts2 中要访问 Servlet API 必须借助于 ActionContext 类,其中有访问对 HttpServletRequest(request),HttpSession(session),ServletContext(application) 进行操作的方法 (操作的是各自的 attribute 属性),不过还没发现如何操作 HttpServletResponse(response) 对象。
注意,这些方法都转换成了对 Map 实例的操作,而非真实的 Servlet API 实例,Struts2 会完成与实际存储的映射,所以 Action 仍然是脱离 Servlet API 的。
ActionContext 直接的 get() 和 put() 方法针对的是 request 的属性。
7. Struts2 也可以直接访问 Servlet API 实例,让你的 Action 实现后面其中一个接口就能获取到相应 Servlet API 实例:ServletContextAware、ServletRequestAware、ServletResponseAware。
注意要实现的接口方法。
如果觉得实现接口的方式麻烦,那么可以借助 ServletActionContext 的方法来拿到 Servlet API 的各个实例。
这样却是让 Action 与 Servlet API 耦合起来了。
8. 即使我们在 Struts2 的 Action 中获得了 HttpServletResponse 对象,也不要尝试直接在 Action 中生成对客户端的输出,没效果的,因为 Action 只是一个控制器,它并不直接对浏览者生成任何响应。
这也是为什么 ActionContext 未提供对 HttpServletResponse 的操作,只是操作 Cookie 要用到 response。
在 Struts1 中,如果 Action 返回 null 时,可以通过 response.getWriter().println("Hello World."); 输出内容到页面。
9. Struts2 也有像 Struts1 那样的对 Action 动态方法调用的特性,它是通过指定 form 的 action="ActionName!methodName.action" 来实现的,例如某表单的 action="Login!regist.action",提交后将会调用 name="Login" 的 Action 类的 regist() 方法,而非默认的 execute() 方法。
这种方式可以在一个 Action 中包含多个处理逻辑。
是不是 Struts1 要方便,不需要在配置文件中对这个 Action 配置额外的属性。
10. 可为 action 配置指定一个 method 属性,同上,这种方式也在一个 Action 类中定义多个逻辑,每个处理方法映射成一个逻辑 Action,有不同的 name 属性,非常类似于 Struts1 的 MappingDispatchAction。
缺点就是不像上面那样,被分开的多个逻辑 Action 不能共享 配置,并且 action 配置的 class 属性值产生冗余。
struts2怎么加入eclipse
下载并解压struts2,此过程相信对于常和计算机打交道的大伙儿不是问题。
打开Eclipse,建立一个web项目"Text",如果不清楚该过程,请搜索参考小编的一篇相关文章:eclipse下如何配置tomcat。
在struts2文件包中,找到struts-2.3.12\apps\struts2-blank.war文件,并将其用解压软件解压出来,小编将其解压到桌面的“新建文件夹”中。
在解压出的文件中,找到:新建文件夹\WEB-INF\lib\ 下的所有jar包,将其中所有jar包复制到eclipse所建立的Text项目 -- WebContent -- WEB-INF --lib,切记,jar包全部导入到该lib下,不要导错。
在解压出的文件中,找到:新建文件夹\WEB-INF\src\java\struts.xml,将该文件复制到第二步eclipse中新建的web项目Text下的src中,如下图所示:eclipse的Text项目中,打开struts.xml文件,进行修改,只保留如下内容,修改内容用文字描述不方便,请仔细看图:在解压出的文件中,找到:新建文件夹\WEB-INF\web.xml ,将该xml文件中的filter内容复制到Eclipse中的web.xml文件中相应位置。
如下两图:eclipse的Text项目中,在WebContent下建立hello.jsp文件,并输入“HelloWorld!!”,保存。
如下图:右键单击Text项目,选择“Run As”--"Run on Server",运行该项目:如下图:弹出网站后,会显示404的错误,此时,在地址栏后面输入“hello”或者"hello.action",回车后,即可弹出“HelloWorld!!”。
struts2在Eclipse上的基本配置到此结束。
转载请注明出处51数据库 » struts2 helloword
小雅baby