1.JSP内置对象简介
2.Web程序的请求与响应模式
Web程序的请求响应模式
用户发送请求(request)
服务器给用户响应(response)
3.OUT对象
什么是缓冲区:Buffer,所谓缓冲区就是内存的一块区域用来保存临时数据。
这里做一个实例 用out对象来打印一首诗
<%@ page language="java" contentType="text/html; charset=utf-8"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<%
out.println("<h1>关雎</h1>");
out.println("关关雎鸠,在河之洲。窈窕淑女,君子好逑。<br>");
out.println("参差荇菜,左右流之。窈窕淑女,寤寐求之。<br>");
out.println("求之不得,寤寐思服。悠哉悠哉,辗转反侧。<br>");
out.println("参差荇菜,左右采之。窈窕淑女,琴瑟友之。<br>");
out.println("参差荇菜,左右芼之。窈窕淑女,钟鼓乐之。<br>");
%>
<br>
缓冲区大小:<%=out.getBufferSize() %>Bytes<br>
缓冲区剩余空间大小:<%=out.getRemaining() %>Bytes<br>
是否自动清空缓冲区:<%=out.isAutoFlush() %>
</body>
</html>
4.get和post提交方式的区别
表单提交的两种方式
表单三个属性 method就是提交方式,提交方式有两种分别是get和post
下面通过实例来具体比较一下
<%@ page language="java" contentType="text/html; charset=utf-8"
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<h1>用户登录</h1>
<hr>
<form action="dologin.jsp" method="post">
<label for="uername">用户名:</label>
<input type="text" name="用户名" id="username" />
<br>
<label for="pass">密码 :</label>
<input type="password" name="密码" id="pass" />
<br>
<input type="submit" value="登陆">
</form>
</body>
</html>
method=”post”分别修改就可以比较出两者的区别。
5. request对象上
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() | 返回接受请求的服务器主机名 |
int getServerPort() | 返回服务器接受此请求所用的端口号 |
String getCharacterEncoding() | 返回字符编码方式 |
void setCharacterEncoding() | 设置请求的字符编码方式 |
int getContentLength() | 返回请求体的长度(以字节数) |
String getRemoteAddr() | 返回发送此请求的客户端IP地址 |
String getRealPath(String path) | 返回一虚拟路径的真实路径 |
String request.getContextPath() | 返回上下文路径 |
reg.jsp
<body>
<h1>用户注册</h1>
<hr>
<form name="regForm" action="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" value="read" />读书
<input type="checkbox" name="favorite" value="music" />音乐
<input type="checkbox" name="favorite" value="movie" />电影
<input type="checkbox" name="favorite" value="internet" />上网
</td>
</tr>
<tr>
<td colspan="2"> <input type="submit" value="提交" /> </td>
</tr>
</table>
<br>
<hr>
<a href="request.jsp?username=薛江波">测试URL传参数</a>
</form>
</body>
request.jsp
<body>
<h1>request内置对象</h1>
<% request.setCharacterEncoding("utf-8"); //解决中文乱码问题,无法解决url传参的中文乱码问题
//那么url传参该如何解决呢,需要在tomcat配置文件中,conf文件包下有一个server.xml,找到其中
//connector 在结尾加上 URIEncoding="utf-8",加上这个属性就可以解决。需要注意的是一定要重启
//tomcat服务器,不然不会生效。
%>
用户名:<%=request.getParameter("username") %> <br>
爱好:<%
if(request.getParameterValues("favorite")!=null){
//点击测试url传参因为没有选择爱好,造成空异常,所以这里先判断一下
String[] aihao=request.getParameterValues("favorite");
for(int i=0;i<aihao.length;i++){
out.println(aihao[i]+" ");
}
}
%>
</body>
6.request对象下
接下来说setAttribute和get属性方法,set是可以在request请求对象中保存一下属性,在设置属性的时候它是一个键值对的形式,取属性的时候我们只需要输入它的键值,我们就可以获取它的属性值。
<%request.setAttribute("password","123456");>
<%=request.getAttribute("password");%>
还有getContentType()方法,获取请求体的MIME类型
得到请求体的MIME类型:<%=request.getContentType() %> <br>
返回请求用的协议类型及版本号:<%=request.getProtocol() %><br>
返回接受请求的服务器主机名:<%=request.getServerName() %><br>
返回服务器接受此请求所用的端口号:<%=request.getServerPort() %><br>
返回字符编码方式:<%=request.getCharacterEncoding() %><br>
返回请求体的长度(以字节数):<%=request.getContentLength() %><br>
返回发送此请求的客户端IP地址:<%=request.getRemoteAddr() %><br>
返回一虚拟路径的真实路径:<%=request.getRealPath("request.jsp") %><br>
返回上下文路径:<%=request.getContextPath() %>
7.response对象
response对象包含了响应客户请求的有关信息,但在JSP中很少直接用到它。它是HttpServletResponse类的实例。response的对象具有页面作用域,即访问一个页面时,该页面内的response对象只能对这次访问有效,其它页面的response对象对当前页面无效。常用方法如下:
方法 | 作用 |
---|---|
String getCharacterEncoding() | 返回响应用的是何种字符编码 |
void setContentType(String type) | 设置响应的MIME类型 |
PrintWriter getWriter() | 返回可以向客户端输出字符的一个对象,PrintWriter与out有区别 |
void sendRedirect(java.lang.String location) | 重新定向客户端请求 |
PrintWriter对象输出在内置对象out之前,所以总是先打印response获取的这个输出流对象,除非out用flush方法。
<%@ page language="java" import="java.util.*,java.io.*" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<%
response.setContentType("text/html;charset=utf-8");//设置响应的MIME类型
out.println("<h1>response内置对象</h1>");
out.println("<hr>");
//out.flush();
PrintWriter outer=response.getWriter(); //获得response对象生成的输出流对象
outer.println("大家好,我是response对象生成的输出流outer对象");
response.sendRedirect("reg.jsp");//请求重定向
%>
8.请求重定向与请求转发的区别
请求重定向:客户端行为,respnse.sendRedirect(),从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL地址会改变。
请求转发:服务器行为,request.getRequestDispatcher().forward(req,resp);是一次请求,转发后请求对象会保存,地址栏的URL地址不会改变。
response.sendRedirect("request.jsp");
request.getRequestDispatcher("request.jsp").forward(request,response);
举个例子,去A局办事,A说不归他们管遂出门去B,此时请求也会转向B这个地址,URL地址改变,之前的请求对象也没有保存,而是一个新的请求。
request则相当于,去A局办事,A知道该B做但是他自己联系了B办好后将结果送了过来,此时URL地址不变,之前请求的对象信息也都保存了。
如上面的例子,直接重新定向的这个地址,请求信息就会消失,只是进入了这个页面。而在request的方法中请求提交的信息就会得到保存。