(jsp、servlet、Apache Tomcat 9、Eclipse neon、Oracle 11g)を使用して1つのサーブレットプロジェクトを作成しました。 index.jspを作成しました(ログインの詳細を取得し、データベーステーブルでユーザー名とパスワードの検証のためにLoginServletにリダイレクトします。index.jspで、初めてユーザーの場合は登録するための "register.jsp"リンクについても言及しました)。プロジェクトを実行すると、index.jspページが開きます。
ユーザーIDとパスワードの詳細(データベースに手動で入力したユーザー名とパスワードの詳細)を指定すると、LoginServletなどのサーブレットに正常にリダイレクトされます。
しかし、「登録」のリンクをクリックすると、上記のエラーが表示されます(HTTPステータス[404]?[見つかりません]タイプステータスレポートメッセージ/TodayServlet/register.jsp説明オリジンサーバーが見つかりませんでしたターゲットリソースの現在の表現またはそれが存在することを開示するつもりはないApache Tomcat/9.0.0.M2)
私の問題はindex.jspにあり、「register.jsp」を開くことができません(「register.jspはindex.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();
}
}
}
他のサーブレット(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>
ディレクトリ構造:
ただし、Httpアクセスから保護する必要のあるリソースはWEB-INFの下に配置されます。通常、jspはユーザーへの表示の目的を果たします。そのため、jspはWEB-INFの外部に配置されます。しかし、いくつかの理由により、1つのサーブレットを作成するよりもWEB-INFフォルダーの下にjspファイルを保持するように主張し、登録リンクからそのサーブレットを呼び出す場合。
サーブレットでは、requestdispatcherを使用してregister.jspにリダイレクトする必要があります
サーブレットコードを次のようにしてください:(register.jspはWEB-INFフォルダーの直下にあると想定しています)
@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に追加します。
<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>
詳細については、親切に this 説明をお読みください。ご不明な点がございましたら、何なりとお知らせください。
私はこの問題に何度も苦労しました。
私が現在使用しているソリューションは、Webアプリケーション(またはjspのようなビューを保持したフォルダー)がデプロイメントアセンブリの下にあるかどうかです。
これを試して:
プロジェクト> Build Path > Configure Build path > Deployment Assembly > Add(right hand side) > Folder >
を右クリックします(jspフォルダーを追加します。デフォルトではsrc/main/webapp
)
私はこれらの問題を抱えていましたが、新しい正確なソースを追加することで解決しました: