你好,我有一个嵌入式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