#java #web JSP内置对象(上)—— 内置对象概述与out、response对象
目录
#java #web JSP内置对象(上) 内置对象概述与out、response对象
1、Jsp内置对象
1.1 内置对象简介
Jsp内置对象是Web容器所创建的以组对象,不需要使用new关键字就可以使用的内置对象。
Jsp有9大内置对象:out、request、response、session、application、page、pageContext、exception、config
1.2 补充知识
1、Web应用程序请求与响应模式
用户发送请求(request)
服务器给用户响应(response)
2、缓冲区
缓冲区:Buffer,内存一块区域用来保存临时数据。
3、get与post
如下所示的表单标签,
<form name="regForm" action="动作" method="提交方式"></form>
提交方式有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"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>login</title>
</head>
<body>
<h1>login</h1>
<form name="regForm" action="doLogin.jsp" method="get">
user:<input type="text" name="user"><br />
password:<input type="password" name="password"><br />
<input type="submit">
</form>
</body>
</html>
(2)、新建一个jsp页面,名为doLogin.jsp,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Welcome</title>
</head>
<body>
<h1>Welcome</h1>
</body>
</html>
(3)、运行login.jsp,显示如下:
(4)、随便输入user和password,点击确定,跳转到了doLogin.jsp页面,可以看到地址栏里面的链接后面有我们之前输入的用户名和密码:
(5)、将login.jsp文件中Form标签个method属性从get改成post,重复上述步骤,可以发现地址栏里面没有了我们输入的账号密码:
2、部分内置对象介绍
1.1 out对象
out对象是JspWriter类的实例,是向客户端输出内容常用的对象。
常用方法如下:
void println() //向客户端打印字符串
void clear() //清除缓冲区的内容,如果flush之后调用会在控制台抛出异常
void clearBuffer() //清除缓冲区的内容,如果在flush之后不会抛出异常
void flush() //将缓冲区的内容输出到客户端
int getBufferSize() //返回缓冲区字节大小,如果不设缓冲区则为0
int getRemaining() //返回缓冲区还剩余的空间
boolean isAutoFlush() //返回缓冲区满时,时自动清空还是抛出异常
void close() //关闭输出流
例如:
<body>
<%
out.println("<h1>你好</h1>");
//out.clear(); //假如这里使用了clear会怎么样?这个方法放在flush()后会怎么样?
out.flush(); //假如这个被注释了会怎样?
out.println("<h2>你好</h2>");
%>
缓冲区大小:<%=out.getBufferSize()%><br />
缓冲区剩余大小:<%=out.getRemaining()%><br />
是否自动清空缓冲区:<%=out.isAutoFlush()%>
</body>
2.2 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 getContextPath() //返回上下文路径
例如:
(1)、新建一个jsp文件,命名为register,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>register</title>
</head>
<body>
<h1>register</h1>
<form name="regForm" action="request.jsp" method="post">
<table>
<tr>
<td>user:</td>
<td><input type="text" name="username"></td>
</tr>
<tr>
<td>hobby:</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 colspam="2"><input type="submit" value="submit"></td>
</tr>
</table>
</form>
<a href="request.jsp?username=list">测试URL传参数</a>
</body>
</html>
(2)、新建一个jsp文件,命名为request,内容如下:
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>register</title>
</head>
<body>
<h1>Register successful!</h1>
<%
request.setCharacterEncoding("utf-8");//设置获取参数的编码,防止乱码
request.setAttribute("password", "123");
%>
<%--这里函数里的字符串参数和之前用户名的input的name一样 --%>
用户名:<%=request.getParameter("username")%><br />
爱好:
<%
if (request.getParameterValues("favorite") != null) {
//这里函数里的字符串参数和之前用户名的checkbox的name一样
String[] favorite = request.getParameterValues("favorite");
for (int i = 0; i < favorite.length; i++) {
out.println(favorite[i] + " ");
}
}
%><br />
密码:
<%
//这里的密码是上面setAttribute存入的密码
out.println(request.getAttribute("password"));
%><br />
请求的MIME类型:<%=request.getContentType() %><br />
协议类型与版本号:<%=request.getProtocol() %><br />
服务器主机名:<%=request.getServerName() %><br />
服务器端口:<%=request.getServerPort() %><br />
请求文件的长度:<%=request.getContentLength() %><br />
请求客户端的ip地址:<%=request.getRemoteAddr() %><br />
请求的真实路径:<%=request.getRealPath("request.jsp") %><br />
请求的上下文路径:<%=request.getContextPath() %><br />
</body>
</html>
(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.youkuaiyun.com/weixin_41475710/column/info/32531查看,会持续更新。