Struts 2で小さなログインアプリケーションを作成しようとしています。私のweb.xml:
<?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"
xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>StrutsPrj</display-name>
<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>
Struts.xml:
<struts>
<package name="default" extends="struts-default" namespace="/">
<action name="login" method="execute"
class="struts2.LoginAction">
<result name="success">Welcome.jsp</result>
<result name="error">Login.jsp</result>
</action>
</package>
</struts>
login.jsp:
<%@ page language="Java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Login Screen - Struts 2</title>
</head>
<body>
<s:actionerror />
<s:form action="login.action" method="post">
<s:textfield name="username" value="UserName" size="20" />
<s:password name="password" value="Password" size="20" />
<s:submit method="execute" value="Login" align="center" />
</s:form>
</body>
</html>
Welcome.jsp:
<%@ page language="Java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="s" uri="/struts-tags"%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Welcome Screen - Struts 2</title>
</head>
<body>
<h2>Congrates, <s:property value="username" />...!</h2>
</body>
</html>
LoginAction.Java:
package struts2;
public class LoginAction {
private String username;
private String password;
public String execute() {
if (this.username.equals("admin")
&& this.password.equals("admin123")) {
return "success";
} else {
return "error";
}
}
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;
}
}
そして、これらのライブラリをプロジェクトに追加しました:
これをTomcat 6で実行しようとすると、次のエラーが発生しました。
Mar 10, 2011 1:17:59 PM org.Apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the Java.library.path: C:\Java\jre6\bin;.;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:/Java/jre6/bin/client;C:/Java/jre6/bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Java\jdk1.5\bin\;C:\Program Files\TortoiseSVN\bin;C:\Program Files\Liquid Technologies\Liquid XML Studio 2009\XmlDataBinder7\Redist7\cpp\win32\bin;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\MySQL\MySQL Server 5.0\bin
Mar 10, 2011 1:17:59 PM org.Apache.Tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.Eclipse.jst.jee.server:newPrj' did not find a matching property.
Mar 10, 2011 1:17:59 PM org.Apache.Tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' did not find a matching property.
Mar 10, 2011 1:17:59 PM org.Apache.Tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.Eclipse.jst.jee.server:StrutsPrj' did not find a matching property.
Mar 10, 2011 1:17:59 PM org.Apache.Tomcat.util.digester.SetPropertiesRule begin
WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context/Loader} Setting property 'useSystemClassLoaderAsParent' to 'false' did not find a matching property.
Mar 10, 2011 1:18:00 PM org.Apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
Mar 10, 2011 1:18:00 PM org.Apache.catalina.startup.Catalina load
INFO: Initialization processed in 2037 ms
Mar 10, 2011 1:18:00 PM org.Apache.catalina.core.StandardService start
INFO: Starting service Catalina
Mar 10, 2011 1:18:00 PM org.Apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.32
Mar 10, 2011 1:18:01 PM org.Apache.catalina.core.StandardContext filterStart
SEVERE: Exception starting filter struts2
Java.lang.ClassNotFoundException: org.Apache.struts2.dispatcher.FilterDispatcher
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1680)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1526)
at org.Apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.Java:269)
at org.Apache.catalina.core.ApplicationFilterConfig.setFilterDef(ApplicationFilterConfig.Java:422)
at org.Apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.Java:115)
at org.Apache.catalina.core.StandardContext.filterStart(StandardContext.Java:4071)
at org.Apache.catalina.core.StandardContext.start(StandardContext.Java:4725)
at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1053)
at org.Apache.catalina.core.StandardHost.start(StandardHost.Java:840)
at org.Apache.catalina.core.ContainerBase.start(ContainerBase.Java:1053)
at org.Apache.catalina.core.StandardEngine.start(StandardEngine.Java:463)
at org.Apache.catalina.core.StandardService.start(StandardService.Java:525)
at org.Apache.catalina.core.StandardServer.start(StandardServer.Java:754)
at org.Apache.catalina.startup.Catalina.start(Catalina.Java:595)
at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at Sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at Sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at Java.lang.reflect.Method.invoke(Unknown Source)
at org.Apache.catalina.startup.Bootstrap.start(Bootstrap.Java:289)
at org.Apache.catalina.startup.Bootstrap.main(Bootstrap.Java:414)
Mar 10, 2011 1:18:01 PM org.Apache.catalina.core.StandardContext start
SEVERE: Error filterStart
Mar 10, 2011 1:18:01 PM org.Apache.catalina.core.StandardContext start
SEVERE: Context [/StrutsPrj] startup failed due to previous errors
Mar 10, 2011 1:18:01 PM org.Apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
Mar 10, 2011 1:18:01 PM org.Apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
Mar 10, 2011 1:18:01 PM org.Apache.jk.server.JkMain start
INFO: Jk running ID=0 time=0/97 config=null
Mar 10, 2011 1:18:01 PM org.Apache.catalina.startup.Catalina start
INFO: Server startup in 1756 ms
以下がクラスパス上にあることを確認してください:
編集: http://struts.Apache.org/release/2.3.x/docs/how-to-create-a-struts-2-web-application.html に従って設定しましたかあなたのプロジェクト? 2.2.x.xではなくstruts 2.1.X.Xを使用しているのはなぜですか?
試してください:
<filter>
<filter-name>action</filter-name>
<filter-class>org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>action</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
あなたはもう1つのjar commons-lang3-x.xを追加する必要があります
apacheログの最後までスクロールすると、ClassNotFoundExceptionが見つかります。org.Apache.commons.lang3.StringUtils:
Caused by: Java.lang.ClassNotFoundException: **org.Apache.commons.lang3.StringUtils**
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1711)
at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1556)
... 55 more
私も同じ問題を抱えていました。私はこのように解決しました:1つ目は、追加したlibsをすべて削除しました。次に、Project->Properties->Deployment Assembly
経由で追加しました。以前は、WEB-INF/lib
フォルダにコピーしました。それはいつもうまくいくようには見えません。お役に立てれば。
commons-lang3XXXX.jarをライブラリに追加するだけです
このエラーも発生し、dtd
をweb.xml
で確認して、バージョンを2.4から2.5に変更しました。
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://Java.Sun.com/xml/ns/javaee"
xmlns:web="http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"
version="2.5">
commons-lang3-jarファイルをWEB-INF\libフォルダーに追加します。
Commons-lang3-XXX.jarファイルがクラスパスにないようです。 jarをlibフォルダーに追加することで解決できます。
Strut2プロジェクトの開始時に同様の問題が発生しました。
私は最新のjarファイルを使用していました。 Web.xmlのバージョンは3.0です。また、構成に適切なディスパッチャーが含まれていません。正しいディスパッチャーフィルターを追加しました。
org.Apache.struts2.dispatcher.FilterDispatcher
の代わりに
org.Apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
または
org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.
それは大いに機能しました。
struts.action.excludePattern
定数設定により、同じ問題が発生しました。説明はありませんでした。あなたのようなスタックトレースすらありません。純粋な「エラーFilterStart」だけです。以前のバージョンのコードに戻してこれを追跡し、変更点を確認しました。
エラーについて:
SEVERE: Exception starting filter struts2 Java.lang.ClassNotFoundException: org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
問題:
次の組み合わせのEclipse-WTPPlugin-Struts2-Maven3に問題があるようです
調査結果:
「サーバーで実行」としてプロジェクトを実行すると、Eclipseがmavenを実行し、WARファイルを作成してサーバーにデプロイすると想定します。しかし、それは私には完璧に機能しません。 mavenがWARを作成するターゲットフォルダーにWARファイルがあり、WARは完璧です。しかし、Eclipseは何か他のものを実行しているようです。
解決:
必要なすべてのJARファイルをEclipseプロジェクトのWEB-INF/libに配置します。バージョン管理を使用している場合は、libフォルダーを無視してください。 Mavenを使用しているときに、必要なすべてのJARを見つける方法は?ターゲットフォルダとWARファイルに移動します。バーストして開き、WEB-INF/libに移動します。これらすべてのJARをEclipseプロジェクトのWEB-INF/libにコピーします。
Mavenビルドを行うことをお勧めします。依存関係はMavenによって解決されます。これは私がpom.xmlに入れなければならなかったものです
<dependency>
<groupId>org.Apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.1.2</version>
<type>jar</type>
<scope>compile</scope>
</dependency>
Struts2バージョン2.5を使用している場合は、org.Apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilterからorg.Apache.struts2に変更する必要があります.dispatcher.filter.StrutsPrepareAndExecuteFilter。見る: