目录
#java #web JSP内置对象(上) 内置对象概述与out、response对象
1、Jsp内置对象
1.1 内置对象简介
1.2 补充知识
2、部分内置对象介绍
1.1 out对象
2.2 request对象
Jsp内置对象是Web容器所创建的以组对象,不需要使用new关键字就可以使用的内置对象。
Jsp有9大内置对象:out、request、response、session、application、page、pageContext、exception、config
1、Web应用程序请求与响应模式
用户发送请求(request)
服务器给用户响应(response)
2、缓冲区
缓冲区:Buffer,内存一块区域用来保存临时数据。
3、get与post
如下所示的表单标签,
提交方式有get与post。
get:以明文方式通过URL提交数据,数据在URL中可以看到。提交的数据最多不超过2KB。安全性较低但效率比post高。适合提交数据量不大,安全性不高的数据。比如:搜索、查询等功能。
post:将用户提交的信息封装在HTML HEADER内。适合提交数据量大,安全性高的用户信息,比如:注册、修改、上传等功能。
例如:
(1)、新建一个jsp页面,命名为login.jsp,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
login
login
(2)、新建一个jsp页面,名为doLogin.jsp,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
Welcome
Welcome
(3)、运行login.jsp,显示如下:
(4)、随便输入user和password,点击确定,跳转到了doLogin.jsp页面,可以看到地址栏里面的链接后面有我们之前输入的用户名和密码:
(5)、将login.jsp文件中Form标签个method属性从get改成post,重复上述步骤,可以发现地址栏里面没有了我们输入的账号密码:
out对象是JspWriter类的实例,是向客户端输出内容常用的对象。
常用方法如下:
void println() //向客户端打印字符串
void clear() //清除缓冲区的内容,如果flush之后调用会在控制台抛出异常
void clearBuffer() //清除缓冲区的内容,如果在flush之后不会抛出异常
void flush() //将缓冲区的内容输出到客户端
int getBufferSize() //返回缓冲区字节大小,如果不设缓冲区则为0
int getRemaining() //返回缓冲区还剩余的空间
boolean isAutoFlush() //返回缓冲区满时,时自动清空还是抛出异常
void close() //关闭输出流
例如:
<%
out.println("你好
");
//out.clear(); //假如这里使用了clear会怎么样?这个方法放在flush()后会怎么样?
out.flush(); //假如这个被注释了会怎样?
out.println("你好
");
%>
缓冲区大小:<%=out.getBufferSize()%>
缓冲区剩余大小:<%=out.getRemaining()%>
是否自动清空缓冲区:<%=out.isAutoFlush()%>
客户端的请求信息被封装在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 getContextPath() //返回上下文路径
例如:
(1)、新建一个jsp文件,命名为register,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
register
register
测试URL传参数
(2)、新建一个jsp文件,命名为request,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
register
Register successful!
<%
request.setCharacterEncoding("utf-8");//设置获取参数的编码,防止乱码
request.setAttribute("password", "123");
%>
<%--这里函数里的字符串参数和之前用户名的input的name一样 --%>
用户名:<%=request.getParameter("username")%>
爱好:
<%
if (request.getParameterValues("favorite") != null) {
//这里函数里的字符串参数和之前用户名的checkbox的name一样
String[] favorite = request.getParameterValues("favorite");
for (int i = 0; i < favorite.length; i++) {
out.println(favorite[i] + " ");
}
}
%>
密码:
<%
//这里的密码是上面setAttribute存入的密码
out.println(request.getAttribute("password"));
%>
请求的MIME类型:<%=request.getContentType() %>
协议类型与版本号:<%=request.getProtocol() %>
服务器主机名:<%=request.getServerName() %>
服务器端口:<%=request.getServerPort() %>
请求文件的长度:<%=request.getContentLength() %>
请求客户端的ip地址:<%=request.getRemoteAddr() %>
请求的真实路径:<%=request.getRealPath("request.jsp") %>
请求的上下文路径:<%=request.getContextPath() %>
(3)、运行register.jsp,显示如下:
(4)、随意填写user和hobby,点击submit,可以发现,跳转到了request.jsp页面,而且页面获取到了曾经输入的user和hobby:
(5)、返回register页面,点击测试URL传参数,可以发现,在a标签里的"?"后面的参数也成功的传递到了request.jsp:
注:如果url传中文参数有乱码,则需要用记事本或者编辑器打开tomcat目录下的conf目录下的server.xml文件,在如图所示位置添加Encoding="utf-8"后重启tomcat:
关于java web的更多内容,可以到https://blog.csdn.net/weixin_41475710/column/info/32531查看,会持续更新。