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

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

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

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JSP

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

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

Q&A

解決済

1回答

3406閲覧

JNDIリソースの設定

l_l_l_l_l_l_l_l

総合スコア38

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

JSP

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

servlet

Servletとは、Webページの動的な生成やデータ処理などをサーバ上で実行するために、Javaで作成されたプログラムです。 ショッピングサイトやオンラインバンキングといった、動的なウェブサイトの構築に用いられています。

Tomcat

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

0グッド

0クリップ

投稿2016/06/13 03:56

編集2016/06/13 05:12

###前提・実現したいこと
JNDIの設定法が良く分かりません。
Tomcatと繋ぎたいです。
jarはダウンロードしてきたのですが、
server.xmlとcontext.xmlに何を記入していいか
分かりません。
下記にソースを載せますので、アドバイス宜しくお願い致します。

###JSP

lobin.jsp

1<%@ page import="java.sql.*,javax.naming.*,javax.sql.*" 2 contentType="text/html; charset=utf-8"%> 3<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> 4<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 5<html> 6<head> 7<link rel="stylesheet" type="text/css" href="css/login.css"> 8 9<title>ログイン</title> 10</head> 11<body> 12 <form method="POST" action="loginservlet"> 13 <br> 14 <div> 15 ユーザ I D : <input type="text" name="userid" /> 16 </div> 17 <br> 18 <div> 19 パスワード : <input type="password" name="pass" /> 20 </div> 21 <br> 22 <div> 23 <button class="button" type="submit" style="float: left">ログイン</button> 24 <button class="button" type="reset">クリア</button> 25 </div> 26 27 28 </form> 29 <c:if test="${!empty requestScope['errorMessage']}"> 30 <div>${requestScope['errorMessage']}</div> 31 </c:if> 32</body>

###servlet

package

