eclipse HTTP 状态 [404] ? [Not Found](源服务器没有找到当前的表示)

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/44450206/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-09-09 05:42:17  来源:igfitidea点击:

HTTP Status [404] ? [Not Found] (The origin server did not find a current representatio)

eclipsejsptomcatservlets

提问by jahnavi

I have created one servlet project using (jsp,servlet,apache tomcat 9, eclipse neon,oracle 11g). I have created index.jsp (to take login details and redirect to LoginServlet for username and password validations in database table. In index.jsp I even mentioned a "register.jsp" link to register if first time user). When I run project index.jsp page opens.

我使用(jsp、servlet、apache tomcat 9、eclipse neon、oracle 11g)创建了一个servlet项目。我创建了 index.jsp(获取登录详细信息并重定向到 LoginServlet 以在数据库表中进行用户名和密码验证。在 index.jsp 中,我什至提到了一个“register.jsp”链接来注册如果是第一次用户)。当我运行项目时 index.jsp 页面打开。

When I provide user id and password details (manually entered username and password details in database), it's successfully redirecting me LoginServlet and then so on servlets.

当我提供用户 ID 和密码详细信息(在数据库中手动输入用户名和密码详细信息)时,它成功地将我重定向到 LoginServlet,然后再重定向到 servlet。

But when I click on the link for "register", I am getting above mentioned error (HTTP Status [404] ? [Not Found] Type Status Report Message /TodayServlet/register.jsp Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists. Apache Tomcat/9.0.0.M20)

但是,当我单击“注册”链接时,出现上述错误(HTTP 状态 [404] ?[未找到] 类型状态报告消息 /TodayServlet/register.jsp 描述源服务器没有找到当前的表示)目标资源或不愿意透露一个存在。Apache Tomcat/9.0.0.M20)

My problem is from index.jsp, I am unable to open "register.jsp" ("register.jsp provided through anchor tag in index.jsp).

我的问题来自 index.jsp,我无法打开“register.jsp”(“通过 index.jsp 中的锚标记提供的 register.jsp”)。

Please find my attachments for directory structure and main jsp and servlets and web.xml code.

请找到我的目录结构和主要 jsp 和 servlet 以及 web.xml 代码的附件。

index.jsp (main code):

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 (main code):

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 (main code):

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 am facing no problem with other servlets (LoginServlet, WelcomeServlet...)

我在使用其他 servlet(LoginServlet、WelcomeServlet...)时没有遇到任何问题

LoginServlet.java (whole code):

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 (code):

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>

Directory structure:

目录结构:

  1. TodayServlet( project name)>src>com.pack>servlets
  2. web-inf> (web.xml and jsp files)
  1. TodayServlet(项目名)>src>com.pack>servlets
  2. web-inf>(web.xml 和 jsp 文件)

directory structure

目录结构

采纳答案by Shailesh Saxena

Though the resources which need to be protected from Http access are placed under WEB-INF. Normally jsps serves the purpose of presentation to the user, that is why they are placed outside WEB-INF. But due to some reasons, if you insist of keeping jsp file under WEB-INF folder than create one servlet, and invoke that servlet from your registration link.

虽然需要防止Http访问的资源放在WEB-INF下。通常 jsps 用于向用户展示的目的,这就是为什么它们被放置在 WEB-INF 之外的原因。但是由于某些原因,如果您坚持将 jsp 文件保存在 WEB-INF 文件夹下,而不是创建一个 servlet,然后从您的注册链接调用该 servlet。

In the servlet, you need to use requestdispatcher to redirect to your register.jsp

在servlet中,你需要使用requestdispatcher重定向到你的register.jsp

Keep your Servlet code like this :(I assume that your register.jsp is availabe directly under WEB-INF folder)

像这样保持你的 Servlet 代码:(我假设你的 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);
    }

}

Add this mapping in your web.xml:

在您的 web.xml 中添加此映射:

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

And in your index.jsp keep like this:

在你的 index.jsp 中保持这样:

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

For more information kindly read thisexplanation carefully. If you need any clarification, kindly let me know.

有关更多信息,请仔细阅读说明。如果您需要任何说明,请告诉我。

回答by Swaruuu

I struggled with this problem many times.

我在这个问题上挣扎了很多次。

The solution I am currently using is whether the webapp (or the folder where you kept the views like jsp) is under deployment assembly.

我目前使用的解决方案是 webapp(或您保存视图如 jsp 的文件夹)是否在部署程序集下。

Try this:

尝试这个:

Right click on the project > Build Path > Configure Build path > Deployment Assembly > Add(right hand side) > Folder >(add your jsp folder, by default it is src/main/webapp)

右键单击项目> Build Path > Configure Build path > Deployment Assembly > Add(right hand side) > Folder >(添加您的jsp文件夹,默认为src/main/webapp

回答by Candy

I had these problem to, and it was solved with addng new precise source:

我遇到了这些问题,并通过添加新的精确源解决了这个问题:

Deployment Assembly source

部署程序集源