Java 请求的资源不可用。JSP程序错误

Java 请求的资源不可用。JSP程序错误,java,eclipse,jsp,tomcat,Java,Eclipse,Jsp,Tomcat,我正在尝试我的forst-jsp登录程序。它正确地显示了登录页面,但当我提交时,它给出了错误: HTTP状态404-/UserPass/username 类型状态报告 message/UserPass/username 说明请求的资源不可用 这是我的密码: username.java package sid; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import

我正在尝试我的forst-jsp登录程序。它正确地显示了登录页面,但当我提交时,它给出了错误:

HTTP状态404-/UserPass/username

类型状态报告

message/UserPass/username

说明请求的资源不可用

这是我的密码:

username.java

package sid;

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

public class username extends HttpServlet{

    protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    {
        response.setContentType("text/html");

        String user=request.getParameter("username");
        String pass=request.getParameter("password");

        if(user.equals("sid") && pass.equals("hello"))
        {
            System.out.println("Welcome");
        }
        else
        {
            System.out.println("Invalid username or password");
        }
    }
}
user.jsp

<html>
<head>
<meta http-equiv="Content-Type" content="text/html">
<title>Insert title here</title>
</head>
<body>
<h1>Login Page</h1> 
<center> 

<form action="username" method="GET"> <br/>
User :<input type="text" name="username"> <br/>
Pass :<input type="password" name="password"> 
<br/><input type="submit" value="Submit"> </form> 
</center>
</body>
</html>

在此处插入标题
登录页面

用户:
通过:
web.xml

<web-app>
    <servlet>
    <servlet-name>login</servlet-name>
    <servlet-class>sid.username</servlet-class>
    </servlet>

    <servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/username/*</url-pattern>
    </servlet-mapping>
</web-app>

登录
sid.username
登录
/用户名/*
我的user.jsp代码在WebContent中,我的web.xml在WebContent/web-INF/lib中。
我正在使用EclipseIndigoSR2和ApacheTomcat。

您应该将
web.xml
放在
/web-INF
中,而不是放在
lib


此外,您还需要重新启动服务器,以便重新加载和反映所做的更改。

更改servlet映射

<servlet-mapping>
    <servlet-name>login</servlet-name>
    <url-pattern>/username/*</url-pattern>
    </servlet-mapping>

登录
/用户名/*


登录
/用户名

按命名法类名应以大写字母开头,并尝试更改为

form action="/username" method="GET"> <br/>
formaction=“/username”method=“GET”>
用户:
通过:


在login.jsp中,看看这是否有效,我在web.xml中指出了2-3点

首先web.xml放在/web-INF中不放在库中

第二步检查web.xml中的servlet名称。它应该是用户名,而不是登录

<servlet>
<servlet-name>username</servlet-name>
<servlet-class>sid.username</servlet-class>
</servlet>

用户名
sid.username
第三个更改此项

<servlet-mapping>
<servlet-name>username</servlet-name>
<url-pattern>/username</url-pattern>
</servlet-mapping>

用户名
/用户名

对于
/UserPass/username/foo
会发生什么?此外,虽然这可能是学习servlet如何工作的有用练习,但我强烈建议不要手工编写它们。对于真实世界的程序,使用一个框架,比如SpringMVC,它可以为您处理所有样板文件的细节,但不会发生任何事情。登录后,我只希望它显示在控制台上。已经完成。没有什么变化。考虑库马尔的建议也清理你的项目和dipy它没有改变。同样的错误。我刚刚在我的机器上尝试了你的程序,当我把web.xml放在/WebContent/web-INF中时,它正在工作,当我把它放在/lib中时,它给出了404。你能发布项目目录结构的屏幕截图吗?我重新启动了eclipse,它成功了。不知道这是怎么解决的。当您更改web.xml的位置时,您必须重新启动服务器以重新加载web.xml。还有一件事,不要只是为了测试而使用GET方法,而是在交换诸如login之类的敏感数据时,始终使用post。
<servlet-mapping>
<servlet-name>username</servlet-name>
<url-pattern>/username</url-pattern>
</servlet-mapping>