提前准备工作,需从网上下载struts-2.2.3.1-all.zip压缩包。
第一步:
首先创建一个web项目(File-New-Web-Dynamic Web Project),名字为:struts2-examples
第二步:
把从网上下载struts-2.2.3.1-all.zip压缩包里的lib下的asm-3.1.jar、asm-commons-3.1.jar、asm-tree-3.1.jar、commons-fileupload-1.2.2.jar、commons-io-2.0.1.jar
commons-lang-2.5.jar、freemarker-2.3.16.jar、javassist-3.11.0.GA.jar、ognl-3.0.1.jar、struts2-core-2.2.3.1.jar、xwork-core-2.2.3.1.jar拷贝到WEB-INF/lib下。
右击项目名-properties-Java Build Path-Libraries-Add JARs-全选择刚刚lib下的jar包。我之前在网上查的几个包导入后,运行后,发现报错。所以,我又把struts-2.2.3.1-all.zip压缩包里struts2-blank项目里的包全拷贝过来的,就是上面的那几个包。顺便把web.xml也给拷贝过来。
第三步:
web.xml如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Struts Blank</display-name>
<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>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
</web-app>
web.xml里面有这样一段:<welcome-file>index.html</welcome-file>,这一步也很重要,一定要在WebContent目录下(与WEB-INF文件夹在同一级目录下)建一个index.html与之匹配,要不然,会出一些莫名其妙的错误。
第四步:
index.html内容如下:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
</head>
<body>
<p>Loading ...</p>
</body>
</html>
第五步:
在src目录下,新建一个struts.xml(名字的拼写很重要,这个名字不能随便命名)文件,内容如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
"D:\struts-2.2.3.1\src\core\src\main\resources\struts-2.0.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="true" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="Login" class="com.struts.action.LoginAction">
<result name="error">/pages/error.jsp</result>
<result name="success">/pages/success.jsp</result>
</action>
</package>
</struts>
"D:\struts-2.2.3.1\src\core\src\main\resources\struts-2.0.dtd"在头部有这样一句话,这是我把struts-2.0.dtd原来的路径换成我本地的了,原来的一直有警告,不过,我换成本地的还是有警告,不知道是为什么。。。这个struts-2.0.dtd 就是struts-2.2.3.1这个包里的,目录就是struts-2.2.3.1\src\core\src\main\resources\struts-2.0.dtd,你把struts-2.0.dtd这个文件放到自己本地后,把本地目录替换成我上面的那句话就行了。
<package name="default" namespace="/" extends="struts-default">
<action name="Login" class="com.struts.action.LoginAction">
<result name="error">/pages/error.jsp</result>
<result name="success">/pages/success.jsp</result>
</action>
</package>
这里的package里的name=“default"这个名字是随便给的,namespace="/"这个是固定的,extends="struts-default"好像也是固定的。
action里的name与下面的login.jsp里form里的action属性名要保持一致,class即为Action里的全路径,result 里的name="error",这里的error值与等会下面的LoginAction.java里的return后的值保持一致即可,即要跳转的页面啦。
第六步:
现在,再在WebContent目录下新建一个文件夹pages,在此文件夹中存放jsp页面。我这里新建了三个jsp页面,即login.jsp、success.jsp、error.jsp.
分别如下所示:
login.jsp,这里可以用S标签来做,就几行就可以了,我写的比较繁杂了。
<%@ 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>User Login</title>
</head>
<body>
<form action="/struts2-examples/Login.action" method="post">
<table align="left" width="50%" border="0" cellpadding="0"
cellspacing="0">
<tr>
<td></td>
</tr>
<tr>
<td height="30" bgcolor="" align="center" valign="middle">用户名:</td>
<td align="left" height="30" valign="middle"><input
style="width: 150px" type="text" name="username" value=""></input></td>
</tr>
<tr>
<td height="30" bgcolor="" align="center" valign="middle">密 码:</td>
<td align="left" height="30" valign="middle"><input
style="width: 150px" type="password" name="password" value=""></input></td>
</tr>
<tr>
<td align="right"><input type="submit" name="button" value="提交"></input></td>
</tr>
</table>
</form>
</body>
</html>
<form action="/struts2-examples/Login.action" method="post">上面里的这段话很重要、很重要。我之前因为这路径,浪费了不少时间。“struts2-examples”即为项目名字,“/Login.action”与struts.xml里的action里的name属性要保持一致。刚刚在上面已提到。这里加上这句话,运行时即“http://localhost:8080/struts2-examples/Login.action”会以此地址来运行。
点击提交按钮后,若成功,则跳转到success.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>login success</title>
</head>
<body>
<center>Login Success!!!</center>
</body>
</html>
点击提交按钮后,若失败,则跳转到error.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>login error</title>
</head>
<body>
<center>login error!!!</center>
</body>
</html>
第七步:
再在src目录下新建一个包,包名为com.struts.action,里面再新建一个类,类名为LoginAction.java,一定要继承“ActionSupport”
LoginAction.java代码如下:
package com.struts.action;
import com.opensymphony.xwork2.ActionSupport;
public class LoginAction extends ActionSupport {
private String username;
private String password;
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String execute() throws Exception {
if (username.equalsIgnoreCase("zhangqin")
&& password.equalsIgnoreCase("1314520")) {
return "success";
}
return "error";
}
}
这里return后的“success"与“error"即与struts.xml里的一定要保持一致。
提醒一下:在eclipse内部运行时,我明明修改了,可重启Tomcat后,还是没有变成我最新修改的,一直有缓存,而且清不掉。所以,最好到外面的浏览器去运行。
其实很简单哦,这是我自己手动搭建的。一开始老是出现一些莫名其妙的问题。
问题如下:
包没有导全、index.html给丢了、login.jsp里的action路径写的有问题、等等。
这些错误都是因为自己对这个框架的不了解导致的,经过,这一折腾,我已经有点小明白了。
标记一下,以免以后过段时间自己又忘记。
错误肯定没有的,因为这是我自己运行好的。