struts2 案例代码实现及遇到的问题【struts2.5版本】
1、Struts是什么?Struts是流行和成熟的基于MVC设计模式的WEB应用程序框架;
2、使用Struts的目的?
使用它的目的:为了帮助我们减少在运用MVC设计模型来开发WEB应用的时间;
MVC是模型社团控制器,一种软件设计典范,用一种业务逻辑,数据,界面显示分享的方法组织代码,将业务逻辑聚焦到一个部件里面在改进和个性化定制界面及用户交互的同时,不需要重新编写业务逻辑。
3、搭建环境步骤:
(1)下载相关JAR包;/
(2)创建WEB项目,并导入Struts相关jar包;
1.struts2-core-2.3.1.1.jar struts核心包
2.freemarker-2.3.18.jar freeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具
3.commons-logging-1.1.1.jar Jakarta的通用日志记录包
4.ognl-3.0.3.jar 支持ognl表达式
5.xwork-core-2.3.1.1.jar xwork的包 由于Struts2是由xwork的延伸 有些类依然关联着 xwork的类(但是从Struts2.5.5开始就没有这个包,都合并到struts2-core里面了)
6.commons-fileupload-1.2.2.jar struts的上传下载
7、log4j-api-2.7.jar struts2.5版本开始必须导入该包,不然会无法开启tomcat服务器
(3)创建并完善相关配置文件;
1、web.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="" xmlns="" xsi:schemaLocation=" .xsd" id="WebApp_ID" version="3.0">
<display-name>HelloStruts2</display-name>
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
注意:这里的struts版本为2.5.5,所以过滤器类所在目录为 <filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>, 可能与其它版本的不一样,但是你按住Ctrl并把鼠标放在上面,如果变成链接可以跳转,则说明过滤器类是正确的。
2.struts2.xml的配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
".5.dtd">
<struts>
<package name="default" namespace="/" extends="struts-default">
<action name="hellostruts2" class="com.imooc.action.HelloStruts2Action">
<result>/result.jsp</result>
</action>
</package>
</struts>
注意:这里的action类,路径一定要写对(包括包名和类名),写好之后,按住Ctrl键,把鼠标放在上面,确定可以跳转到你编写的action类文件中,则说明路径没有问题。
(4)创建ACTION并测试启动;
package com.imooc.action;
import com.opensymphony.xwork2.ActionSupport;
public class HelloStruts2Action extends ActionSupport {
@Override
public String execute() throws Exception {
System.out.println("execute HelloAction");
return SUCCESS;
}
}
这里启动服务器,在浏览器中输入网址:localhost:8080/HelloStruts2/hellostruts2.action,页面就会跳转到result.jsp,并且显示页面中的内容。
(5)遇到的问题
- Eclipse配置Struts2问题:ClassNotFoundException: org...dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
解:因为struts2.5以上的版本中, StrutsPrepareAndExecuteFilter类存在于包“org.apache.struts2.dispatcher.filter”中,所以过滤器类所在目录为<filter-class>org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter</filter-class>
- Tomcat无法正常启动,出现如下错误:
在本实例中,我就遇到了下列问题,无法正常启动tomcat服务器:
java.lang.NoClassDefFoundError: Lorg/apache/logging/log4j/Logger;
其实是因为少导入了一个包(Caused by: java.lang.ClassNotFoundException: org.apache.logging.log4j.Logger):log4j-api-2.7.jar 。
- 在struts.xml中使用通配符时,编译没有问题,但浏览器访问抛出异常:Struts has detected an unhandled exception:
Message:There is no Action mapped for namespace [/] and action name [user_login] associated with context path [/shop].
为了提高安全性,内部会验证是否允许访问该方法,所以要在struts.xml文件中的Action标签里面加上:
<allowed-methods>方法名1,方法名2…</allowed-methods>