1 2import java.io.IOException; 3import java.sql.Connection; 4import java.sql.PreparedStatement; 5import java.sql.ResultSet; 6 7import javax.naming.Context; 8import javax.naming.InitialContext; 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.servlet.http.HttpSession; 15import javax.sql.DataSource; 16 17/** 18 * Servlet implementation class loginservlet 19 */ 20@WebServlet("/loginservlet") 21public class loginservlet extends HttpServlet { 22 private static final long serialVersionUID = 1L; 23 24 /** 25 * @see HttpServlet#HttpServlet() 26 */ 27 public loginservlet() { 28 super(); 29 // TODO Auto-generated constructor stub 30 } 31 32 /** 33 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse 34 * response) 35 */ 36 protected void doGet(HttpServletRequest request, 37 HttpServletResponse response) throws ServletException, IOException { 38 // TODO Auto-generated method stub 39 } 40 41 /** 42 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 43 * response) 44 */ 45 protected void doPost(HttpServletRequest request, 46 HttpServletResponse response) throws ServletException, IOException { 47 // TODO Auto-generated method stub 48 Connection con = null; 49 PreparedStatement ps = null; 50 String sql = null; 51 ResultSet rs = null; 52 53 String userid = request.getParameter("userid"); 54 String pass = request.getParameter("pass"); 55 56 if (userid == null || userid.length() == 0) { 57 58 request.setAttribute("errorMessage", "ユーザ名が未入力です"); 59 60 this.getServletContext().getRequestDispatcher("/Login.jsp") 61 .forward(request, response); 62 } else if (pass == null || pass.length() == 0) { 63 64 request.setAttribute("errorMessage", "パスワードが未入力です"); 65 66 this.getServletContext().getRequestDispatcher("/Login.jsp") 67 .forward(request, response); 68 } else { 69 try { 70 71 Context initContext = new InitialContext(); 72 Context envContext = (Context) initContext 73 .lookup("java:comp/env/jdbc/Library"); 74 DataSource ds = (DataSource) envContext.lookup("jdbc/Library"); 75 con = ds.getConnection(); 76 77 sql = "SELECT * FROM user"; 78 79 ps = con.prepareStatement(sql); 80 81 rs = ps.executeQuery(); 82 83 boolean userResult = false; 84 boolean ad = false; 85 while (rs.next()) { 86 87 String dbuserid = rs.getString("user_id"); 88 String dbpassword = rs.getString("password"); 89 90 if (dbuserid.equals(userid) && dbpassword.equals(pass)) { 91 userResult = true; 92 /* 93 * if ("管理者".equals(rs.getString("admin"))) { ad = true; 94 * } 95 */ 96 97 } 98 } 99 100 if (userResult) { 101 102 HttpSession session = request.getSession(); 103 104 session.setAttribute("userResult", userResult); 105 session.setAttribute("admin", ad); 106 107 this.getServletContext().getRequestDispatcher("/a.jsp") 108 .forward(request, response); 109 } else { 110 111 request.setAttribute("errorMessage", "ユーザ名またはパスワードが違います"); 112 113 this.getServletContext().getRequestDispatcher("/Login.jsp") 114 .forward(request, response); 115 } 116 } catch (Exception e) { 117 118 request.setAttribute("errorMessage", "システムエラーが発生しました。"); 119 120 this.getServletContext().getRequestDispatcher("/Login.jsp") 121 .forward(request, response); 122 123 throw new ServletException(e); 124 } finally { 125 try { 126 if (rs != null) { 127 rs.close(); 128 } 129 if (ps != null) { 130 ps.close(); 131 } 132 if (con != null) { 133 con.close(); 134 } 135 } catch (Exception e) { 136 } 137 } 138 } 139 140 } 141 142} 143

###context.xml

<?xml version="1.0" encoding="UTF-8"?> <Context> <!-- Default set of monitored resources. If one of these changes, the --> <!-- web application will be reloaded. --> <WatchedResource>WEB-INF/web.xml</WatchedResource> <WatchedResource>${catalina.base}/conf/web.xml</WatchedResource> <Resource name="jdbc/Library" auth="Container" type="javax.sql.DataSource" user="root" password="" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost/Library? useUnicode=true&amp;characterEncoding=utf-8" maxActiv="4" maxIdle="10" maxWait="5000" validationQuery="SELECT count(*) FROM user" /> </Context>

###server.xml

<?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- Security listener. Documentation at /docs/config/listeners.html <Listener className="org.apache.catalina.security.SecurityListener" /> --> <!--APR library loader. Documentation at /docs/apr.html --> <Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" /> <!-- Prevent memory leaks due to use of particular java/javax APIs --> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <!-- Global JNDI resources Documentation at /docs/jndi-resources-howto.html --> <GlobalNamingResources> <!-- Editable user database that can also be used by UserDatabaseRealm to authenticate users --> <Resource auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" /> </GlobalNamingResources> <Service name="Catalina"> <Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" /> <Engine defaultHost="localhost" name="Catalina"> <!--For clustering, please take a look at documentation at: /docs/cluster-howto.html (simple how to) /docs/config/cluster.html (reference documentation) --> <!-- <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/> --> <!-- Use the LockOutRealm to prevent attempts to guess user passwords via a brute-force attack --> <Realm className="org.apache.catalina.realm.LockOutRealm"> <!-- This Realm uses the UserDatabase configured in the global JNDI resources under the key "UserDatabase". Any edits that are performed against this UserDatabase are immediately available for use by the Realm. --> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" /> </Realm> <Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true"> <!-- SingleSignOn valve, share authentication between web applications Documentation at: /docs/config/valve.html --> <!-- <Valve className="org.apache.catalina.authenticator.SingleSignOn" /> --> <!-- Access log processes all example. Documentation at: /docs/config/valve.html Note: The pattern used is equivalent to using pattern="common" --> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t &quot;%r&quot; %s %b" prefix="localhost_access_log" suffix=".txt" /> <Context docBase="Library" path="/Library" reloadable="true" source="org.eclipse.jst.jee.server:Library" /> </Host> </Engine> </Service> </Server>

###試したこと
ネットなどを参照しながらやったのですが、
自分画無知すぎて出来ませんでした、、、

環境は
eclipce4.4
Tomcat8
mysql

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

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

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

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

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

KiyoshiMotoki

2016/06/13 04:19 編集

JNDIで「何との」接続設定を行いたいのかを明記した方が、具体的な回答がつきやすくなると思いますよ。
guest

回答1

0

ベストアンサー

DataSourceの受け取り方のコードがおかしいです。
###Before

Java

1Context initContext = new InitialContext(); 2Context envContext = (Context) initContext 3 .lookup("java:comp/env/jdbc/Library"); 4DataSource ds = (DataSource) envContext.lookup("jdbc/Library");

###After

Java

1InitialContext initContext = new InitialContext(); 2DataSource ds = (DataSource) initContext.lookup("java:comp/env/jdbc/Library");

もう一つ、context.xmlのurlの指定にポート番号が含まれていませんが、ポートは正しいですか?
MySQLならデフォルトだと3306番ポートが使われていると思います。

jdbc:mysql://localhost:3306/Library?useUnicode=true&characterEncoding=utf-8

おまけにもう一つ注意点ですが、パスワードは平文でDBに入れるのはやめましょう。セキュリティ的に脆弱すぎます。

###追記
context.xmlのuserという属性はusernameの間違いだと思われます。

投稿2016/06/13 05:34

編集2016/06/13 06:16
masaya_ohashi

総合スコア9206

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

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

l_l_l_l_l_l_l_l

2016/06/13 05:48

ご回答有難う御座います。 ご回答通り行ったんですが、 重大: Servlet.service() for servlet [servlet.loginservlet] in context with path [/Library] threw exception [java.sql.SQLException: Cannot create PoolableConnectionFactory (Access denied for user ''@'localhost' (using password: YES))] with root cause というエラーが発生してしまいます、、、
masaya_ohashi

2016/06/13 06:17

追記しましたが、context.xmlでuserという属性を使っていますが、usernameの間違いだと思われます。
l_l_l_l_l_l_l_l

2016/06/13 06:55

無事出来ました。 有難う御座いました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問