Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/305.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java servlett映射_Java_Ajax_Tomcat_Servlets - Fatal编程技术网

Java servlett映射

Java servlett映射,java,ajax,tomcat,servlets,Java,Ajax,Tomcat,Servlets,你好,我有一个嵌入式Tomcat java应用程序。tomcat启动并显示index.jsp 现在我有一个ajax请求,如下所示: function auth(){ username = document.getElementById('login_username').value; password = document.getElementById('login_pw').value; if(username.length > 0 && password.length

你好,我有一个嵌入式Tomcat java应用程序。tomcat启动并显示index.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];
        }
    });
}
@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");
    }
}
}

auth()可以工作。但每次我都会遇到404错误

应获取请求的servlet如下所示:

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];
        }
    });
}
@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)方法将servlet添加到Tomcat中吗

如果我在webapp的基本文件夹中创建login.jsp,并且将ajax请求的url更改为login.jsp,那么它就可以工作


谢谢问题在于
$.ajax()
调用中的参数
url:'/login'
,该调用在
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拒绝接受,所以我在web.xml中进行了servlet映射,不幸的是,这个解决方案不起作用。我以前试过,现在又试了一次。我也修改了映射URL,但仍然出现404错误。我没有得到日志条目。请检查ajax在浏览器控制台中请求的URL。尝试在浏览器中点击相同的URL以查找可能的错误日志