request对象
客户端的请求信息被封装在request对象中,通过它才能了解到客户端的需求,然后做出响应。它是HttpServletrequest类的实例。request对象具有请求域,即完成客户的请求之前,该对象一直有效。常用方法如下:
String getParameter(String name)返回name指定参数的参数值
String[] getParameterValues(String name)返回包含参数name的所有值的数组
void setAttribute(String,Object)存储此请求中的属性
object getAttribute(String name)返回指定属性的属性值
String getContentType()得到请求体的MIME类型
String getProtocol()返回请求用的协议类型及版本号
String getServerName()返回接受请求的服务器主机名
例子
<body>
<h1>用户注册</h1>
<hr>
<form name="regForm",active="request.jsp",method="post">
<table>
<tr>
<td>用户名</td>
<td><input type="text" name="username"/></td>
</tr>
<tr>
<td>爱好</td>
<td>
<input type="checkbox" name="favorite" values="read"/>读书
<input type="checkbox" name="favorite" values="music"/>音乐
<input type="checkbox" name="favorite" values="movie"/>电影
<input type="checkbox" name="favorite" values="internet"/>上网
</td>
</tr>
<tr>
<td colspan="2"><input type="submit" values="提交"/></td>
</tr>
</table>
</form>
</body>
<body>
<h1>request内置对象</h1>
用户名=<%=request.getParameter("username") %><br>
爱好=<%
String[] favorites=request.getParameterValues("favorate");
for(int i=0;i<favorites.length;i++)
{
out.println(favorites[i]+"  ");
}
%>
</body>
测试URL传参数<a href="request.jsp?username=name"></a>
如何解决中文乱码
找到tomcat7安装的目录下找到conf文件里找到sever.xml。用addplus打开,找到connector 标签,在标签后加上URIEcoding=“utf-8”。之后重启tomcat服务器,刷新即可。
response对象
response对象包含了响应客户请求的有关信息,但jsp中很少直接用到它。它是HttpServletResponse类的实例。response对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其他页面的response对象对当前页面无效。常用方法如下:
String getCharacterEcording()返回响应用的是何种字符编码
void setContentType(String type)设置响应的MIME类型
PrintWriter getWriter()返回可以向客户端输出字符的一个对象(注意比较:PrintWriter与内置out对象的区别)
sendRedirect(java.lang.String location)重新定向客户端的请求
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"%>
<%
response.setContentType("text/html; charset=utf-8");
out.println("<h1>response内置对象</h1>");
out.println("<hr>");
PrintWriter outer=response.getWriter();//获得输出流对象
outer.println("我是response的输出对象");
%>
response获得的PrintWriter对象在打印的时候提前于内置的out对象
解决办法内置out对象里加out.flush()强制清空缓冲区,让out对象里的内容在writer前面