Spring,JSP用AJAX的post方法提交contrllor后弹出Request method 'POST' not supported

qq_34239757 2017-05-16 09:38:09
delete.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
delete
<form id="vertify" class="templatemo-login-form" method="POST">
<div class="row form-group">
<div class="col-lg-3 col-md-3 form-group"></div>
<div class="col-lg-6 col-md-6 form-group">
<label for="inputUsername">account number</label>
<input type="text" class="form-control" id="accountNumber" name="accountNumber" required="required" maxlength="14" onchange="checkAccountNumber()">
</div>
<div class="col-lg-3 col-md-3 form-group">
<p id="accountInfo" style="color:red;margin-top:30px"></p>
</div>
</div>
<div class="row form-group">
<div class="col-lg-3 col-md-3 form-group"></div>
<div class="col-lg-6 col-md-6 form-group">
<label for="inputAmount">authcode</label>
<input type="text" class="form-control" id="authcode" min="0" name="amount" required="required" >
</div>
<div class="col-lg-3 col-md-3 form-group"></div>
</div>



<div class="form-group text-center">
<button type="submit" class="templatemo-blue-button" id ="summitaccountbutton">Submit</button>
<button type="reset" class="templatemo-white-button">Reset</button>
</div>
</form>
</body>
<script> document.getElementById("summitaccountbutton").onclick=function (){
var accountNumber=document.getElementById("accountNumber").value;
var authcode=document.getElementById("authcode").value;
var num=parseFloat(balance);
var account={accountNumber:accountNumber,
authcode:authcode};


$.ajax({
url:"http://localhost:8080/project/delete/deleteAccount",
type: "POST",
crossDomain: true,
contentType: "application/json",
data: JSON.stringify(account),
success:function(data){
console.log(data);
if(data=="has"){
//$('#accountInfo').text("has carNumber.");
//$('#accountInfo').text("");
}

else{
//$('#accountInfo').text("* account number does not exist.");


}
},
error:function(){

}

}
)
}</script>
</html>


controller

@Controller
@Scope(value="prototype")
@RequestMapping("/delete")
public class DeleteController {

@Resource
private CheckAccountNumberService checkAccountNumberService;
@Resource
private DepositService depositService;
@Resource
private GetAuthCodeService getAuthCodeService;
@Resource
private DeleteAccountService deleteAccountService;



@RequestMapping(value = "/deleteAccount", method = RequestMethod.POST)
public String deleteAccount(HttpServletRequest request, HttpServletResponse response) throws IOException{
String accountNumber=request.getParameter("accountNumber");
String code=request.getParameter("authcode");
System.out.println("accountNumber");
System.out.println("code");
String authcode = getAuthCodeService.getAuthCode(code);
if(authcode ==null){
return "test/authcodefalse";

}
else{
int a = deleteAccountService.DeleteAccount(accountNumber);
if(a!=0){

return "test/result";
}
else{return "test/unknown";}
}
}


}


按下按钮后报错
TTP Status 405 - Request method 'POST' not supported

type Status report

message Request method 'POST' not supported

description The specified HTTP method is not allowed for the requested resource.

IDE的console
无法 System.out.println("accountNumber");
System.out.println("code");
只显示[org.springframework.web.servlet.PageNotFound] - Request method 'POST' not supported



请问这是什么原因

SpringMVC.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-4.0.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

<!--避免IE执行AJAX时,返回JSON出现下载文件 -->
<bean id="mappingJacksonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>text/html;charset=UTF-8</value>
</list>
</property>
</bean>

<!-- 启动SpringMVC的注解功能,完成请求和注解POJO的映射 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="mappingJacksonHttpMessageConverter" /> <!-- JSON转换器 -->
</list>
</property>
</bean>

<!-- 对静态资源的访问 -->
<!-- <mvc:resources mapping="/js/**" location="/js/" /> <mvc:resources mapping="/css/**"
location="/css/" /> -->

<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="com.project.controller" />

<!-- 添加注解驱动 -->
<mvc:annotation-driven enable-matrix-variables="true" />
<!-- 允许对静态资源文件的访问 -->

<mvc:default-servlet-handler />

<!-- 定义跳转的文件的前后缀 ,视图模式配置 -->
<bean
class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 这里的配置我的理解是自动给后面action的方法return的字符串加上前缀和后缀,变成一个 可用的url地址 -->
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

<!-- 配置文件上传,如果没有使用文件上传可以不用配置,当然如果不配,那么配置文件中也不必引入上传组件包 -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<!-- 默认编码 -->
<property name="defaultEncoding" value="UTF-8" />
<!-- 文件大小最大值 -->
<property name="maxUploadSize" value="10485760000" />
<!-- 内存中的最大值 -->
<property name="maxInMemorySize" value="40960" />
</bean>
</beans>
...全文
627 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
你要修改一下。controller 返回json 然后在ajax的success 函数里 实现跳转页面即可。

@ResponseBody
@RequestMapping(value = "/deleteAccount", method = RequestMethod.POST)
    public String deleteAccount(HttpServletRequest request, HttpServletResponse response) throws IOException{
        String accountNumber=request.getParameter("accountNumber");
        String code=request.getParameter("authcode");
        System.out.println("accountNumber");
        System.out.println("code");
        String authcode = getAuthCodeService.getAuthCode(code);
        if(authcode ==null){
            return "{'result':'false'}";
             
        }
        else{
            int a =  deleteAccountService.DeleteAccount(accountNumber);
            if(a!=0){
         
       return "{'result':'success'}";
            }
            return "{'result':'unknown'}";
        }
    }
 
然后在ajax 的success函数 判断
success:function(data){
                console.log(data);
                if(data.result=="success"){
                   window.location.href="你要跳转的controller方法,映射的view"
                }
                 
                else{
                  ......
                      
                     
                }
            },
zjfchinese 2017-06-13
  • 打赏
  • 举报
回复
@responsebody
G-Sheep 2017-06-13
  • 打赏
  • 举报
回复
我也遇到了这个问题,围观围观
qq_34239757 2017-05-17
  • 打赏
  • 举报
回复
大神们,求救啊 controller用了RequestMethod.POST jsp用了post去传ajax,为什么不行啊 controller逻辑没问题的,写死后可执行,但为什么不能这样传值啊
ScottJane 2017-05-17
  • 打赏
  • 举报
回复
引用 5 楼 ScottJane 的回复:
return "test/authcodefalse"; 这个返回值如果没有在方法上面加@ResponseBody标注,就会去寻找/WEB-INF/test/authcodefalse.jsp,问题可能出现在这里。
一般我们公司开发的时候都会url:"http://localhost:8080/project/delete/deleteAccount.json",使用.json结尾,后端解析时对于.json结尾的请求会使用json返回。这样子前端直接用data就能取得数据。
ScottJane 2017-05-17
  • 打赏
  • 举报
回复
return "test/authcodefalse"; 这个返回值如果没有在方法上面加@ResponseBody标注,就会去寻找/WEB-INF/test/authcodefalse.jsp,问题可能出现在这里。
podd 2017-05-17
  • 打赏
  • 举报
回复
@RequestMapping("/***") @ResponseBody
podd 2017-05-17
  • 打赏
  • 举报
回复
在controller加上@responsebody,否则解释成页面
qq_34239757 2017-05-17
  • 打赏
  • 举报
回复
引用 3 楼 lrx2011 的回复:
在controller加上@responsebody,否则解释成页面
引用 5 楼 ScottJane 的回复:
return "test/authcodefalse"; 这个返回值如果没有在方法上面加@ResponseBody标注,就会去寻找/WEB-INF/test/authcodefalse.jsp,问题可能出现在这里。
是想跳到web-inf/test/里的jsp,而return一个string本来是可以直接跳的 不知道是否涉及重定向的问题,因为delete.jsp和需要跳的jsp在/web-inf/test里,但跳到delete.jsp利用了对应a标签 href的controller 所以delete标签的显示路径是http://localhost:8080/bankproject/page/delete
qq_34239757 2017-05-17
  • 打赏
  • 举报
回复
引用 3 楼 lrx2011 的回复:
在controller加上@responsebody,否则解释成页面
引用 5 楼 ScottJane 的回复:
return "test/authcodefalse"; 这个返回值如果没有在方法上面加@ResponseBody标注,就会去寻找/WEB-INF/test/authcodefalse.jsp,问题可能出现在这里。
是想跳到web-inf/test/里的jsp,而return一个string本来是可以直接跳的 不知道是否涉及重定向的问题,因为delete.jsp和需要跳的jsp在/web-inf/test里,但跳到delete.jsp利用了对应a标签 href的controller 所以delete标签的显示路径是
qq_34239757 2017-05-16
  • 打赏
  • 举报
回复
还有的是所有jsp都置于web-inf下 web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://java.sun.com/xml/ns/javaee"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
    <display-name>Archetype Created Web Application</display-name>
    
    <!-- Spring和mybatis的配置文件 -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:spring-mybatis.xml</param-value>
    </context-param>
    
    <!-- 编码过滤器 -->
    <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <async-supported>true</async-supported>
        <init-param>
            <param-name>encoding</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
    </filter>
    <filter-mapping>
        <filter-name>encodingFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
    <!-- Spring监听器 -->
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    
    <!-- 防止Spring内存溢出监听器 -->
    <listener>
        <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
    </listener>
    
    <!-- Spring MVC servlet -->
    <servlet>
        <servlet-name>SpringMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:spring-mvc.xml</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
        <async-supported>true</async-supported>
    </servlet>
    <servlet-mapping>
        <servlet-name>SpringMVC</servlet-name>
        <!-- 此处可以可以配置成*.do,对应struts的后缀习惯 -->
        <url-pattern>/</url-pattern>
    </servlet-mapping>
    
    <!-- 額外包 -->
    <servlet-mapping>   
    	<servlet-name>default</servlet-name>  
    	<url-pattern>*.jpg</url-pattern>	 
  	</servlet-mapping>	
  	<servlet-mapping>	   
    	<servlet-name>default</servlet-name>	
    	<url-pattern>*.js</url-pattern>	
  	</servlet-mapping>	
  	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.css</url-pattern>	  
	</servlet-mapping>
	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.eot</url-pattern>	  
	</servlet-mapping>
	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.svg</url-pattern>	  
	</servlet-mapping>
	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.ttf</url-pattern>	  
	</servlet-mapping>
	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.woff</url-pattern>	  
	</servlet-mapping>
	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.woff2</url-pattern>	  
	</servlet-mapping>
	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.otf</url-pattern>	  
	</servlet-mapping>
	<servlet-mapping>		
    	<servlet-name>default</servlet-name>	   
    	<url-pattern>*.png</url-pattern>	  
	</servlet-mapping>
    
    <welcome-file-list>
        <welcome-file>adminlogin.html</welcome-file>
        <welcome-file>adminlogin.jsp</welcome-file>
    </welcome-file-list>
</web-app>
请问有什么解决方法

81,091

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