jsp(9)(request获取客户机信息,头信息,参数,request转发,包含,请求乱码问题

1.request对象即:httpServletRequest,封装了请求信息

2.request常用方法:

2.1.得到请求的资源文件名字

URI:是统一资源定位符。
URL:是其子类,表示网络地址。

方法的区别是:(URL可以用于权限判断,访问量统计)

2.2.得到请求的参数

2.3.得到请求的客户端的地址,只有在DSN注册的获取到主机名才是域名否则都是IP地址。

  得到客户端的端口每次都是随机变化的

 

2.4.getLocalName获取主机的名称也需要是注册,否则得到是IP

3.获取头信息两种方式一种是单个,一种是获取所有:

4.获取浏览器提交的数据(对于提交数据处理前,记得对数据正确性做检查)

前端可以是链接带参数数据,也可以是表单

 

后端获取数据:

4.1.根据参数的name单个值

4.2.获取同名的多个参数:(比如多选)

4.3.获取所有提交的数据

4.4.还可以通过获取整个参数map(value是数组)然后利用ben工具类保存到自定义的对象中:

自定义的对象,之所以用username[]数组,是为了接受前端有两个name=“username”的文本框内容

需要额外的bean包支持:

 

 补充:实际开发中提供了封装表单的对象,然后复制该对象即可。

4.5.通过流获取,从http协议的数据体中获取,比如上传文件:

 

5.通过url参数带中文需要进行编码,可以用js,在jsp中可以用java进行编码

(目的:是url编码处理后,一般是添加%进行转义,过程中不会产生和特殊符号(= &等)冲突,这个符号是用来分割数据的)

 

6.提交中文乱码的问题:

(原因:浏览器根据当前网页的编码给中文表单进行编码,默认服务端获取时通过iso-8859-1的方式)

6.1.post方式提交表单,获取数据前设置编码类型

6.2.链接或get方式提交表单,解决方式不同,(得到的是默认iso8859-1的解码数据,所以需要对数据再进行iso8859-1编码,之后进行utf-8解码:

(补充:用iso8859-1进行解码中文可以再进行一次同样编码,即将数字解码成英文然后再编码成中文代表的数字,不会出问题;如果首先去编码就会有问题,产生未知编码符号)

6.3.服务器的解码方式还可以在连接器设置分别对应两种参数

connector中该参数不指定值,服务器默认解码Url编码采用iso-8859-1(这种方式一般不用,太过固定,有些项目需要采用其他编码类型) 

 

 useBodyEncodingForURI=true时,服务端会采用下面两种情况中的编码类型进行解码:

1.在所有的JSP/Servlet中设置contentType="text/html;charset=UTF-8"或response.setCharacterEncoding("UTF-8"),从而间接实现对浏览器编码的设置。  

2.对于请求,可以使用过滤器或者在每个JSP/Servlet中设置request.setCharacterEncoding("UTF-8")。

即修改conf/server.xml的配置指定解码的两种方式

6.3.1:(一般不采用这种方式处理乱码,固定了其他项目的编码

直接获取

6.3.2:这种方式对get/post/链接提交方式都解决了乱码。

 采用request设置编码:

7.requst也有转发的方法,并且也是一种域提供传递参数,范围只属于这个请求的request

(一般不用contex域传递参数是因为不同访问,数据值不同,名称却相同会覆盖)

 8.servlet包含页面的方法(一般在jsp页面中做包含公共页眉页脚)

 

 request一些细节补充:

1.forward方法为什么属于转发对象的,而不是当前对象的然后把转发对象作为参数呢,面向对象有时候感觉怎么样都行,很无语,

2.多个页面都给客户端发送数据会出异常

比如同时执行多个转发:

 

 3.如果在转发页面发送数据前,其他页面还没成功发送数据,将会清空其他页面的发送数据。响应头信息会保存,如果没有覆盖(因为是共享request)。

 

实例如下:

 

posted @ 2017-02-03 03:38  假程序猿  阅读(1457)  评论(0编辑  收藏  举报