2017-06-09 7 views
0

(jsp、servlet、apache tomcat 9、eclipse neon、oracle 11g)を使用してサーブレットプロジェクトを1つ作成しました。私はindex.jspを作成しました(ログインの詳細を取って、データベーステーブルのユーザー名とパスワードの検証のためにLoginServletにリダイレクトしました。index.jspでは初回ユーザーの場合は "register.jsp"リンクも登録しました)。プロジェクトを実行すると、index.jspページが開きます。HTTPステータス[404]?

ユーザーIDとパスワードの詳細(データベースに手動で入力したユーザー名とパスワードの詳細)を渡すと、LoginServletをリダイレクトしてからサーブレットをリダイレクトすることができます。

「register」のリンクをクリックしたときに、上記のエラーが発生しました(HTTPステータス[404]?[見つかりません])タイプステータスレポートメッセージ/TodayServlet/register.jsp説明オリジンサーバはApache Tomcat/9.0.0.M20

私の問題はindex.jspにあり、私は "register.jsp"を開くことができません。 ( "index.jspのアンカータグを通じて提供されたregister.jsp)

ディレクトリー構造とメインJSPとサーブレットとweb.xmlコードについては、添付ファイルをご覧ください。

index.jspを(主コード):

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<center> 
<form action="LoginServlet" method="post"> 
enter name:<input type="text" name="name"><br> 
enter pass:<input type="password" name="pass"><br> 

<a href="register.jsp">New User Register here...!!!</a><br> 
<input type="submit" value="login"><br> 
</form> 
</center> 
</body> 
</html> 

register.jsp(主コード):

<%@ page language="java" contentType="text/html; charset=ISO-8859-1" 
    pageEncoding="ISO-8859-1"%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"> 
<title>Insert title here</title> 
</head> 
<body> 
<center> 
<form action="RegisterServlet" method="post"> 
enter name:<input type="text" name= "name1"> <br> 
enter pass:<input type="text" name= "pass1"><br> 
enter email:<input type="text" name="email1"><br> 
<input type="submit" value="register"><br> 
</form> 
</center> 
</body> 
</html> 

RegisterServlet.java(主コード):

package com.pack; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 


public class RegisterServlet extends HttpServlet { 

    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
     res.setContentType("text/html"); 
     PrintWriter out=res.getWriter(); 
     String uname1=req.getParameter("name1"); 
     String upass1=req.getParameter("pass1"); 
     String uemail1=req.getParameter("email1"); 
     req.setAttribute("username", uname1); 
     try{ 
     Connection conn=DbConnection.getConnection(); 
     PreparedStatement ps=conn.prepareStatement("insert into register_table values(?,?,?)"); 
     ps.setString(1, uname1); 
     ps.setString(2, upass1); 
     ps.setString(3, uemail1); 
     int i=ps.executeUpdate(); 
     if(i>0){ 
      req.getRequestDispatcher("WelcomeServlet").forward(req, res); 
     } 
     else{ 
      out.print("try registering again "); 
      req.getRequestDispatcher("register.jsp").include(req, res); 
     } 
     } 
      catch(Exception e){ 
      e.printStackTrace(); 
     } 
    } 

} 

I他のサーブレットに問題がない(LoginServlet、WelcomeServlet ...)

LoginServlet.java(全コード):

package com.pack; 

import java.io.IOException; 
import java.io.PrintWriter; 
import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.ResultSet; 

import javax.servlet.RequestDispatcher; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 

public class LoginServlet extends HttpServlet { 

    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { 
    RequestDispatcher rd= null; 
     res.setContentType("text/html"); 
    PrintWriter out=res.getWriter(); 
    String upassword=req.getParameter("pass"); 
    out.println(upassword); 

    String uname2=req.getParameter("name"); 
    out.println(uname2); 
    try{ 
     Connection con=DbConnection.getConnection(); 
     out.println("conection established"); 
     PreparedStatement ps=con.prepareStatement("select * from register_table where username=? and password=?"); 
     ps.setString(1, uname2); 
     ps.setString(2, upassword); 
     ResultSet rs= ps.executeQuery(); 

     if(rs.next()){ 
      out.println("username is "+rs.getString(1)+" and pwd is "+rs.getString(2)); 
      req.setAttribute("uid", uname2); 
      req.getRequestDispatcher("MainServlet").forward(req, res); 
     }else{ 
      out.println("user name or password incorrect.Check and login again or register"); 
      req.getRequestDispatcher("index.jsp").include(req, res); 
     } 
    }catch(Exception e){ 
     e.printStackTrace(); 
    } 

    } 

} 

