摘要
讲解了JSP内置的九大对象。
JSP内置对象
- out - 管客户端的输出
- request - 管客户端的请求
- response - 向·客户端发出响应
- session - 保存BS的会话信息
- application - 环境
- exception - 异常信息
- page - 相当于Java的this
- pageContext - JSP的上下文
- config - JSP的ServletConfig
out 对象
request 对象
客户端的请求信息
- 传值和不传值
- 源码:
- 文件名:
requestTest.jsp
<%@ page language="java" pageEncoding="gb2312"%>
<html>
<body>
<!-- 文件名:requestTest.jsp -->
<!-- 获取客户端的基本信息 -->
<% // javax.servlet.http.HttpServletRequest %>
客户端的提交方式: <%=request.getMethod() %><br>
客户端请求的URL地址: <%=request.getRequestURI() %><br>
客户端与服务器通信的协议名称: <%=request.getProtocol() %><br>
客户端请求服务器文件的路径: <%=request.getServletPath() %><br>
URL的查询部分: <%=request.getQueryString() %><br>
服务器的名称: <%=request.getServerName() %><br>
服务器口号: <%=request.getServerPort() %><br>
远程客户端的IP地址: <%=request.getRemoteAddr()%><br>
<% //以上获得值全都是String类型 ,<%= 是JSP表达式 %>
<% //String getParameter(String name)获得客户端传给服务器的name参数的值 %>
<% //String[] getParameterValues(String name),以数组字符串形式返回指定参数的值 %>
<%=request.getParameter(a) %><br>
<%=request.getParameterValues(b) %><br>
<%! //JSP声明
String a;
String b;
%>
</body>
</html>
response 对象
- 文件1:
requestTest1.jsp
<% //文件名:requestTest1.jsp %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<body>
<% //action提交submit后的跳转页面 %>
<form action="responseTest2.jsp" method="post" >
<% //输入学生姓名:<input type="text" name="stuname" > %>
<input type="submit" value="提交">
</form>
</body>
</html>
- 文件2:
requestTest2.jsp
<% //文件名:requestTest2.jsp %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<body>
<% // javax.servlet.http.HttpServletResponse %>
<% //利用response对象进行重定向 %>
<% //response内置对象,redirect重定向
//response.sendRedirect("responseTesdt3.jsp");//相对路径,
//也可是针对于服务器的绝对路径"/MyWeb/7_/responseTest3.jsp"
//还可以定向到外部资源,外链如:"https://www.baidu.com",自然是绝对路径了
%>
<% //JSP动作,作用:页面跳转,
//1.只包含文件的输出内容,相同变量不会报错;2.自动检查被包含文件的变化
%>
<% //<jsp:forward page="responseTest3.jsp"></jsp:forward> %>
<%
response.sendError(404);
//还可以用来发送HTTP状态码的出错信息
//404(资源不存在),403(资源不可用),401,400(语法错误),500(未知错误)
%>
</body>
</html>
- 文件3:
requestTest3.jsp
<% //文件名:requestTest3.jsp %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<body>
欢迎来到学生管理系统!!!<br>
<%
//方法一:
//String stuname = request.getParameter("stuname");
//stuname = new String(stuname.getBytes("ISO-8859-1"),"gb2312");
//out.println("输入学生姓名是:"+stuname+"<br>");
//方法二:
//要求:1.取值之前设置request的编码;2.表单form采用的method.post方法提交
request.setCharacterEncoding("gb2312");
out.println("输入学生姓名是:"+request.getParameter("stuname")+"<br>");
%>
</body>
</html>
重定向
- 采用JSP内置对象,网址变换,产生新的请求
- 采用JSP动作,服务器内部
中文乱码
- 两种解决方案:
变量共享
- JSP:forward 动作可以变量共享
- response内置对象不可以变量共享
能否访问外部资源
- JSP:forward 动作不可以访问外部资源
- response内置对象可以
HTTP状态码
- response内置对象可以向客户端发送出错信息
response.sendError(404);
HTTP头
- 可以利用 response 的 setHeader() 来设置HTTP头部信息
- 实验效果:你会每个五秒听到网页刷新的声音
- 文件名:
response_setHeader.jsp
<% //文件名:response_setHeader.jsp %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<html>
<body>
<%
//全都表示客户端缓存中不保存页面的拷贝
response.setHeader("Pragma","No-cache");
response.setHeader("Cache-Control","no-cache");
response.setDateHeader("Expires",0);
//每隔5秒钟定期刷新一次
response.setHeader("Refresh","5");
%>
</body>
</html>
Cookie操作
- 传值方式:URL传值、表单form、cookie
- 文件名:
cookieP1.jsp
<% //文件名:cookieP1.jsp %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
//定义一个变量:
String str = "15";
int number = Integer.parseInt(str);
%>
该数字的平方为:<%=number*number %><HR>
<%
//将str存入Cookie
Cookie cookie = new Cookie("number",str);
//设置Cookie的存活期为600秒
//这个时间相对于谁来说的?过期咋整?
cookie.setMaxAge(600);
//将Cookie保存于客户端
response.addCookie(cookie);
%>
<a href="cookieP2.jsp">到达p2</a>
- 文件名:
cookieP2.jsp
<% //文件名:cookieP2.jsp %>
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%>
<%
//从Cookie获得number
String str = null;
Cookie[] cookies = request.getCookies();
for(int i=0;i<cookies.length;i++){
if(cookies[i].getName().equals("number")){
str = cookies[i].getValue();
break;
}
}
int number = Integer.parseInt(str);
%>
该数字的立方为:<%=number*number*number %><HR>
- Cookie的存放路径: