JSP内置对象(上)

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">密码&nbsp;&nbsp;:</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]+"&nbsp;&nbsp;");
    }
}
%>
</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的方法中请求提交的信息就会得到保存。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值