の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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> 
    <display-name>TodayServlet</display-name> 
    <welcome-file-list> 
    <welcome-file>index.html</welcome-file> 
    <welcome-file>index.htm</welcome-file> 
    <welcome-file>index.jsp</welcome-file> 
    <welcome-file>default.html</welcome-file> 
    <welcome-file>default.htm</welcome-file> 
    <welcome-file>default.jsp</welcome-file> 
    </welcome-file-list> 
    <servlet> 
    <description></description> 
    <display-name>LoginServlet</display-name> 
    <servlet-name>LoginServlet</servlet-name> 
    <servlet-class>com.pack.LoginServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>LoginServlet</servlet-name> 
    <url-pattern>/LoginServlet</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <description></description> 
    <display-name>RegisterServlet</display-name> 
    <servlet-name>RegisterServlet</servlet-name> 
    <servlet-class>com.pack.RegisterServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>RegisterServlet</servlet-name> 
    <url-pattern>/RegisterServlet</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <description></description> 
    <display-name>WelcomeServlet</display-name> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <servlet-class>com.pack.WelcomeServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>WelcomeServlet</servlet-name> 
    <url-pattern>/WelcomeServlet</url-pattern> 
    </servlet-mapping> 
    <servlet> 
    <description></description> 
    <display-name>MainServlet</display-name> 
    <servlet-name>MainServlet</servlet-name> 
    <servlet-class>com.pack.MainServlet</servlet-class> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>MainServlet</servlet-name> 
    <url-pattern>/MainServlet</url-pattern> 
    </servlet-mapping> 

</web-app> 

ディレクトリ構造:

  1. TodayServlet(プロジェクト名)> SRC> COM。パック>サーブレット
  2. web-inf>(web.xmlおよびjspファイル)

directory structure

+0

404は単にファイルが利用できないか、言及されたパスが間違っていることを意味します。ディレクトリはこのようなものにする必要があります。Project-> WebContent-> WEB-INF-> jsps –

+0

Hi Migrated Pigeon、私はindex.jspとregister.jspの両方を作成しましたが(しかし、index.jspからregister.jspにアクセスすることはできません)、その唯一の問題は、ここではそのスローエラーです[404元のサーバーは見つかりませんでしたターゲットリソースの現在の表現、またはそれが存在することを明らかにするつもりはありません。] – jahnavi

+0

これを試して、Eclipseのサーバータブに移動し、tomcatインスタンスを右クリックしてプロパティを選択し、「スイッチの場所」をクリックします。変更を適用したら、サーバーを再始動してください。 –

答えて

1

Httpアクセスから保護する必要のあるリソースはWEB-INFの下に置かれますが、 通常、jspsはユーザーにプレゼンテーションの目的を果たします。そのため、jspはWEB-INFの外に置かれています。 しかし、いくつかの理由により、WEB-INFフォルダの下にjspファイルを保存して、1つのサーブレットを作成するよりも、 と登録リンクからそのサーブレットを呼び出してください。サーブレットで

、あなたのregister.jspに

をリダイレクトするためのRequestDispatcherを使用する必要があり、このようなあなたのサーブレットコードを保管してください:(私はあなたのレジスタと仮定します。

<servlet-mapping> 
    <servlet-name>ControlFlowServlet</servlet-name> 
    <url-pattern>/register</url-pattern> 
    </servlet-mapping> 

そして、あなたのindex.jspでは次のように続ける:

<a href="${pageContext.request.contextPath}/register">New User Register here...!!!</a><br> 

をJSPは

@WebServlet("/ControlFlowServlet") 
public class ControlFlowServlet extends HttpServlet { 
    protected void doGet(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     RequestDispatcher dispatcher = getServletContext() 
       .getRequestDispatcher("/WEB-INF/register.jsp"); 
     dispatcher.forward(request, response); 
    } 

    protected void doPost(HttpServletRequest request, 
      HttpServletResponse response) throws ServletException, IOException { 
     doGet(request, response); 
    } 

} 

は、あなたのweb.xmlにこのマッピングを追加します)直接WEB-INFフォルダの下に空くです詳しくは、thisの説明をよく読んでください。 説明が必要な場合は、教えてください。

+0

Shaileshありがとう、私は今理解しています。あなたの迅速で親切な対応に感謝します。 – jahnavi

関連する問題