JSP内置对象
- request
- response
- session
- application
- out
- pageContext
- config
- page
- exception
request对象
request对象是 javax.servlet.Http.ServletRequest类型的对象。该对象代表了客户端的请求信息,主要用于接收通过HTTP协议传送到服务器端的数据(头信息、系统信息、请求方式、请求参数等)。request对象的作用域为一次请求。
1.获取请求参数的值
在一个请求中,可以通过“?”的方式来传递参数,然后通过request对象的getParameter()方法来获取参数。
String id = request.getParameter("id");
上面代码使用getParamert()方法从 request对象中获取参数 id的值,如果 request对象中不存在此参数方法那么将返回 null;
2.解决中文乱码
a.问题描述:
在一般传递参数时,如果将参数的值改为中文,那么在.jsp页面就会发生中文乱码问题。这是因为请求参数的文字编码方式于页面中的不一致所造成的,所有的 request请求都是 ISO-8859-1 的。在一般的 .jsp页面中采用的是GBK的编码方式。
b.解决方法:
i.通用处理方式:处理get post 请求提交中文数据乱码问题
String username = request.getParameter("username");
byte[] bytes = username.getBytes("ISO-8859-1");//将字符串还原成字节 相当于解码
username=new String(bytes,"utf-8");//将字节重新编码
ii.post 请求特有的方式 处理中文乱码
request.setCharacterEncoding("utf-8");
3.获取Form表单的信息
使用 request对象获取从表单中提交过来的信息。在一个表单中会有不同的标签元素,
- 对于文本元素、按钮元素、下拉列表框都可以使用
getParameter()
方法来获取。 - 对于复选框以及多选列表框被选定的内容使用
getParamertValues()
方法来获取,该方法会返回一个字符串数组,通过循环遍历这个数组就可以得到用户选定的所有内容。
4.获取请求客户端
在 request对象中通过相应的方法还可以获取客户端的相关信息,如HTTP报头信息、客户信息提交方式、客户端主机IP、端口号等。
StringgetHeader(String name)
返回指定名称的HTTP头信息
StringgetMethod()
获取客户端向服务器发送请求的方法
StringgetContextPath()
返回请求路径
StringgetProtocol()
返回请求使用的协议
StringgetRemoteAddr()
返回客户端IP地址
StringgetRemoteHost()
返回客户端的主机地址
intgetRemotePort()
返回客户端发出请求的端口号
StringgetServletPath()
返回接收客户提交信息的页面
StringgetRequestURI()
返回部分客户端请求的地址,不包括请求的参数
StringgetRequestURL()
返回客户端请求的地址
5.在作用域中管理属性
通过使用setAttribute()
方法可以在 request 对象的属性列表中添加一个属性,然后在request对象的作用域范围内通过使用getAttribute()
方法将其属性取出,此外还可以使用removeAttribute()
方法将一个属性删除掉。
在一次请求的多个资源之间共享数据
request.setAttribute("name","yangfan");
request.getAttribute("name");
request.removeAttribute("name");
**注意:**request对象的作用域为一次请求,超出作用域后属性列表中的属性即会失效。
6.请求转发
a.转发的特点:
- 一次请求一次响应
- 地址栏不发生变化
- 只能访问内部站点资源
b.代码:
request.getRequestDispatcher("/other").forward(request, response);
7.Cookie管理
cookie是小段的文本信息,通过使用cookie可以标识用户身份、记录用户名、密码、跟踪重复用户。
cookie在服务器端生成并发送给浏览器,浏览器将cookie的 key/value保存到某个指定的目录下,服务器的名称与值可以由服务器端定义。
a.通过 Servlet 设置 Cookies步骤:
i.创建一个 Cookie 对象。
Cookie cookie = new Cookie("key","value");
注意:无论是名字还是值,都不应该包含空格或以下任何字符:[ ] ( ) = , " / ? @ : ;
ii.设置最大生存周期
public voidsetMaxAge(int expiry)
该方法设置 cookie 过期的时间(以秒为单位)。如果不这样设置,cookie 只会在当前 session 会话中持续有效。
cookie.setMaxAge(60*60*24); //设置一个最长有效期为 24 小时的 cookie。
iii.发送 Cookie 到 HTTP 响应头addCookie()方法
将一个cookie对象发送到客户端使用了 response对象的 addCookie()方法。
response.addCookie(cookie);
response对象
response代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。
response对象也是有作用域的,它只在 JSP页面内有效。
1.常用方法
void addHeader(String name,String value)
添加HTTP文件头,如果同名头存在,则覆盖
void setHeader(String name,String value)
设定指定名称的文件头的值,如果存在,则覆盖
void addCookie(Cookie cookie)
向客户端添加一个cookie对象
void sendError(int src ,String msg)
向客户端发送错误信息,如404网页找不到
void sendRedirect(String location)
发送请求到另一个指定位置
ServletOutputStream getOutputStream()
获取客户端输出流对象
void setBufferSize(int size)
设置缓冲区大小
2.重定向网页
重定向使用sendRedirect()
方法,将响应发送到另一个指定位置进行处理。
重定向可以将地址重新定向到不同的主机上,在客户端浏览器上将会得到跳转的地址,并重新发送请求链接。用户可以从浏览器地址栏中看到跳转后的地址。 进行重定向操作后,request中的属性全部失效,并且进入一个新的 request对象的作用域。
例子:
response.sendRedirect("www.baidu.com");
3.处理HTTP文件头
voidsetHeader(String name,String value)
通过两个参数——头名称和参数值的方式来设置HTTP文件头
//例:设置网页每5秒刷新一次
response.setHeader("refresh","5");
//例:设置网页3秒后自动跳转至指定的页面
response.setHeader("refresh","3"; URL=other.jsp);
常用的设置响应类型,如设置编码类型:
response.setContentType("text/html;charset=utf-8");
4.设置输出缓冲
通常情况下,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区,但是在一下情况,才会把缓冲区的内容写到客户端。
- JSP页面的输出信息已经全部写入缓冲区。
- 缓冲区已满
- 在JSP页面中调用了 flushbuffer()方法 或 out对象的 flush()方法
使用 response对象的setBufferSize()
方法可以设置缓冲区的大小。
例:设置缓冲区大小为0KB,即不缓冲
response.setBufferSize(0);
还可以使用 isCommitted()
方法来检测服务器端是否已经把数据写到了客户端