今天是学习Struts框架的第一天,记录下来遇到的第一个问题,折腾了半天了,终于解决了。
记录一下搭建过程:
一:搭建环境:
eclipse:eclipse-jee-oxygen-2-win32-x86_64
jdk:jdk1.8.0_131
Tomcate:apache-tomcat-7.0.79

二:下载struts2相关的jar包。

可以从官网下载,下载步骤如下:

1,​​http://struts.apache.org/download.cgi#struts251​​,可以下载Full Distribution,因为里面包括用例、库、开发帮助文档和源码等。下载完后解压,如下图所示:

Struts2 搭建框架记录_环境搭建


Struts2 搭建框架记录_xml_02


解压后的文件夹包含的内容有:

apps:里面包含了一些示例程序,可以用来借鉴里面的配置,后面可以方便我们去配置自己的项目,节省时间和避免出错,马士兵老师说过:作为一个程序猿,要学会“copy改”!

lib:目录下是项目需要用到的jar包,根据自己的项目需要,引用相应的包即可

src:里面包含了实例的源码

我们只需要lib下的一些jar包和apps里面的初始配置文件。三:开始搭建struts框架。

1,按照如下图进行:

Struts2 搭建框架记录_java_03


Struts2 搭建框架记录_xml_04


Struts2 搭建框架记录_环境搭建_05


然后在项目的WebContent/WEB-INF/lib下添加并引入struts的jar包。如下图所示:

Struts2 搭建框架记录_struts_06


右键lib目录>>import:

Struts2 搭建框架记录_struts2_07


Struts2 搭建框架记录_struts_08


选中之后,点finish即可,就可以看到导入的jar包了

2.5版本的里面没有xwork-core.jar包,是因为这个包被包含在Struts2-core.jar里面了,2.3版本里有这个jar包,可以下载2.3的all压缩包,后面还要用到借用2.3版本里面的初始配置

然后是配置struts.xml文件:

可直接复制2.3的解压包里apps目录下的实例struts2-blank里面的struts.xml文件到项目的src文件夹下,复制源文件之后在直接在eclipse里面右键项目下的JavaResource下的src文件夹粘贴即可

源码配置如下:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">

<struts>
<!-- 这里注释掉的是原来的配置,搭建一个简单的测试环境,只需要借鉴其中的一部分即可
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />

<package name="default" namespace="/" extends="struts-default">

<default-action-ref name="index" />

<global-results>
<result name="error">/WEB-INF/jsp/error.jsp</result>
</global-results>

<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>

<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
</package>

<include file="example.xml"/>
-->
<!-- Add packages here 下面才是这个简单的环境需要的配置 -->
<package name="default" namespace="/" extends="struts-default">

<action name="hello">
<result >
/Hello.jsp
</result>
</action>
</package>
</struts>

第二步是在web.xml加上如下代码(过滤器):
此处的代码是在解压包里面拷贝的初始配置,完全拷贝filter标签里的内容,这个要是能记住,这说明大脑是很有潜力的,直接copy改,会更有效率,还不容易出错

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>Struts2Test</display-name>
<!--
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
-->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>

<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

然后在webcontent上右键,新建一个Hello.jsp文件,内容如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Hello Struts2</title>
</head>
<body>
Hello Struts2!
</body>
</html>

然后右键项目名,将项目部署到tomcat服务器上,会提示你是否重启,如果对项目内容作了修改的话,需要重启一下,避免产生不必要的错误:

Struts2 搭建框架记录_java_09


会出现如题目所示的错误提示,这是因为再配置struts.xml的时候namespace下只有一个斜杠,没有默认的文件,需要手动在路径后加入hello,例如:​​http://localhost:8080/Struts2Test/hello​​,路径为localhost+项目名+项目首页在struts.xml中配置的名称,此处文件名是Hello.jsp,但是路径之后用的是hello,因为配置文件中有action name=”hello”这么一句。

如下如所示即证明环境搭建好了

Struts2 搭建框架记录_struts2_10


网上关于这个错误的解决办法首先是检查Action配置错误,其实并不一定,可能是配置没有问题,是没有访问正确的路径,导致eclipse找不到正确的Action,要仔细检查项目配置中的各种Action所对应的文件,是否是项目中存在的文件。这个不是一个很容易检查出来的错误,需要注意。
后面贴上别人的解决思路:

1.先看struts.xml是否在src下
.2.在检查struts.xml文件是否有错误
3.web.xml文件配置struts.xml文件过滤器是否出错