6.客户端向服务器发请求并且传参(get/post)
客户端向服务器发送请求可以是get方式也可以是post方式.所以传参也分为get方式下传参
和post方式下传参.
1.哪些方式的请求属于get/post方式
get方式:
a.浏览器中输入地址(URL)然后回车
b.超链接
c.页面中引入的css样式文件
d.页面中引入的js的文件(javascript)
e.<img src="image/a.jpg" />
f.form表单中method="get"
g.ajax中可以设置异步提交请求的方式为get
f.其他
post方式:
a.form表单中method="post"
b.ajax中可以设置异步提交请求的方式为post
c.其他
2.get和post的特点及其区别
它们各自的特点及其区别主要是体现在所传递的参数上面。
a.get方式参数
参数是直接放在要请求url后面的
例如:
url?参数名=参数值&参数名=参数值
要请求的url为:
http://ip:port/WebTest/firstServlet
传参:
.../firstServlet?name=tom
.../firstServlet?name=tom&age=20
这种方式传参的特点:
1.参数直接放在url后面
2.从浏览器的地址栏里面可以直接看到所传的参数
3.参数的长度有限制,不能把一个很长的数据通过get方式传参.(与浏览器种类有关)
b.post方式传参
参数是放在请求的体部的。
(浏览器发送的请求可以大致的分为请求头+请求体)
这种方式传参的特点:
1.参数放在请求的体部而不是url后面.
2.浏览器的地址栏中看不到所传的参数.
3.因为参数不用出现在地址栏里面,所有参数长度是没有限制的.
7.servlet中接收客户端传过来的参数。
客户端都是以这样的形式传参的:
参数名字=参数值
所有在servlet中我们需要用参数名字来拿到参数值:
String value = request.getParameter("key");
其中key就是参数名字,value是参数值,不管传的值本身是什么类型,servlet中接收到以后只能是字符串类型或者字符串类型数组.
如果客户端用的多选框,这个时候传过来的参数就要用一个字符串类型数组来接收:String[] like = req.getParameterValues("like");
在表单中,参数值就是用户所填写的内容或者是所选的选项的value属性值,参数名字就是每一个input或者其他输入元素中的name属性的值.
例如:
<input type="text" name="username">
参数名字就是name属性的值:username
参数的值就是将来用户所填内容.
在servlet中,不管是get方式提交的时候还是post方式提交的时候,来到servlet里面以后,都是用相同的方式来取得数据。
request.getParameter("key");
request.getParameterValues("key");
8.中文乱码
a.get方式提交数据,servlet拿到后乱码
需要修改tomcat中的配置文件,然后重新启动tomcat服务器.
server.xml:在这个文件中找到修改端口号的那个标签,然后加入一个新的属性URIEncoding="UTF-8",或者是写GBK、GB2312
例如:
<Connector connectionTimeout="20000" port="8002" protocol="HTTP/1.1" redirectPort="8443"
URIEncoding="GBK"/>
b.post方式提交数据,servlet拿到后乱码
在代码中,我们去接收数据之前,也就是调用getParameter方法之前,需要先转换一下接收数据的编码:
req.setCharacterEncoding("GBK");
里面的值可以是GBK、UTF-8、GB2312
注意:其实不管是get方式或者是post方式提交数据,我们最后是在Eclipse/MyEclipse中打印了出来,所以我们最后还要看看工具中是用什么编码显示的我们的数据的.点击一个文件或者项目名字后右键,properties选项中可以看到这个编码.
c.servlet向浏览器返回数据,浏览器显示乱码.
在代码中,获得输出流之前,我们要先设置输出流是用什么编码把数据写回去的:
resp.setCharacterEncoding("GBK");
同时我们还可以通知浏览器我们向它传输的数据是用的什么样的编码:
resp.setContentType("text/html;charset=GBK");
注意:在我们使用的浏览器中,也是可以调整编码的设置的,就是我们可以自己选择一种编码来显示当前页面的内容,同时浏览器也会有自己一个默认的显示编码.当浏览器不知道服务器传过来的的数据是用什么编码的时候,浏览器会用默认的编码来显示.