JSP内置对象
定义 : 不需要声明和创建,就可以在JSP脚本语言中使用的成员变量
1. jsp内置对象out:
类型 : out.javax.servlet.jsp.JspWriter
主要作用 : 向客户端输出信息
常用方法: print\println\write
PrintWriter:调用一个输出对象
<%
out.println("hello");
%>
println : 在jsp中不具有换行功能 , 换行需要用到<br>
out输出具有缓冲功能 , PrintWriter没有缓冲功能 , 所以PrintWriter会永远优先输出.
运行结果 :
2. jsp内置对象request:
类型 : javax.servlet.http.HttpServletRequest
主要作用 : 来自客户端向服务器端发送请求 , 所有的请求都会封装在request对象中
作用域(作用范围) : 就是一次请求
如果用超链接请求,不可以获取信息,视为第二次请求:
test01.jsp:
<%
request.setAttribute("username", " zzb");
%>
<a href="other.jsp">超链接</a>
test02.jsp:
username:<%=request.getAttribute("username".toString())%>
运行会报空指针异常错误 / 值为空:
**常用方法:**
**request.getParameter()获取表单提交的数据
request.getParameterValues()获取表单提交的一组数据(复选框、下拉列表)
request.getParameterDispatcher().forward(request,response)完成请求转发
request.setAttribute(String name, String value);
request.getAttribute(String name);
request.setCharacterEncoding()完成请求编码的设置**
request.getParameter()获取表单提交的数据:
<form action="#" method="post">
name:<input type ="text" name ="name"><br>
age:<input type="text" name="age"><br>
<input type="submit" value="submit">
</form>
<%
out.println("name : "+request.getParameter("name")+"<br>");
out.println("age : "+request.getParameter("age")+"<br>");
%>
表单中获取数据:
输入前:
输入后:
request.getParameterValues()获取表单提交的一组数据(复选框、下拉列表):
hobby.html:
<form action="hobby.jsp" method="post">
选择爱好:<input type="checkbox" name="hobby" value="reading">阅读
选择爱好:<input type="checkbox" name="hobby" value="football">足球
选择爱好:<input type="checkbox" name="hobby" value="music">音乐
选择爱好:<input type="checkbox" name="hobby" value="travel">旅游<br>
<input type="submit" value="提交爱好">
</form>
hobby.jsp:
<%
String[] hobby = request.getParameterValues("hobby");
for(int i = 0;i<hobby.length;i++)
{
if(hobby[i].equals("reading")){
out.println("阅读");
}
if(hobby[i].equals("football")){
out.println("足球");
}
if(hobby[i].equals("music")){
out.println("音乐");
}
if(hobby[i].equals("travel")){
out.println("旅游");
}
}
%>
运行结果:
request请求转发:
<%
request.setAttribute("username", " zzb");
request.getRequestDispatcher("other.jsp").forward(request, response);
%>
运行结果:
会直接跳转至下一个页面,并获取数据 , 原因 :请求转发属于服务器内部跳转 , 没有产生心得request请求 , 生命周期没有结束 , 可以获取请求
page也可以直接跳转:
<%
request.setAttribute("username", " zzb");
%>
<jsp:forward page="other.jsp"> </jsp:forward>
3.jsp内置对象response:
类型 : javax.servlet.http.HttpServletResponse
主要作用 : 可以通过response对象完成服务器响应客户端
response.getWriter().print()\write()
response.sendRedirect():完成页面跳转 , 属于重定向
重定向 : 相当于重新向服务器发送一次请求,可以跳转访问新的外部网站,可以访问服务器外的网站(baidu.com)
1.forward与request.getRequestDispatcher()属于跳转 , 请求转发 , 没有产生新的request对象 , 所以存储在request对象中的变量仍然可以获取到
2.sendRedirect()属于重新定向 , 在新的页面会产生新的request对象 , 因此 , 存储在原request中的变量就不存在了 , 也就无法获取
3.forward和request.getRequestDispatcher()无法跳转到系统外部资源 , 而senRedirect可以跳转到外部资源
4.forward和request.getRequestDispatcher()完成跳转时 , 地址栏url没有发生变化 , 而 sendRedirect地址栏url发生了变化
4.jsp内置对象session(会话):
客户端与服务器端之间可能需要在一段时间内完成多次的交互过程 , 当客户端第一次访问/链接服务器资源时 , 就会为该客户端创建session , 每一个客户端独享一个session 对象
类型 : javax.servlet.http.HttpSession
作用域 : 一次会话 , 会话没有结束 , session生命周期没有结束就不会产生新的session
session失效 : ① 服务器服务停止② session会话超时
默认30分钟,可以在中进行修改③ 手动来让session失效(session.invalidate()让session方法失效)
获取不到key1的值value1,因为session已经失效了:
常用方法:
1.session.getId():
只要会话不终止 , id是不会发生变化的 , 没有产生新的session对象
session.isNew():
产生新的session
session.setAttribute()
session.getAttribute()
<%
session.setAttribute("name","zzb");
session.setAttribute("age","21");
session.setAttribute("sex","male");
out.print("name :"+session.getAttribute("name"));
out.print("age :"+session.getAttribute("age"));
out.print("sex :"+session.getAttribute("sex"));
%>
运行结果 :
session.removeAttribute() :
移除掉数据 , remover不会出现空指针异常 , 可以查看 :
<%
session.setAttribute("name","zzb");
session.setAttribute("age","21");
session.setAttribute("sex","male");
session.removeAttribute("name");
out.print("name :"+session.getAttribute("name"));
out.print("age :"+session.getAttribute("age"));
out.print("sex :"+session.getAttribute("sex"));
%>
运行结果:
5.jsp内置对象application :
类型 : javax.servlet.ServletContext 属于服务器全局对象
三个对象共享一个application , 一个修改内部也会改变
<%
Integer count = (Integer)application.getAttribute("count");
if(count == null)
{
count = new Integer(0);
application.setAttribute("count", ++count);
}
%>
你是第<%=count %>位访客!
运行结果: