Java servlett-Mapping



你好,我有一个嵌入式Tomcat java应用程序。雄猫启动并显示索引.jsp。

现在我有一个 ajax 请求,看起来像这样:

function auth(){
username = document.getElementById('login_username').value;
password = document.getElementById('login_pw').value;
if(username.length > 0 && password.length > 0){
   $.ajax({
        method: "POST",
        url: '/login',
        data: 'username=' + username + '&password=' + password
    }).done(function(response){
        console.log(response);
        response = response.split(',');
        if(response.length == 2){
            window.location = response[1];
        }
    });
}

}

auth(( 工作。但是每次我收到 404 错误时。

应该得到请求的 servlet 看起来像这样:

@WebServlet(
        name="login",
        urlPatterns = {"/login","sites/login","login"}
)
public class LoginServlet extends HttpServlet{
    private static final long serialVersionUID = 1L;
    private ServletContext context;
    public LoginServlet(){
        super();
    }
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Log.log("get");
        resp.setContentType("text/html");  
        PrintWriter out=resp.getWriter(); 
        Page p = new Page();
        p.getBody().setContent("GET");
        out.print(p.create());
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        Log.log("Post");
        resp.setContentType("text/html");  
        PrintWriter out=resp.getWriter(); 
        Page p = new Page();
        p.getBody().setContent("POST");
        out.print(p.create());
    }
    public void init(ServletConfig config)throws ServletException{
        this.context = config.getServletContext();
        Log.log("Login servlet Initialized");
    }
}

我的问题是,为什么这不起作用。我必须使用 tomcat.addServlet(string,string,string( 方法将 The servlett 添加到 Tomcat 中吗?

如果我在我的 web 应用程序的基本文件夹中创建登录名.jsp并且如果我将 ajax 请求的 url 更改为登录.jsp,它就可以工作。

谢谢

问题在于您的参数url: '/login'$.ajax() 调用中,由于开头的/(斜杠符号(,该调用在 http://localhost:8080/login 中发出请求。

你很可能期望它像http://localhost:8080/MyServletApp/login.为此,请从url中删除/

ajax 函数调用如下所示:

$.ajax({
    method: "POST",
    url: 'login',
    data: 'username=' + username + '&password=' + password
}).done(function(response){
    console.log(response);
    response = response.split(',');
    if(response.length == 2){
        window.location = response[1];
    }
});

问题解决首先,我发现注释适用于 3.0 以上的 Web.xml 版本。所以我尝试将我的 Web.xml 版本设置为 3.1。Tomcat拒绝接受,所以我在网上做了servlet映射.xml

最新更新