最近刚看Struts...就照着书上的例子,感受下如何在 MyEclipse 部署struts。。。正当我运行的时候,tomcat居然报错了。。。
[color=red](1:Error filterStart 2:Context [/Struts2Demo] startup failed due to previous errors)。。。[/color]
之后就去Google 一下。。。发现有这样的错误的挺多。。主要的原因有:
1、xml配置
filter应配置在servlet-mapping前面(应该都知道吧).看看class配置
2、filter中某段代码未实例化(这个情况是出现最多的,要仔细检查)---
3、试着把tomat/server/lib目录下的commons-digester.jar,commons-beanutils.jar拷贝到 common/lib/目录,有些包在部署是没有被包含.
4.类文件没有部署到tomcat下面,clean掉整个工程,重新编译,部署,启动tomcat.
对于上述的第二条:(filter中某段代码未实例化),我还是不明白什么意思。。。
就这样困扰了我两天,最后,基本上把Google都翻完了。。还是没办法。。。只好去群上问了。。最后,群友很热心,在他那里的机子上没问题。可是我说我这边还是这样。。他远程帮我解决问题。。。很无语。。。最后还是不知道问题出在哪里~~
只好,在博客上贴出来。。看下怎样?
附上代码:
[color=red]1:web.xml[/color]
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
[color=red]2:struts.xml[/color]
<!-- 指定Struts 2配置文件的根元素 -->
<struts>
<!-- 指定全局国际化资源文件base名 -->
<constant name="struts.custom.i18n.resources" value="messageResource"/>
<!-- 指定国际化编码所使用的字符集 -->
<constant name="struts.i18n.encoding" value="GBK"/>
<!-- 所有的Action定义都应该放在package下 -->
<package name="lee" extends="struts-default">
<action name="login" class="lee.LoginAction">
<!-- 定义三个逻辑视图和物理资源之间的映射 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
[color=red]3:LoginAction.java[/color]
package lee;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
//Struts2的Action继承了ActionSupport
public class LoginAction extends ActionSupport
{
private static final long serialVersionUID = - 3084191674576010904L;
//定义封装请求参数的username和password属性
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;
}
//定义处理用户请求的execute方法
public String execute() throws Exception
{
//当username为scott,password为tiger即登录成功
if (getUsername().equals("scott")
&& getPassword().equals("tiger") )
{
//将登录的用户名放入session范围内
ActionContext.getContext().getSession().put("user" , getUsername());
return SUCCESS;
}
else
{
return ERROR;
}
}
}
[color=red]4:login.jsp[/color]
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:form action="login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</body>
</html>
[color=red]5:error.jsp[/color]
<s:text name="failTip"/>
[color=red]6:welcome.jsp[/color]
<s:text name="succTip">
<s:param>${sessionScope.user}</s:param>
</s:text>
[color=red]我用的工具是: tomcat6+MyEclipse8+struts2[/color]
我使用的lib:(附图 lib.jpg )
[color=red](1:Error filterStart 2:Context [/Struts2Demo] startup failed due to previous errors)。。。[/color]
之后就去Google 一下。。。发现有这样的错误的挺多。。主要的原因有:
1、xml配置
filter应配置在servlet-mapping前面(应该都知道吧).看看class配置
2、filter中某段代码未实例化(这个情况是出现最多的,要仔细检查)---
3、试着把tomat/server/lib目录下的commons-digester.jar,commons-beanutils.jar拷贝到 common/lib/目录,有些包在部署是没有被包含.
4.类文件没有部署到tomcat下面,clean掉整个工程,重新编译,部署,启动tomcat.
对于上述的第二条:(filter中某段代码未实例化),我还是不明白什么意思。。。
就这样困扰了我两天,最后,基本上把Google都翻完了。。还是没办法。。。只好去群上问了。。最后,群友很热心,在他那里的机子上没问题。可是我说我这边还是这样。。他远程帮我解决问题。。。很无语。。。最后还是不知道问题出在哪里~~
只好,在博客上贴出来。。看下怎样?
附上代码:
[color=red]1:web.xml[/color]
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>login.jsp</welcome-file>
</welcome-file-list>
</web-app>
[color=red]2:struts.xml[/color]
<!-- 指定Struts 2配置文件的根元素 -->
<struts>
<!-- 指定全局国际化资源文件base名 -->
<constant name="struts.custom.i18n.resources" value="messageResource"/>
<!-- 指定国际化编码所使用的字符集 -->
<constant name="struts.i18n.encoding" value="GBK"/>
<!-- 所有的Action定义都应该放在package下 -->
<package name="lee" extends="struts-default">
<action name="login" class="lee.LoginAction">
<!-- 定义三个逻辑视图和物理资源之间的映射 -->
<result name="input">/login.jsp</result>
<result name="error">/error.jsp</result>
<result name="success">/welcome.jsp</result>
</action>
</package>
</struts>
[color=red]3:LoginAction.java[/color]
package lee;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.ActionContext;
//Struts2的Action继承了ActionSupport
public class LoginAction extends ActionSupport
{
private static final long serialVersionUID = - 3084191674576010904L;
//定义封装请求参数的username和password属性
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;
}
//定义处理用户请求的execute方法
public String execute() throws Exception
{
//当username为scott,password为tiger即登录成功
if (getUsername().equals("scott")
&& getPassword().equals("tiger") )
{
//将登录的用户名放入session范围内
ActionContext.getContext().getSession().put("user" , getUsername());
return SUCCESS;
}
else
{
return ERROR;
}
}
}
[color=red]4:login.jsp[/color]
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<title><s:text name="loginPage"/></title>
</head>
<body>
<s:form action="login">
<s:textfield name="username" key="user"/>
<s:textfield name="password" key="pass"/>
<s:submit key="login"/>
</s:form>
</body>
</html>
[color=red]5:error.jsp[/color]
<s:text name="failTip"/>
[color=red]6:welcome.jsp[/color]
<s:text name="succTip">
<s:param>${sessionScope.user}</s:param>
</s:text>
[color=red]我用的工具是: tomcat6+MyEclipse8+struts2[/color]
我使用的lib:(附图 lib.jpg )