Java servlett映射
你好,我有一个嵌入式Tomcat java应用程序。tomcat启动并显示index.jsp 现在我有一个ajax请求,如下所示: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
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以查找可能的错误日志