2013-04-12 2 views
0

Я пытаюсь создать форму входа в систему, используя HTML и логин, используя имя пользователя и пароль из базы данных Oracle, используя DataSource. FirstServlet.javaDataSource с сервлетами - javax.naming.NameNotFoundException

import java.io.*; 
    import javax.servlet.*; 
    import javax.servlet.http.*; 
    import javax.servlet.annotation.*; 
    import javax.naming.*; 
    import javax.sql.*; 
    import oracle.jdbc.*; 
    import java.sql.*; 
    import javax.annotation.Resource; 
    public class FirstServlet extends HttpServlet 
    { 

     DataSource ds; 
     Connection con; 
     public void init() throws ServletException 
     { 
       InitialContext ic=new InitialContext(); 
      Context cont=(Context)ic.lookup("java:comp"); 
       DataSource ds=(DataSource)cont.lookup("jdbc/xe"); 
     } 
     protected void doPost(HttpServletRequest request,HttpServletResponse response      throws ServletException,IOException 
     { 
       response.setContentType("text/html"); 
       PrintWriter pw=response.getWriter(); 
       String user=request.getParameter("username"); 
       String pass=request.getParameter("pass"); 
       boolean status=false; 
      try 
      { 

      con=ds.getConnection("sys","password"); 
      PreparedStatement ps=con.prepareStatement("select * from example where name=? and pass=?"); 
      ps.setString(1,user); 
      ps.setString(2,pass); 
      ResultSet rs=ps.executeQuery(); 
      status=rs.next(); 
      } 
      catch(Exception e) 
      { 
      System.out.println(e); 
      } 
      if(status) 
      { 
       RequestDispatcher rd=request.getRequestDispatcher("Welcome"); 
       rd.forward(request,response); 
      } 
      else 
      { 
       pw.println("Username/Password error"); 
       RequestDispatcher rd=request.getRequestDispatcher("index.html"); 
       rd.include(request,response); 
      } 
    pw.close(); 
    } 
    } 

index.html (главная страница)

 <html> 
<form action="servlet1" method=post> 
Name:<input type=text name=username></input> 
<br /> 
Password:<input type=text name=pass> 
<input type=submit value=login/> 
    </html> 

web.xml

 <?xml version="1.0" encoding="utf-8"?> 
    <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javae 
/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 


<resource-ref> 
<description>Example </description> 
<res-ref-name>jdbc/xe</res-ref-name> 
<res-type>javax.sql.DataSource</res-type> 
<res-auth>Container</res-auth> 
</resource-ref> 


<servlet> 
    <servlet-name>FirstServlet</servlet-name> 
    <servlet-class>FirstServlet</servlet-class> 
</servlet> 
<servlet> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <servlet-name>WelcomeServlet</servlet-name> 
</servlet> 
<servlet-mapping> 
    <servlet-name>FirstServlet</servlet-name> 
    <url-pattern>servlet1</url-pattern> 
</servlet-mapping> 
<servlet-mapping> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <url-pattern>servlet2</url-pattern> 
</servlet-mapping> 
<welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
</welcome-file-list> 
    </web-app> 

WelcomeServlet.java

import java.io.*; 
    import javax.servlet.*; 
    import javax.servlet.http.*; 
    import javax.servlet.annotation.*; 
    import javax.naming.*; 
    import javax.sql.*; 
    import oracle.jdbc.*; 
    public class WelcomeServlet extends HttpServlet 
    { 
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException,ServletException 
    { 
     response.setContentType("text/html"); 
     PrintWriter out=response.getWriter(); 
     String username=request.getParameter("username"); 
     out.println("Welcome "+username); 
     } 

}

И, наконец, context.xml в папке конф:

 <?xml version='1.0' encoding='utf-8'?> 
    <Context> 


<WatchedResource>WEB-INF/web.xml</WatchedResource> 
<Resource name="jdbc/xe" auth="Container" 
      type="javax.sql.DataSource" driverClassName="oracle.jdbc.OracleDriver" 
      url="jdbc:oracle:thin:@127.0.0.1:1521:xe" 
      username="sys" password="password" maxActive="20" maxIdle="10" 
      maxWait="-1"/> 
     </Context> 

Но когда я пытаюсь запустить приложение от Tomcat Manager, он не развернуть. Ниже приведена ошибка в файле журнала Catalina:

Apr 12, 2013 3:11:25 PM org.apache.catalina.deploy.NamingResources cleanUp 
    WARNING: Failed to retrieve JNDI naming context for container      [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/login]] so no cleanup was performed for that container 
    javax.naming.NameNotFoundException: Name [comp/env] is not bound in this Context. Unable to find [comp]. 
at org.apache.naming.NamingContext.lookup(NamingContext.java:820) 
at org.apache.naming.NamingContext.lookup(NamingContext.java:168) 
at org.apache.catalina.deploy.NamingResources.cleanUp(NamingResources.java:988) 
at org.apache.catalina.deploy.NamingResources.stopInternal(NamingResources.java:970) 
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 
at org.apache.catalina.core.StandardContext.stopInternal(StandardContext.java:5590) 
at org.apache.catalina.util.LifecycleBase.stop(LifecycleBase.java:232) 
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:141) 
at org.apache.catalina.manager.ManagerServlet.start(ManagerServlet.java:1256) 
at org.apache.catalina.manager.HTMLManagerServlet.start(HTMLManagerServlet.java:714) 
at org.apache.catalina.manager.HTMLManagerServlet.doPost(HTMLManagerServlet.java:219) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:647) 
at javax.servlet.http.HttpServlet.service(HttpServlet.java:728) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.filters.CsrfPreventionFilter.doFilter(CsrfPreventionFilter.java:213) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.filters.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:108) 
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243) 
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210) 
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222) 
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123) 
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:581) 
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171) 
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99) 
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:947) 
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408) 
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1009) 
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589) 
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

В файле context.xml есть что-то не так?

EDIT: Я изменил путь к Java:/сост/окр/JDBC/х, но я получаю другую ошибку:

org.apache.catalina.startup.HostConfig deployDirectory 
    SEVERE: Error deploying web application directory C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\login 
    java.lang.IllegalStateException: ContainerBase.addChild: start: org.apache.catalina.LifecycleException: Failed to start component [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/login]] 
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:904) 
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:877) 
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:633) 
at org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1114) 
at org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1673) 
at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source) 
at java.util.concurrent.FutureTask$Sync.innerRun(Unknown Source) 
at java.util.concurrent.FutureTask.run(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source) 
at java.lang.Thread.run(Unknown Source) 

ответ

0

Я думаю, что вы пропускаете env, когда вы запрашиваете ваш DataSource. Попытка:

InitialContext ctx = new InitialContext(); 
DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/xe"); 
Смежные вопросы