前回と同じ内容で再度ご質問させていただきます。
前回はうまくいかず、一度環境構築からやり直し改めてプログラミングをしています。
会員登録画面を作成しようとしているのですが、Eclipseを入れなおしてもやはり「HTTP ステータスエラー404」が発生してしまいます。
以下にコード及び環境、サーバーなどの基本情報は全て載せます。
自身で考えていたのは、「そもそもjspからサーブレットへのデータ受け渡し及び受け取りがうまくいっていないのでは?」と考えています。(環境のせいではなく記述しなければいけない何かが抜けている?)
そこで、今回お聞きしたいのはコードや環境は先程も記載した通り以下に載せますので、どこか足りない箇所やおかしい箇所を指摘していただきたいです。
また、前回試したときはJSP単体の実行でしかフォームは表示されませんでしたが、今回はサーブレット自体を実行してフォームが表示されるようになりました。
しかし、jspファイルが「HTTP ステータスエラー404」と出るように...
上記より私の考察ですが、入力フォームまでは確かに表示されますが、jspからサーブレットに値を渡す以前に遷移先のフォーム(jspファイル)を構成していないからなのかなと考えています。
会員登録画面の流れは以下のように考えています。
「新規会員登録画面」→「最終確認画面」→「DBに顧客情報を送信及び保存」→「次回ログイン以降は顧客専用画面をDBに蓄積されている情報を元に表示」→「更新履歴などをバックグラウンド機能を利用し表示を行う」
(文字化けについても追加で教えていただけますと幸いです)
使用しているサーバー:Tomcat8.5
move4.java
1package move3; 2 3import java.io.IOException; 4 5import javax.servlet.RequestDispatcher; 6import javax.servlet.ServletException; 7import javax.servlet.annotation.WebServlet; 8import javax.servlet.http.HttpServlet; 9import javax.servlet.http.HttpServletRequest; 10import javax.servlet.http.HttpServletResponse; 11 12/** 13 * Servlet implementation class move4 14 */ 15@WebServlet("/move4") 16public class move4 extends HttpServlet { 17 private static final long serialVersionUID = 1L; 18 19 /** 20 * @see HttpServlet#HttpServlet() 21 */ 22 public move4() { 23 super(); 24 // TODO Auto-generated constructor stub 25 } 26 27 /** 28 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 29 */ 30 protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 31 // TODO Auto-generated method stub 32 response.getWriter().append("Served at: ").append(request.getContextPath()); 33 34 String name = (String) request.getAttribute("userName"); 35 36 if (name == null || "".equals(name)) { 37 request.setAttribute("userName", "Guest"); 38 } 39 40 String view = "/WEB-INF/view/NewForm.jsp"; 41 RequestDispatcher dispatcher = request.getRequestDispatcher(view); 42 dispatcher.forward(request, response); 43 } 44 45 /** 46 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 47 */ 48 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 49 // TODO Auto-generated method stub 50response.getWriter().append("Served at: ").append(request.getContextPath()); 51 52 String action = request.getParameter("action"); 53 54 request.setAttribute("userName", "Guest"); 55 56 String string1 = request.getParameter("name"); 57 System.out.println(string1); 58 String string2 = request.getParameter("Adress"); 59 System.out.println(string2); 60 String value1 = request.getParameter("callphone"); 61 System.out.println(value1); 62 String string3 = request.getParameter("nickname"); 63 System.out.println(string3); 64 String string4 = request.getParameter("password"); 65 System.out.println(string4); 66 67 request.setCharacterEncoding("UTF8"); 68 69 response.setContentType("text/html; charset=UTF8"); 70 doGet(request, response); 71 } 72 73} 74
NewForm.jsp
1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <html> 4 <head> 5 <meta http-equiv="Content-Type" content="text/html; charset=euc-jp"> 6 <title>NEW PERSON ACTION FORM</title> 7 <script type ="text/javascript"> 8 function exec(){ 9 document.getElementById("fm").submit(); 10 } 11 </script> 12 </head> 13 <body> 14 <% String userName = (String) request.getAttribute("userName"); %> 15 HELLO, <%= userName %> 's! 16 17 <% if ("Guest".equals(userName)) { %> 18 <div> 19 NEW PERSON FORM 20 <br><br> 21 [NEW ACTION]<br><br> 22 <h1>ACTION</h1> 23 <form id="fm" action="<%=request.getContextPath()%>/move4.java" method="post"> 24 <table border="0" cellspacing="0" cellpadding="0" bgcolor="#000000"> 25 <tr><td> 26 <table border="0" cellspacing="1" cellpadding="4"> 27 <tr> 28 <td align="center" bgcolor="#C0C0C0">NAME</td> 29 <td align="left" bgcolor="#E6E1FF"> 30 <input type="text" name="name" size=40></td> 31 </tr> 32 <tr> 33 <td align="center" bgcolor="#C0C0C0">ADRESS</td> 34 <td align="left" bgcolor="#FFFFFF"> 35 <input type="text" name="Adress" size=60></td> 36 </tr> 37 <tr> 38 <td align="center" bgcolor="#C0C0C0">NUMBER</td> 39 <td align="left" bgcolor="#E6E1FF"> 40 <input type="text" name="callphone" size=70></td> 41 </tr> 42 <tr> 43 <td align="center" bgcolor="#C0C0C0">HANDLENAME</td> 44 <td align="left" bgcolor="#FFFFFF"> 45 <input type="text" name="nickname" size=16 value=""> 46 <font size=2>(English)</font> 47 </td> 48 </tr> 49 <tr> 50 <td align="center" bgcolor="#C0C0C0">PASS</td> 51 <td align="left" bgcolor="#E6E1FF"> 52 <input type="password" name="password" size=16> 53 <font size=2>(English)</font> 54 </td> 55 </tr> 56 </table> 57 </td></tr> 58 </table> 59 <br> 60 <input type="submit" value=" GO " onclick = "exec()"/> 61 </form> 62 <% } %> 63 </div> 64 </body> 65 </html>
以下は文字化け対策で作成したFilterになります。
(キャプチャでは文字化けしていませんが、これは英語で全て記述しているので、最終的には日本語で表示したいと考えています。
Filter1.java
1package filter; 2 3import java.io.IOException; 4 5import javax.servlet.Filter; 6import javax.servlet.FilterChain; 7import javax.servlet.FilterConfig; 8import javax.servlet.ServletException; 9import javax.servlet.ServletRequest; 10import javax.servlet.ServletResponse; 11import javax.servlet.annotation.WebFilter; 12 13/** 14 * Servlet Filter implementation class Filter1 15 */ 16@WebFilter("/*") 17public class Filter1 implements Filter { 18 19 /** 20 * Default constructor. 21 */ 22 public Filter1() { 23 // TODO Auto-generated constructor stub 24 } 25 26 /** 27 * @see Filter#destroy() 28 */ 29 public void destroy() { 30 // TODO Auto-generated method stub 31 } 32 33 /** 34 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 35 */ 36 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 37 // TODO Auto-generated method stub 38 // place your code here 39 request.setCharacterEncoding("UTF-8"); 40 response.setContentType("text/html; charset=UTF-8"); 41 // pass the request along the filter chain 42 chain.doFilter(request, response); 43 } 44 45 /** 46 * @see Filter#init(FilterConfig) 47 */ 48 public void init(FilterConfig fConfig) throws ServletException { 49 // TODO Auto-generated method stub 50 } 51 52} 53
情報: Serverのバージョン名: Apache Tomcat/8.5.59 [日 11 01 10:49:38 JST 2020] 情報: Server ビルド: Oct 6 2020 16:57:18 UTC [日 11 01 10:49:38 JST 2020] 情報: サーバーのバージョン番号: 8.5.59.0 [日 11 01 10:49:38 JST 2020] 情報: OS 名: Windows 10 [日 11 01 10:49:38 JST 2020] 情報: OS バージョン: 10.0 [日 11 01 10:49:38 JST 2020] 情報: アーキテクチャ: amd64 [日 11 01 10:49:38 JST 2020] 情報: Java Home: C:\pleiades\java\8\jre [日 11 01 10:49:38 JST 2020] 情報: JVM バージョン: 1.8.0_202-b08 [日 11 01 10:49:38 JST 2020] 情報: JVM ベンダ: Oracle Corporation [日 11 01 10:49:38 JST 2020] 情報: CATALINA_BASE: C:\pleiades\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0 [日 11 01 10:49:38 JST 2020] 情報: CATALINA_HOME: C:\Users\fukaya-masaki\Downloads\apache-tomcat-8.5.59 [日 11 01 10:49:38 JST 2020] 情報: コマンドライン引数: -Dcatalina.base=C:\pleiades\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0 [日 11 01 10:49:38 JST 2020] 情報: コマンドライン引数: -Dcatalina.home=C:\Users\fukaya-masaki\Downloads\apache-tomcat-8.5.59 [日 11 01 10:49:38 JST 2020] 情報: コマンドライン引数: -Dwtp.deploy=C:\pleiades\workspace.metadata.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps [日 11 01 10:49:38 JST 2020] 情報: コマンドライン引数: -Djava.endorsed.dirs=C:\Users\fukaya-masaki\Downloads\apache-tomcat-8.5.59\endorsed [日 11 01 10:49:38 JST 2020] 情報: コマンドライン引数: -Dfile.encoding=UTF-8 [日 11 01 10:49:38 JST 2020] 情報: 商用環境に最適な性能を発揮する APR ベースの Tomcat ネイティブライブラリが java.library.path [C:\pleiades\java\8\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/pleiades/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_14.0.2.v20200815-0932/jre/bin/server;C:/pleiades/eclipse//plugins/org.eclipse.justj.openjdk.hotspot.jre.full.win32.x86_64_14.0.2.v20200815-0932/jre/bin;C:\Program Files\AdoptOpenJDK\jdk-15.0.1.9-hotspot\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\Program Files (x86)\SAP\SAP Business One DI API\JCO\LIB\;C:\Program Files (x86)\SAP\SAP Business One DI API\DI API 90;C:\Program Files (x86)\SAP\SAP Business One\;C:\Program Files\Docker\Docker\resources\bin;C:\ProgramData\DockerDesktop\version-bin;C:\Users\fukaya-masaki\Documents\OpenJDK15U-jdk\bin;AdoptOpenJDKを展開したディレクトリ\bin;C:\Users\fukaya-masaki\AppData\Local\Microsoft\WindowsApps;C:\Users\fukaya-masaki\Desktop\apache-tomcat-9.0.38\bin;;C:\pleiades\eclipse;;.] に存在しません。 [日 11 01 10:49:38 JST 2020] 情報: プロトコルハンドラ ["http-nio-8080"] を初期化します。 [日 11 01 10:49:38 JST 2020] 情報: Using a shared selector for servlet write/read [日 11 01 10:49:39 JST 2020] 情報: Initialization processed in 749 ms [日 11 01 10:49:39 JST 2020] 情報: サービス [Catalina] を起動します [日 11 01 10:49:39 JST 2020] 情報: Starting Servlet Engine: Apache Tomcat/8.5.59 [日 11 01 10:49:39 JST 2020] 情報: プロトコルハンドラー ["http-nio-8080"] を開始しました。 [日 11 01 10:49:39 JST 2020] 情報: Server startup in 406 ms [日 11 01 10:49:39 JST 2020]
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。