前提・実現したいこと
プログラミング初めて1か月で、初めてteratailを使います。どうしても分からず
質問させていただきます。
サーブレット/JSP を使ってログイン画面作成をしようとしています。
DBを使ってid、パスワードが合っていれば成功時の画面遷移、失敗時の画面遷移まで行いたいです。
発生している問題・エラーメッセージ
Tomcatサーバーで実行してログイン画面は表示出来るのですが、
DBに登録してあるid,パスワードが合っているいないに関わらずログインボタンを押すと
何も表示されません。
URLを見てみると、
ログイン画面時は
http://localhost:8080/SampleLogin/jsp/login.jsp
でログイン画面のjspになっているのですが、ボタンを押すと
http://localhost:8080/SampleLogin/servlet/Login
とjspではなく、恐らくサーブレットのLogin.javaに飛んでしまいます。
javax.naming.NameNotFoundException: 名前 [jdbc/login] はこのコンテキストにバインドされていません at org.apache.naming.NamingContext.lookup(NamingContext.java:833) at org.apache.naming.NamingContext.lookup(NamingContext.java:160) at org.apache.naming.NamingContext.lookup(NamingContext.java:843) at org.apache.naming.NamingContext.lookup(NamingContext.java:160) at org.apache.naming.NamingContext.lookup(NamingContext.java:843) at org.apache.naming.NamingContext.lookup(NamingContext.java:174) at org.apache.naming.SelectorContext.lookup(SelectorContext.java:163) at java.naming/javax.naming.InitialContext.lookup(InitialContext.java:409) at DAO.DAO.getConnection(DAO.java:16) at DAO.LoginDAO.search(LoginDAO.java:17) at servlet.Login.doPost(Login.java:32) at javax.servlet.http.HttpServlet.service(HttpServlet.java:652) at javax.servlet.http.HttpServlet.service(HttpServlet.java:733) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:227) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:189) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:162) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:97) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:542) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:143) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:687) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:78) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:357) at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:374) at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1707) at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.base/java.lang.Thread.run(Thread.java:834)
該当のソースコード
Login.java package servlet; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import DAO.LoginDAO; import bean.Bean; @WebServlet(urlPatterns = { "/servlet/Login" }) public class Login extends HttpServlet { protected void doGet( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } protected void doPost( HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { HttpSession session = request.getSession(); String id = request.getParameter("id"); String password = request.getParameter("password"); try { LoginDAO dao = new LoginDAO(); Bean bean = dao.search(id, password); if (bean!=null) { session.setAttribute("account", bean); request.getRequestDispatcher("../jsp/login-success.jsp") .forward(request, response); } else { request.getRequestDispatcher("../jsp/login-error.jsp") .forward(request, response); } }catch(Exception e) { e.printStackTrace(); } }}
package DAO; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import javax.servlet.annotation.WebServlet; import bean.Bean; @WebServlet(urlPatterns = { "/DAO/LoginDAO" }) public class LoginDAO extends DAO { public Bean search(String id, String password) throws Exception{ Bean bean=null; Connection con = getConnection(); PreparedStatement st=con.prepareStatement( "select*from customer where id=? and password=?"); st.setString(1, id); st.setString(2, password); ResultSet rs = st.executeQuery(); while (rs.next()) { bean = new Bean(); bean.setId(rs.getString("id")); bean.setPassword(rs.getString("password")); } st.close(); con.close(); return bean; } }
package DAO; import java.sql.Connection; import javax.naming.InitialContext; import javax.servlet.annotation.WebServlet; import javax.sql.DataSource; @WebServlet(urlPatterns = { "/DAO/DAO" }) public class DAO { static DataSource ds; public Connection getConnection() throws Exception { if (ds == null) { InitialContext ic = new InitialContext(); ds = (DataSource) ic.lookup("java:/comp/env/jdbc/login"); } return ds.getConnection(); } }
package DAO; import java.sql.Connection; import javax.naming.InitialContext; import javax.servlet.annotation.WebServlet; import javax.sql.DataSource; @WebServlet(urlPatterns = { "/DAO/DAO" }) public class DAO { static DataSource ds; public Connection getConnection() throws Exception { if (ds == null) { InitialContext ic = new InitialContext(); ds = (DataSource) ic.lookup("java:/comp/env/jdbc/login"); } return ds.getConnection(); } }
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="../header.html"%> <form action="../servlet/Login" method="post"> <p>ID <input type="text" name="id" required></p> <p>パスワード <input type="text" name="password" required></p> <p><input type="submit" value="ログイン"></p> </form> <%@include file="../footer.html"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="../header.html"%> IDまたはパスワードが違います。 <%@include file="../footer.html"%>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@include file="../header.html"%> こんにちは、${account.id}さん! <%@include file="../footer.html"%>
<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- maxTotal: Maximum number of database connections in pool. Make sureyou configure your mysqld max_connections large enough to handle all of yourdb connections. Set to -1 for no limit. --> <!-- maxIdle: Maximum number of idle database connections to retain in pool.Set to -1 for no limit. See also the DBCP 2 documentation on this and theminEvictableIdleTimeMillis configuration parameter. --> <!-- maxWaitMillis: Maximum time to wait for a database connection to becomeavailable in ms, in this example 10 seconds. An Exception is thrown if thistimeout is exceeded. Set to -1 to wait indefinitely. --> <!-- username and password: MySQL username and password for database connections --> <!-- driverClassName: Class name for the old mm.mysql JDBC driver is org.gjt.mm.mysql.Driver - we recommend using Connector/J though. Class name for the official MySQLConnector/J driver is com.mysql.jdbc.Driver. --> <!-- url: The JDBC connection url for connecting to your MySQL database. --> <Resource url="jdbc:mysql://localhost:3306/book" driverClassName="com.mysql.cj.jdbc.Driver" password="password" username="root" maxWaitMillis="10000" maxIdle="30" maxTotal="100" type="javax.sql.DataSource" auth="Container" name="jdbc/book"/> </Context>
試したこと
リンク先がおかしいので、まずifの条件式が間違っているかな?と思い色々試しましたが出来ませんでした。
またリンク先の記述もおかしいのかなと思い色々試しましたがそれも出来ずといった感じです。
補足情報(FW/ツールのバージョンなど)
Tomcat9 Java11
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/07/08 13:31
2021/07/08 13:34
2021/07/08 13:49
2021/07/08 14:04
2021/07/09 01:36 編集
2021/07/09 01:38
2021/07/09 01:40
2021/07/09 01:48