過去数か月間、私はどのようにservlet mapping
機能するかを理解しようとしてきました (無駄に)。私の脳のどの部分がこの概念を処理できないのかはわかりませんが、理解できないようです.
同様の質問を 4 ~ 5 回しましたが、すべての回答が決定的ではなく、投稿を削除できません。
数十、おそらく数百の重複があることは知っていますが、そのうちの少なくとも 30 を調べましたが、サーブレット マッピングの基本的な概念をまだ把握できていません。私のディレクトリ構造はあまりにも異なっています。
免責事項:私は自分の意思に反して、10 年前のソフトウェアを使用しています。トピックはまだ (ある程度) 関連している必要があります。最近、Java SE7 からかなり古いバージョンに移行しました。
- J2SE 1.4.2
- サン アプリケーション サーバー PE 8
- Sun Deployツール
- EJB 2.1
エラー:
HTTP ステータス 404 - /send_message
タイプステータス レポート
メッセージ/send_message
説明要求されたリソース (/send_message) は利用できません。
Sun-Java-System/Application-Server
アプリケーション構造:
├───SendMail_app │ index.jsp │ SendMailApp.ear │ └───sendmail SendMail.class SendMail.java SendMailBean.class SendMailBean.java SendMailHome.class SendMailHome.java SendMailServlet.class SendMailServlet.java
注:私のインストラクターは、古いバージョンの Java では が必要ないことMETA-INF
、またはWEB-INF
ディレクトリ構造に明示的に存在する必要がないことを指摘しました。それは私の不運な決定ではありませんでした。2005年当時はこれが普通だったらしい。
アプリケーション.xml
<?xml version='1.0' encoding='UTF-8'?>
http://java.sun.com/xml/ns/j2ee/application_1_4.xsd"> アプリケーションの説明 SendMailApp ejb-jar-ic.jar war-ic.war sendmail
web.xml
<?xml version='1.0' encoding='UTF-8'?>
<web-app 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>WebApp</display-name>
<servlet>
<display-name>SendMailServlet</display-name>
<servlet-name>SendMailServlet</servlet-name>
<servlet-class>sendmail.SendMailServlet</servlet-class>
</servlet>
<servlet>
<display-name>index</display-name>
<servlet-name>index</servlet-name>
<jsp-file>/index.jsp</jsp-file>
</servlet>
<servlet-mapping>
<servlet-name>SendMailServlet</servlet-name>
<url-pattern>/send_message</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>index</servlet-name>
<url-pattern>/index</url-pattern>
</servlet-mapping>
</web-app>
sun-web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sun-web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Application Server 8.1 Servlet 2.4//EN" "http://www.sun.com/software/appserver/dtds/sun-web-app_2_4-1.dtd">
<sun-web-app>
<context-root>sendmail</context-root>
<session-config>
<session-manager persistence-type="memory">
<manager-properties/>
<store-properties/>
</session-manager>
<session-properties/>
<cookie-properties/>
</session-config>
<cache enabled="true" max-entries="4096" timeout-in-seconds="30">
<default-helper/>
</cache>
<class-loader delegate="true"/>
<jsp-config/>
<parameter-encoding default-charset="UTF8"/>
</sun-web-app>
**EAR ファイル: C:\ejb_apps\SendMail_app\SendMailApp.ear EAR 表示名: SendMailApp
├───META-INF │ application.xml │ sun-application.xml | sun-j2ee-ri.project │ └───ejb-jar-ic.jar |___war-ic.war
war-ic.war WAR 表示名: WebApp コンテキスト ルート: sendmail
├───WEB-INF | │ classes | │ |____sendmail | |----lib | |----tags | |----wsdl | │----sun-j2ee-ri.project | |----sun-web.xml | |----web.xml | |____index.jsp
ejb-jar-ic.jar JAR 表示名: SendMailJAR
├───META-INF | |----wsdl | |----ejb-jar.xml | |----sun-ejb-jar.xml | │----sun-j2ee-ri.project | |____sendmail |----SendMail.class |----SendMailBean.class |----SendMailHome.class
索引.jsp
<%@ page import="sendmail.*" %>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8"/>
<title>Hermod</title>
<link rel="stylesheet" href="master.css"/>
</head>
<body>
<section id="sendmail_form">
<form method="post" action="/sendmail/send_message">
<label>From</label><input type="email" name="from" size="32" maxlength="256"/><br>
<label>To</label><input type="email" name="from" size="32" maxlength="256"/><br>
<label>CC</label><input type="email" name="cc" size="32"/><br>
<label>BCC</label><input type="email" name="bcc" size="32"/><br>
<label>Subject</label><input type="text" name="subject" size="32" maxlength="256"/><br>
<label>Body</label><input type="text" name="body" size="32"/><br>
<button id="submit" type="submit">Submit</button>
<button id="clear" type="reset">Clear</button>
</form>
</section>
<section id="sendmail_result">
<!--${requestScope.message_status}-->
</section>
</body>
</html>
SendMailServlet.java
package sendmail;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.naming.InitialContext;
import javax.naming.Context;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import javax.ejb.CreateException;
import java.io.IOException;
public class SendMailServlet extends HttpServlet {
private ServletContext context = null;
public SendMailServlet(){
super();
}
public void init(ServletConfig config) throws ServletException {
context = config.getServletContext();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException {
try {
Context initial = new InitialContext();
Object objref = initial.lookup("java:comp/env/ejb/SendMail");
SendMailHome home = (SendMailHome)PortableRemoteObject.narrow(objref, SendMailHome.class);
SendMail sendmail = home.create();
String status = sendmail.send(request);
request.setAttribute("message_status", "status");
RequestDispatcher RD = context.getRequestDispatcher("/index");
RD.forward(request, response);
} catch (ServletException SE){
//TODO: log exception
} catch (IOException IOE){
//TODO: log exception
} catch (CreateException CE){
//TODO: log exception
} catch (NamingException NE){
//TODO: log exception
} finally {
super.destroy();
}
}
}
もちろん、コードは新生的なエラーでいっぱいですが、意味的には私がやろうとしていることはそこにあります。それは間違っていますが、抽象的に考えればそれほど悪くはありません。
*何が起きているか: *
SendMailServlet.java
から呼び出すために、何十もの間違ったサーブレット マッピングを試しました。index.jsp
- 彼らは恐ろしく、哀れなほど間違っています。
localhost:8080/sendmail
- JSP が正しくロードされました
- 送信時 (転送先
/send_message
(すなわちsendmail.SendMailServlet
)):
HTTP ステータス 404 - /send_message
タイプステータス レポート
メッセージ/send_message
説明要求されたリソース (/send_message) は利用できません。
Sun-Java-System/Application-Server
2 か月の失敗を列挙する方法がわかりませんが、約 40 ~ 50 の異なるサーブレット マッピングを試しました。
プログラマーとしてどこで失敗しましたか?