当前位置: 首页 > 知识库问答 >
问题:

AJAX get在Spring中返回404

钱锐
2023-03-14
$("#btn-submit").click(function () {
    var username=document.getElementById("username");
    var password=document.getElementById("password");
    $.ajax({
        url:"login",
        contentType: 'application/json;charset=utf-8',
        dataType: 'text',
        headers: {'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')},
        data: {
            username:username.value,
            password:password.value
        },
        type: 'get',
        success: function (response) {
            if (response=="1") {
                alert(response);
            }
            else alert(response);
        },
        error: function (x, e) {
            console.log(e)
        }
    });
});

LoginController.java

@RequestMapping("/login")
@Controller
public class LoginController {

    @Autowired
    private UserService userService;

    @RequestMapping(value = { "/login" }, method = RequestMethod.GET)
    @ResponseBody
    public int checkValid(@RequestParam("username") String username,@RequestParam("password") String password, HttpServletRequest request, HttpServletResponse response, Locale locale, Model model){
        try {
            if (userService.findByUserName(username).equals(hashPass(password))){
                return 1;
            }
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
            return 0;
        }
        return 0;
    }
    public String hashPass(String pass) throws NoSuchAlgorithmException {
        MessageDigest md = MessageDigest.getInstance("SHA-256");
        byte[] hashInBytes = md.digest(pass.getBytes(StandardCharsets.UTF_8));

        // bytes to hex
        StringBuilder sb = new StringBuilder();
        for (byte b : hashInBytes) {
            sb.append(String.format("%02x", b));
        }
        return sb.toString();
    }
}

spring-config-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>

http://www.springframework.org/schema/jdbc/springframework.org/schema/mvc/springmvc-4.3.xsd http://www.springframework.org/schema/mvc/springmvc-4.3.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/springbeans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/tx

<!-- Enable Annotation based Declarative Transaction Management -->
<tx:annotation-driven proxy-target-class="true"
                      transaction-manager="transactionManager" />

<!-- Creating TransactionManager Bean, since JDBC we are creating of type
  DataSourceTransactionManager -->
<bean id="transactionManager"
      class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
    <property name="dataSource" ref="dataSource" />
</bean>
<bean id="postsDAO" class="com.blog.dao.impl.PostsDAO">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="postsService" class="com.blog.service.impl.PostsService">
    <property name="postsDAO" ref="postsDAO"/>
</bean>
<bean id="userDAO" class="com.blog.dao.impl.UserDAO">
    <property name="jdbcTemplate" ref="jdbcTemplate"/>
</bean>
<bean id="userService" class="com.blog.service.impl.UserService">
    <property name="userDAO" ref="userDAO"/>
</bean>

我使用tomcat 9错误:无法加载资源:服务器响应http://localhost:8080/blog_war_explorded/login?username=root&password=root,状态为404()

共有1个答案

宰父飞翼
2023-03-14

请查看您的错误:您正在访问http://localhost:8080/blog_war_explorded/login,但您实际上想访问http://localhost:8080/login

原因是您将您的URL指定为login而不是/login,因此它是相对于当前“目录”而不是根的。

将代码更改为使用/login应该可以解决此问题:

    $.ajax({
        url: "/login",
        ...
    })

另外,通过GET请求这样做并不是一个好主意--除其他外,密码将以明文形式存储在服务器日志中。您应该改用POST请求。

更新:

而且,您似乎在使用/login的两个请求映射,它们是相互叠加的,因此最终将使用/login/login。查看如何正确使用@requestmapping

 类似资料:
  • 我试图发送一个体在后请求在一个springboot应用程序使用Rest模板。这里是控制器:(我删除了,因为我使用了头) 我想发送对象(lang,key和text)作为帖子请求中的正文,以获得mcResent: 公共mc响应parseTheSentiments(字符串文本,语言lang,字符串键)抛出异常{ } 但是,我得到了以下错误:404null。 你能帮帮我吗?提前感谢,以下是服务等级:

  • 我想用响应替换http异常,也就是说,我使用我想返回的responseentity,例如409如果没有通过名称找到用户,509如果没有通过邮件找到用户,我可以确定responseentity中的错误号及其描述吗?如果有,可以举例说明吗?

  • 我已经用Spring Boot构建了一个应用程序,并将其部署在远程Tomcat服务器中。每当我向应用程序的唯一endpoint发出请求时,我会得到一个404。我将所有上下文路径设置为相同的名称/跟踪器,但仍然没有设置。我不知道我是不是错过了什么。 这是我得到的信息: 源服务器未找到目标资源的当前表示形式,或不愿意透露存在此表示形式。 我正在使用我在我的本地环境中使用的相同的工作完美。 有效载荷 封

  • 我正在开发一个简单的Spring Boot base rest应用程序,该应用程序已部署到外部tomcat服务器中,并带有jndi数据源。当我运行应用程序时,数据库被创建,这意味着应用程序能够读取实体类并创建hibernate ddl。然而,当我试图点击postman的rest url时,返回了一条404错误消息。这是在我将应用程序移动到外部服务器之后发生的,当我使用嵌入式服务器时,我能够点击UR

  • 当我从Eclipse运行Spring Boot应用程序时,它在嵌入式Tomcat服务器上正常运行,但当我将其部署到外部tomcat服务器(在Windows上)时,我将获得HTTP 404状态。 我清理了包并从本地tomcat服务器上tomcat webapps文件夹中的目标文件夹war文件中复制,然后重新启动了tomcat,但是。。。 当我运行获取方法在邮递员与endpointhttp://loc

  • 我正在创建一个RESTFul Web服务,其可用服务如下: 当空列表返回时,我将在浏览器中得到以下响应: