ssm踩坑(1)request共享,method = {RequestMethod.POST}报405,request中获取GET和POST请求参数

使用@RequestMapping(value = "/editItemsSubmit",method = {RequestMethod.POST}),访问时报错:

Request method 'GET' not supported

1.将form表单的method提交方式由get改成post即可,在相应页面改,通过<a href="..">链接跳转就会报405,

2.也有尝试在jsp中添加代码成下面这样:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort()
            + path + "/";
%>
<html>
<head>
    <base href="<%=basePath%>">
    <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
    <title>。。。。</title>
</head>

3.提交的表单字段(<input name="字段名">)要与pojo的类型完全对应,否则请求并不能完全对应识别,有时就会报405

二:获取request共享的id:

先补充点知识:

java从request中获取GET和POST请求参数

三 获取所有参数key

request.getParameterNames(); get和post都可用,注:不适用contentType为multipart/form-data

URL和参数列表

一 获取请求方式
request.getMethod(); get和post都可用,

二 获取请求类型
request.getContentType(); get和post都可用,示例值:application/json ,multipart/form-data, application/xml等

三 获取所有参数key
request.getParameterNames(); get和post都可用,注:不适用contentType为multipart/form-data

四 获取参数值value
request.getParameter("test"); get和post都可用,注:不适用contentType为multipart/form-data

五 获取取参数请求集合
request.getParameterMap(); get和post都可用,注: 不适用contentType为multipart/form-data

六 获取文本流
request.getInputStream() 适用于如:application/json,xml,multipart/form-data文本流或者大文件形式提交的请求或者xml等形式的报文

七 获取URL
getRequestURL()

八 获取参数列表:
1.getQueryString()

只适用于GET,比如客户端发送http://localhost/testServlet?a=b&c=d&e=f,通过request.getQueryString()得到的是a=b&c=d&e=f.

2.getParameter()

GET和POST都可以使用

但如果是POST请求要根据

表单提交数据的编码方式来确定能否使用.当编码方式是(application/x- www-form-urlencoded)时才能使用.

这种编码方式(application/x-www-form-urlencoded)虽然简单,但对于传输大块的二进制数据显得力不从心.

对于传输大块的二进制数这类数据,浏览器采用了另一种编码方式("multipart/form-data"),这时就需要使用下面的两种方法.

3.getInputStream()

4.getReader()

上面两种方法获取的是Http请求包的包体,因为GET方式请求一般不包含包体.所以上面两种方法一般用于POST请求获取参数.

需要注意的是:

request.getParameter()、 request.getInputStream()、request.getReader()这三种方法是有冲突的,因为流只能被读一次。

比如:

当form表单内容采用 enctype=application/x-www-form-urlencoded编码时,先通过调用request.getParameter()方法得到参数后,

再调用request.getInputStream()或request.getReader()已经得不到流中的内容,

因为在调用 request.getParameter()时系统可能对表单中提交的数据以流的形式读了一次,反之亦然。

当form表单内容采用 enctype=multipart/form-data编码时,即使先调用request.getParameter()也得不到数据,

所以这时调用request.getParameter()方法对 request.getInputStream()或request.getReader()没有冲突,

即使已经调用了 request.getParameter()方法也可以通过调用request.getInputStream()或request.getReader()得到表单中的数据,

而request.getInputStream()和request.getReader()在同一个响应中是不能混合使用的,如果混合使用就会抛异常

举个我的代码例子为例:

我的表单代码如下:

<form action="${pageContext.request.contextPath}/editItemsSubmit.action" method="post" id="itemForm" enctype="multipart/form-data">

由于用到了multipart/form-data,又是post请求,所以直接通过request.getParameter("")获取的值都为空,

去掉enctype="multipart/form-data"即可获取到值。或将post改成get也能获取到值。

猜你喜欢

转载自blog.csdn.net/qq_41063141/article/details/83904302