Java遇见HTML——JSP篇之JSP内置对象(上)

时间:2024-07-15 16:36:20

一、JSP内置对象简介

1.1、内置对象简介

JSP内置对象是WEB容器中创建的一组对象,可以直接使用不需要new,如截图中的out 对象。

Java遇见HTML——JSP篇之JSP内置对象(上)

JSP有九大内置对象:

  • 五大常用对象: out、request、response、session、application
  • 其它四个不常用对象:page、pageContext、exception、config

Java遇见HTML——JSP篇之JSP内置对象(上)

二、web程序的请求与响应模式

用户发送请求(request),服务器给用户响应(response)

Java遇见HTML——JSP篇之JSP内置对象(上)

例子:

Java遇见HTML——JSP篇之JSP内置对象(上)

三、out对象

3.1、什么是缓冲区?

缓冲区:Buffer,所谓缓冲区就是内存的一块区域用来保存临时数据。

比如:IO输出最原始的就是一个字节一个字节输出,就像一粒一粒吃一样,效率太差。缓冲区可以先将多个字节读出来,再一次性的输出,提高效率。

Java遇见HTML——JSP篇之JSP内置对象(上)

3.2、out对象

out对象是JspWrite类的实例,是向客户端(浏览器)输出内容常用的对象。

常用方法如下:

Java遇见HTML——JSP篇之JSP内置对象(上)

具体例子:

Java遇见HTML——JSP篇之JSP内置对象(上)

运行结果:

Java遇见HTML——JSP篇之JSP内置对象(上)  

注:

  • out.flush()

Java遇见HTML——JSP篇之JSP内置对象(上)

运行结果:

Java遇见HTML——JSP篇之JSP内置对象(上)

此时缓冲区的剩余大小变多了,主要是因为使用了out.flush,缓冲区把前面flush之后的信息给清空了,所以缓冲区就变大了。

out.flush();之后会释放缓冲区大小。

  • out.clear()

如果flush之后添加了clear方法:

Java遇见HTML——JSP篇之JSP内置对象(上)

运行结果:

Java遇见HTML——JSP篇之JSP内置对象(上)

并且后台抛出了异常。在执行flush方法之后再执行clear方法,会抛出异常。则clear方法之后的程序就不会继续执行了。

  • out.clearBuffer()

如果flush方法之后再调用clearBuffer(),是不会抛出异常的。

四、get与post提交方式的区别

表单常用的提交方式:get 与 post

Java遇见HTML——JSP篇之JSP内置对象(上)

比如:

Java遇见HTML——JSP篇之JSP内置对象(上)

get方式

Java遇见HTML——JSP篇之JSP内置对象(上)

post方式:

Java遇见HTML——JSP篇之JSP内置对象(上)

五、request对象

Java遇见HTML——JSP篇之JSP内置对象(上)

Java遇见HTML——JSP篇之JSP内置对象(上)

其中:

String getParameter(String name)//获取单个参数值
String[] getParameterValues(String name)//获取多个参数值(获得提交参数具有相同名称的集合),如获取checkbox的值

比如这个注册表单

Java遇见HTML——JSP篇之JSP内置对象(上)

数据提交到request.jsp页面:

Java遇见HTML——JSP篇之JSP内置对象(上)

运行结果:

Java遇见HTML——JSP篇之JSP内置对象(上)

解决中文乱码问题:

Java遇见HTML——JSP篇之JSP内置对象(上)

request.setCharacterEncoding(“utf-8”);//解决post请求传递中文参数的乱码问题,设置的编码要与发送请求的页面的编码设置的一致。但是无法解决URL链接传递中文参数的乱码问题。

Java遇见HTML——JSP篇之JSP内置对象(上)

通过路径URL传参(get方式)出现中文乱码问题。

此时解决get方式传递中文参数需要在tomcat的server.xml中,在connector标签添加属性URIEncoding="utf-8"

Java遇见HTML——JSP篇之JSP内置对象(上)

setAttribute()设置属性时是以键值对的形式

getAttribute()获取属性只需要输入键的值,就可以获得属性的值。

Java遇见HTML——JSP篇之JSP内置对象(上)

请求体的MIME类型:<%=request.getContentType() %><br>
协议类型及版本号:<%=request.getProtocol() %><br>
服务器主机名:<%=request.getServerName() %><br>
服务器端口号:<%=request.getServerPort() %><br>
请求文件的长度:<%=request.getContentLength() %><br><!--单位是字节-->
请求客户端的IP地址:<%=request.getRemoteAddr() %><br><!--//只能获取静态的IP地址,动态的话获取不到-->
请求的真实路径:<%=request.getRealPath("request.jsp") %><br>
请求的上下文路径:<%=request.getContextPath() %><br><!--是项目的虚拟路径-->

运行结果:

Java遇见HTML——JSP篇之JSP内置对象(上)

六、response对象

Java遇见HTML——JSP篇之JSP内置对象(上)

实例:

Java遇见HTML——JSP篇之JSP内置对象(上)

运行结果:

Java遇见HTML——JSP篇之JSP内置对象(上)

response对象获得的是PrintWriter对象,输出在内置对象out 前面。(printwriter输出流对象提前于out对象输出)

Java遇见HTML——JSP篇之JSP内置对象(上)

运行结果:

Java遇见HTML——JSP篇之JSP内置对象(上)

说明:out对象的输出晚于PrintWrite对象的输出,可以利用out.flush() 将printWrite对象的输出靠后。(利用flush()清空缓存区强制输出。)

response 的sendRedirect("..jsp")//请求重定向(相当于让客户端发一个新的请求,让这个请求定位到指定页面)

七、请求重定向与请求转发的区别

Java遇见HTML——JSP篇之JSP内置对象(上)

举个生活中的例子:

Java遇见HTML——JSP篇之JSP内置对象(上)

1请求重定向是客户器端行为而请求转发是服务器端行为
2请求重定向相当于两次请求,地址栏地址会发生变化 
3重定向是response对象的方法而请求转发是request对象的方法 
4请求重定向不会保存原有的request对象而请求转发会保存原有的request对象