質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

1737閲覧

画面遷移のためのリンクをクリックするとエラーメッセージなしの404エラーが起こってしまう

lvngk

総合スコア0

JSP

JSP(Java Server Pages)とは、ウェブアプリケーションの表示レイヤーに使われるサーバーサイドの技術のことです。

サーブレット

サーブレット(Servlets)とはウェブやアプリケーションサーバー上に動くプログラムのことであり、ウェブブラウザや他のHTTPクライエントとデータベースやHTTPサーバー上のアプリケーションの中間層としての働きをします。

Tomcat

TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

0クリップ

投稿2021/10/14 04:36

現在、勉強として自作で簡単な家計簿を作ろうとしています。

index.jspを実行し、login.jspへのリンクのログインボタンを押すとメッセージなしの404エラーが起こってしまいます。

eclipseVersion: 2020-12 (4.18.0),tomcatVersion9.0

試したこと
URLの確認
プロジェクトの削除、再記述
プロジェクトのクリーン
サーバーからリソースを削除して再追加
web.xmlのデフォルトでの作成
server.xmlのコンテキストの確認
です。

ファイル構成
Login.java: /src/account/Login.java
index.jsp: /WebContent/index.jsp
login.jsp: /WebContent/Web-INF/jsp/login.jsp
User.java: /src/account/User.java
LoginLogic.java: /src/account/LoginLogic.java
UserDao.java: /src/dao/UserDao
CharacterFilter.java: /src/filter/CharacterFilter.java

Loginjava

