用POST和GET获取URL后的参数小问题

guaguawa121 2013-06-16 05:10:57

<form action="servlet/ThirdServlet?userName=1&passWord=2" method="post">
姓名<input type="text" name="uesrName"><br>
密码<input type="text" name="passWord"><br>
<input type="submit" value="提交">
</form>



public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String userName = request.getParameter("userName");
String passWord = request.getParameter("passWord");
response.getWriter().println("userName --->"+userName);
response.getWriter().println("passWord---->"+passWord);
}


当form提交方式为get的时候,组件里填写了value的值,action里的url后也带有参数(写死的),这时servlet获取的uesrName和passWord是文本组件里的值

当form提交方式为post的时候,组件里填写了value的值,action里的url后也带有参数(写死的),这时servlet获取的uesrName和passWord是url后参数的值

小弟想问的是,post获取的为何是url后参数的值?post不是获取的是请求体里的值么(即组件里的值)?

求大神!!!!
...全文
15394 19 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
武林飛 2015-12-30
  • 打赏
  • 举报
回复
学习了。。。。。。。
  • 打赏
  • 举报
回复
学习了,写得好!
xxjxxmxhlr 2013-06-17
  • 打赏
  • 举报
回复
引用 4 楼 xukaihua2006 的回复:
Get请求的参数内容是放在http信息的报文头里面的,而post请求是放在报文体里面的。 1、URL带参数属于Get方式请求,所以当表单中为Get请求的时候表单中的文本中的值会覆盖你原来URL的参数。所以你得到的是文本组件中的值 2、Post请求的值是放在报文体中的,所以不会覆盖掉你原来URL中的参数。 至于后台对于第二种情况,你可以在doGet中获取到URL中的参数值,在doPost中获取到文本组件中的值,你可以试一下。
这个还是挺有干货的
侠龙 2013-06-16
  • 打赏
  • 举报
回复
为什么要这么写,真是想不通。为什么要取名字为doPost,不是误导人吗?既然是private私有方法,就不要取doPost方法。因为在HttpServlet的中也有一个处理Post请求的方法叫doPost,你这样改成private方法会报编译错误的,子类覆盖父类的方法,修饰符的范围不能小于父类中被覆盖的方法。 回答的那么清楚了,把分给我吧 嘿嘿!
guaguawa121 2013-06-16
  • 打赏
  • 举报
回复
引用 14 楼 xukaihua2006 的回复:
两种的效果一摸一样
效果是一样,但楼上有位大神说 public void doPost这个方法应该是private类型的吧? 给我的感觉好像是应该

public void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        doPost(request, response);
    }
    private void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        //业务逻辑
        System.out.println("123");
    }

这种有讲究么?
侠龙 2013-06-16
  • 打赏
  • 举报
回复
两种的效果一摸一样
guaguawa121 2013-06-16
  • 打赏
  • 举报
回复
引用 11 楼 xukaihua2006 的回复:
是这样的,doGet处理 Get请求表单的,doPost处理 Post请求表单的。你这种写法会误导人的。 实际上是把业务写在了doPost中,这里在doGet中写doPost,是因为doGet与doPost执行了相同的业务逻辑。 并不是在doGet中执行doPost
我的意思是如果doGet和doPost两个方法中执行的业务逻辑一样以下两种写法,哪种正确?

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doPost(request, response);
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//业务逻辑
		System.out.println("123");
	}
或者

public void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		//业务逻辑
		System.out.println("123");
	}
	public void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}
~天一生水 2013-06-16
  • 打赏
  • 举报
回复
学习下,学习时没注意这些细节。。。。 谢谢大神的讲解
侠龙 2013-06-16
  • 打赏
  • 举报
回复
是这样的,doGet处理 Get请求表单的,doPost处理 Post请求表单的。你这种写法会误导人的。 实际上是把业务写在了doPost中,这里在doGet中写doPost,是因为doGet与doPost执行了相同的业务逻辑。 并不是在doGet中执行doPost
guaguawa121 2013-06-16
  • 打赏
  • 举报
回复
引用 6 楼 fangmingshijie 的回复:
public void doPost这个方法应该是private类型的吧?
大神 那我是不是可以这么理解:在doGet里执行doPost?

public void doGet(HttpServletRequest request, HttpServletResponse response)  
            throws ServletException, IOException {  
        doPost(request,response);  
} 

guaguawa121 2013-06-16
  • 打赏
  • 举报
回复
引用 7 楼 xukaihua2006 的回复:
就是这样的。但是后台获取的方式 要分开,用doGet 与doPost 分别获取 是protect的
我还想问下,一般是doPost里执行doGet还是doGet里执行doPost?为啥?
侠龙 2013-06-16
  • 打赏
  • 举报
回复
protected
侠龙 2013-06-16
  • 打赏
  • 举报
回复
就是这样的。但是后台获取的方式 要分开,用doGet 与doPost 分别获取 是protect的
  • 打赏
  • 举报
回复
public void doPost这个方法应该是private类型的吧?
guaguawa121 2013-06-16
  • 打赏
  • 举报
回复
引用 4 楼 xukaihua2006 的回复:
Get请求的参数内容是放在http信息的报文头里面的,而post请求是放在报文体里面的。 1、URL带参数属于Get方式请求,所以当表单中为Get请求的时候表单中的文本中的值会覆盖你原来URL的参数。所以你得到的是文本组件中的值 2、Post请求的值是放在报文体中的,所以不会覆盖掉你原来URL中的参数。 至于后台对于第二种情况,你可以在doGet中获取到URL中的参数值,在doPost中获取到文本组件中的值,你可以试一下。
也就是说出现这种情况的原因是get请求时候,组件里的值会覆盖url后的参数,而post既可以获取url后面的参数的值也可以获取组件里的值。 是否可以这么理解?
侠龙 2013-06-16
  • 打赏
  • 举报
回复
Get请求的参数内容是放在http信息的报文头里面的,而post请求是放在报文体里面的。 1、URL带参数属于Get方式请求,所以当表单中为Get请求的时候表单中的文本中的值会覆盖你原来URL的参数。所以你得到的是文本组件中的值 2、Post请求的值是放在报文体中的,所以不会覆盖掉你原来URL中的参数。 至于后台对于第二种情况,你可以在doGet中获取到URL中的参数值,在doPost中获取到文本组件中的值,你可以试一下。
guaguawa121 2013-06-16
  • 打赏
  • 举报
回复
引用 2 楼 guaguawa121 的回复:
[quote=引用 1 楼 xiangyuecn 的回复:] 第一次看这样写表单 GET提交时貌似action后面的参数会被清除掉加上表单参数 POST没试过,会不会是个数组啊,用getParameterValues取出来看看
测试了下,其实有两个userName和passWord上传到服务器。 那小弟还想问下,这样是不是不用去关心为何post和get取出来单个值的时候不一样的问题了?[/quote] 还发现个问题,如果是get提交原先url后的参数被清除,用文本框的value来代替 但是post却是有两个userName,passWord。(url后的和文本组件都会被上传)
guaguawa121 2013-06-16
  • 打赏
  • 举报
回复
引用 1 楼 xiangyuecn 的回复:
第一次看这样写表单 GET提交时貌似action后面的参数会被清除掉加上表单参数 POST没试过,会不会是个数组啊,用getParameterValues取出来看看
测试了下,其实有两个userName和passWord上传到服务器。 那小弟还想问下,这样是不是不用去关心为何post和get取出来单个值的时候不一样的问题了?
高坚果兄弟 2013-06-16
  • 打赏
  • 举报
回复
第一次看这样写表单 GET提交时貌似action后面的参数会被清除掉加上表单参数 POST没试过,会不会是个数组啊,用getParameterValues取出来看看

81,122

社区成员

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

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