超简单的页面,就是一个欢迎页面,对于老手来说,可以飘过去了。
刚接触struts2,就一个欢迎页面就没有整明白。
出现了错误问题。先是在Ubuntu上自己写,不借助IDE,结果将所需要的文件都放在指定的目录下,结果不能出来效果。然后就下载了myeclipse,借助IDE,结果还是调试不通过。最后愤而转Win。
1、jdk,tomcat安装好后,测试tomcat成功。
http://localhost:8080/
出现Apache页面
2、下载struts2
下载的版本是struts-2.3.16.1,
然后将apps下的struts2-blank放到tomcat的webapps下
浏览器输入http://localhost:8080/struts2-blank
然后就可以看到效果。也就是说其实struts2是不需要配置的类似环境变量的,由于出现很多问题,我就以为struts2还需要什么配置环境变量之类的。
现在也就理解了struts2更应该说是一个编程模型,而不是一个tomcat,myeclipse这样的工具,也就存在什么配置环境变量了。
3、在myeclipse的项目中导入struts2的jar包,听java培训机构李刚老师的视频说,不要一股脑的将struts2的lib下的所有的jar包都导入,会有问题。我也不知道以前出现的问题是不是跟这个有关。将struts2-blanklib下的jar包导入到项目的路径中。具体步骤,右击项目->Build Path->Add libraries,选择user library,next,或者新建或者使用已经建好的,如果第一次配置就需要新建了,点击user library,然后选择new ,然后选择struts2-blanklib下面的包。这样至少接下来的编译是没问题了
4、制作一个页面,访问时出现“hello world”字样(学每一种语言都喜欢用这个实例,自己也用用)
a、写一个index页面
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<META HTTP-EQUIV="Refresh" CONTENT="0;URL=/struts2HelloWorld/HelloReader.action">
</head>
<body>
<h2>Loading ...</h2>
</body>
</html>
META选项是自动跳转的意思。url请准确书写,
由于写错了url,一直出现资源不可用
b、由于是使用了strtus2框架,我们自然是希望拦截到这个访问请求,
由此配置web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/j2ee/dtds/web-app_3_0.dtd">
<web-app>
<display-name>Struts Blank</display-name>
<filter>
<!-- 添加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>
注意版本号,尽管我还不知道版本到底有什么,对程序有什么影响,也不知道以前的错误是否跟版本号有关,最好改一下。
最后可能出现java.lang.ClassNotFoundException: org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter这个错误,那么我们就需要将struts2-blanklib下的jar包手工拷贝到应用名WEB-INFlib文件夹下面。
还有可能出现WARN No appenders could be found for logger (com.opensymphony.xwork2.util.fs.DefaultFileManagerFactory).这样类似的警告,我把它忽略了。
c、拦截到请求之后,就需要配置struts.xml文件来定义action了
<span style="font-size:18px;"><!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<package name="tutorial" extends="struts-default">
<action name="HelloReader" class="tutorial.HelloReader">
<result>
/helloworld.jsp
</result>
</action>
</package>
</struts>
</span>
注意修改struts.xml的版本号,版本号就是下载的struts2文件夹名后面的两个数字,我的是struts-2.3.16.1,那么改为2.3
其次出现的问题是提示我"struts-default",直接忽略,因为它是黄色叹号,这个警告有时有有时没有,不知道原因,或许是版本号吧(瞎猜的)
d、定义action处理类,
package tutorial;
import com.opensymphony.xwork2.ActionSupport;
public class HelloReader extends ActionSupport {
/**
*
*/
private static final long serialVersionUID = 1L;
public static final String MESSAGE = "Hello Reader ! I'm from struts2!";
public String execute() throws Exception{
setMessage(MESSAGE);
return SUCCESS;
}
public String getMessage() {
return message;
}
public void setMessage(String message) {
this.message = message;
}
//唯一的属性,将被自动赋值并打印
private String message = "";
}
注意定义包名,使用默认包名,在action的class属性写的时候不知道怎么写,直接写类名会出错,我直接写了一个包名
e、定义跳转页面
<span style="font-size:18px;"><%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title>Hello World</title>
</head>
<body>
<!-- 使用property标签来获取action中的属性,直接显示在页面中-->
<h2>
<s:property value="message"/>
</h2>
</body>
</html></span>
这个也有可能出现警告,说/struts-tags这个存在,也是有时有,有时没有,具体情况未知。
因为配置不好这些文件,也没法继续学下去,记录一下,也帮助一下其他人,随着深入的学习,上面的问题可能会一一解释清楚