1package account; 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; 11import javax.servlet.http.HttpSession; 12 13import dao.UserDao; 14 15/** 16 * Servlet implementation class Login 17 */ 18@WebServlet("/Login") 19public class Login extends HttpServlet { 20 private static final long serialVersionUID = 1L; 21 22 /** 23 * @see HttpServlet#HttpServlet() 24 */ 25 public Login() { 26 super(); 27 // TODO Auto-generated constructor stub 28 } 29 30 protected void doGet(HttpServletRequest request, HttpServletResponse response)throws IOException, ServletException { 31 32 response.sendRedirect("/WEB-INF/jsp/login.jsp"); 33 34 } 35 36 /** 37 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) 38 */ 39 protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 40 41 String name = request.getParameter("name"); 42 43 String pass = request.getParameter("pass"); 44 45 User user = new User(name, pass); 46 47 LoginLogic loginLogic = new LoginLogic(); 48 49 boolean isLogin = loginLogic.login(user); 50 51 if(isLogin == true) { 52 53 UserDao userdao = new UserDao(); 54 55//findBalanceとfindRegister_atが定義されていない理由を調べる 56 57 user.setBalance(userdao.findBalance()); 58 59 user.setRegister_at(userdao.findRegister_at()); 60 61 HttpSession session = request.getSession(); 62 63 session.setAttribute("user", user); 64 65 } 66 67 request.setAttribute("boolean", isLogin); 68 69 RequestDispatcher dispatcher = request.getRequestDispatcher("/WEB-INF/jsp/resultLogin.jsp"); 70 71 dispatcher.forward(request, response); 72 73 } 74 75}

indexjsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>家計簿</title> 8</head> 9<body> 10<h1>家計簿</h1> 11<p> 12<a href="/Bank/Login">ログイン</a> 13<a href="/WEB-INF/jsp/register.jsp">新規登録</a> 14</p> 15</body> 16</html>

loginjsp

1<%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3<!DOCTYPE html> 4<html> 5<head> 6<meta charset="UTF-8"> 7<title>家計簿</title> 8</head> 9<body> 10<h1>ログイン</h1> 11<form action="/Bank/Login" method="post"></form> 12ユーザーネーム<input type="text" name="name"> 13パスワード<input type="password" name="pass"> 14<input type="submit" value="ログイン"> 15</body> 16</html> 17

webxml

1<?xml version="1.0" encoding="UTF-8"?> 2<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd" id="WebApp_ID" version="4.0"> 3 <display-name>Bank</display-name> 4 <welcome-file-list> 5 <welcome-file>index.html</welcome-file> 6 <welcome-file>index.htm</welcome-file> 7 <welcome-file>index.jsp</welcome-file> 8 <welcome-file>default.html</welcome-file> 9 <welcome-file>default.htm</welcome-file> 10 <welcome-file>default.jsp</welcome-file> 11 </welcome-file-list> 12</web-app>

errorMessage

1HTTPステータス 404 – 見つかりません。 2 3 4タイプ ステータスレポート 5 6説明 オリジンサーバーは、ターゲットリソースの現在の表現を見つけられなかったか、またはそれが存在することを開示するつもりはありません。 7 8 9Apache Tomcat/9.0.30

Userjava

1package account; 2 3import java.io.Serializable; 4import java.util.Date; 5 6public class User implements Serializable{ 7 8 private String name; 9 private String pass; 10 private int balance; 11 private Date register_at; 12 13 public User(String name, String pass) { 14 this.name = name; 15 this.pass = pass; 16 } 17 18 public String getName() {return this.name;} 19 public String getPass() {return this.pass;} 20 public int getBalance() {return this.balance;} 21 public void setBalance(int balance) {this.balance = balance;} 22 public Date getRegister_at() {return this.register_at;} 23 public void setRegister_at(Date register_at) {this.register_at = register_at;} 24 25 26}

LoginLogic

1package account; 2 3import dao.UserDao; 4 5public class LoginLogic { 6 7 public boolean login(User argumentUser) { 8 9 UserDao userdao = new UserDao(); 10 11 User returnUser = userdao.findNameAndPass(); 12 13 if(argumentUser.getPass().equals(returnUser.getPass()) && argumentUser.getName().equals(returnUser.getName())) { 14 15 return true; 16 17 } else { 18 19 return false; 20 21 } 22 23 } 24 25} 26

UserDao

1package dao; 2 3import java.sql.Connection; 4import java.sql.DriverManager; 5import java.sql.PreparedStatement; 6import java.sql.ResultSet; 7import java.util.Date; 8 9import account.User; 10 11public class UserDao { 12 13 private final String jdbc_url = "jdbc:h2:c:/LocalProgram/Bank/User"; 14 private final String db_user = "sa"; 15 private final String db_pass = ""; 16 17 18 public User findNameAndPass() { 19 20// データベースを作成 21//userを引数として受け取って、そのユーザーを返していけばいい 22 try(Connection con = DriverManager.getConnection(jdbc_url, db_user, db_pass)) { 23 24 String sql = "SELECT NAME,PASS FROM USER WHERE NAME = ? && PASS = ?"; 25 26 PreparedStatement pStmt = con.prepareStatement(sql); 27 28 29 30 ResultSet rs = pStmt.executeQuery(); 31 32 String name = rs.getString("NAME"); 33 34 String pass = rs.getString("PASS"); 35 36 User user = new User(name, pass); 37 38 return user; 39 40 } catch(Exception e) { 41 42 e.printStackTrace(); 43 44 return null; 45 46 } 47 } 48 49 public int findBalance() { 50 51 try(Connection con = DriverManager.getConnection(jdbc_url, db_user, db_pass)) { 52 53 String sql = "SELECT BALANCE FROM USER"; 54 55 PreparedStatement pStmt = con.prepareStatement(sql); 56 57 ResultSet rs = pStmt.executeQuery(); 58 59 int balance = rs.getInt("BALANCE"); 60 61 return balance; 62 63 } catch(Exception e) { 64 65 e.printStackTrace(); 66 67 return 0; 68 69 } 70 71 } 72 73 public Date findRegister_at() { 74 75 try(Connection con = DriverManager.getConnection(jdbc_url, db_user, db_pass)) { 76 77 String sql = "SELECT REGISTER_AT FROM USER"; 78 79 PreparedStatement pStmt = con.prepareStatement(sql); 80 81 ResultSet rs = pStmt.executeQuery(); 82 83 Date date = rs.getDate("REGISTER_AT"); 84 85 return date; 86 87 } catch(Exception e) { 88 89 e.printStackTrace(); 90 91 return null; 92 93 } 94 95 } 96 97} 98

CharacterFilter

1package filter; 2 3import java.io.IOException; 4 5import javax.servlet.FilterChain; 6import javax.servlet.FilterConfig; 7import javax.servlet.ServletException; 8import javax.servlet.ServletRequest; 9import javax.servlet.ServletResponse; 10import javax.servlet.annotation.WebFilter; 11 12/** 13 * Servlet Filter implementation class Filter 14 */ 15@WebFilter("/account/Login") 16public class CharacterFilter implements javax.servlet.Filter { 17 18 /** 19 * Default constructor. 20 */ 21 public CharacterFilter() { 22 // TODO Auto-generated constructor stub 23 } 24 25 /** 26 * @see Filter#destroy() 27 */ 28 public void destroy() { 29 // TODO Auto-generated method stub 30 } 31 32 /** 33 * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) 34 */ 35 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { 36 37 request.setCharacterEncoding("UTF-8"); 38 39 chain.doFilter(request, response); 40 } 41 42 /** 43 * @see Filter#init(FilterConfig) 44 */ 45 public void init(FilterConfig fConfig) throws ServletException { 46 // TODO Auto-generated method stub 47 } 48 49} 50

現在の問題点:プロジェクトの実行はできているのに画面遷移のタイミングで404エラーが発生してしまっているという点
実現したいこと:ログインボタンを押すとログイン画面へ移動する

404エラーについてのwebサイトなどを見て、記述されている注目するべき場所を確認したつもりではいるのですが、初歩的なミスをしていたり、設定に誤りがあったりするかもしれません。こういった問題の解決方法とどうしてこうなってしまったのかという原因も教えていただけると助かります。
皆さんのお力をお貸しいただけたら幸いです。どうかご教授お願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

Logic.javaをリダイレクトからフォワードに変更したら遷移することができました。
WEB-INF以下はリダイレクトだと参照することができないのにリダイレクトしようとしていたのが原因でした。
失礼しました

投稿2021/10/14 05:36

lvngk

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問