jsp内置对象之response、out、config、exception、pageContext。
本文是对Jsp内置对象的response、out、config、exception、pageContext知识点的详细总结。
response对象
Response内置对象和request内置对象是相应的,response内置对象用于相应客户请求,向客户端输出信息;Javax.servlet.HttpServletResponse接口
1、自动刷新应用
<%
//每隔一秒刷新一次时间:
response.setHeader("refresh", "1");
//获取当前时间:
Date mydate=new Date();
%>
<%=mydate.toLocaleString() %>
2、页面重新定向应用 客户端跳转(使用JSP写了一个登录界面)
jsp登录界面(responseScope.jsp),实现了记住密码,再次登录的时候能够直接输入账号和密码。。。。从cookie中读取,UserLogin.jsp中将用户名和密码存在了cookie中。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>内置对象pageContext</title> <script type="text/javascript"> function resetValue(){ document.getElementById("username").value=""; document.getElementById("pwd").value=""; } </script> </head> <% String userName=null; String Pwd=null; Cookie []cookies=request.getCookies(); for(int i=0;cookies!=null&& i<cookies.length;i++){ if(cookies[i].getName().equals("usernameAndpwd")){ userName= cookies[i].getValue().split("-")[0]; Pwd=cookies[i].getValue().split("-")[1]; } } if(userName==null){ userName=""; } if(Pwd==null){ Pwd=""; } %> <body> <form action="UserLogin.jsp" method="post" > <table> <tr> <td>用户名:</td> <td><input type="text" id="username"name="username" value="<%=userName %>" /></td> </tr> <tr> <td>密码:</td> <td><input type="password" id="pwd" name="pwd" value="<%=Pwd %>"/></td> </tr> <tr> <td>记住密码:</td> <td><input type="checkbox" name="remember" value="remember-me"/></td> </tr> <tr> <td><input type="submit" value="登录"></td> <td><input type="button" value="重置" onclick="resetValue()"/></td> </tr> </table> </form> </body> </html>
存储到cookie中。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="javax.servlet.http.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>UserLogin.jsp</title> </head> <body> <% String username =request.getParameter("username"); String pwd=request.getParameter("pwd"); String remember=request.getParameter("remember"); if("remember-me".equals(remember)){ Cookie usernameAndpwd=new Cookie("usernameAndpwd",username+"-"+pwd); usernameAndpwd.setMaxAge(1*60*60*24*7);//设置保存的时间周期是一周; response.addCookie(usernameAndpwd); } response.sendRedirect("responseScope02.jsp"); %> </body> </html>
3、4是对cookie和session的比较问题。
3、操作cookie应用post、get方法比较 post放在数据包里,get放在Url后面 get数据量小,不安全;
4、cookie和session的比较 cookie信息是存客户端的,session信息是存服务器的;
参考别人的一篇文章介绍session和cookie的综合知识点。
out对象
Out内置对象主要是用来向客户端输出各种类型的数据,同时还可以管理应用服务器上的输出缓冲区。所以out内置对象的方法是向客户端输出数据和管理缓冲区;底层javax.servlet.jsp.JspWriter抽象类。
这里举了两个例子:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>out</title> </head> <body> <%
//向客户端输出各种类型的数据
out.println("<h1>"); out.println("Hello Jsp & Servlet"); out.println("</h1>"); //获取缓冲区的大小管理应用服务器上的输出缓冲区:
int totalbuffer=out.getBufferSize();
int unuse=out.getRemaining();//获取未使用的缓冲区的大小 int user=totalbuffer-unuse; out.println("缓冲区总共大小为"+totalbuffer); out.println("未使用的缓冲区的大小为"+unuse); out.println("已经使用的缓冲区的大小为"+user); %> <h1> </h1> </body> </html>
config对象
Config内置对象是Jsp页面通过Jsp容器进行初始化时被传递的对象。Javax.servlet.ServletConfig。在Servlet初始化的时候,JSP引擎通过config向它传递信息。这种信息可以是属性名和属性值匹配的参数,也可以是通过ServletContext对象传递的服务器的相关信息。
这里的需要对web.xml进行配置,路径:WebContent->WEB-INF->web.xml
配置代码如下(在<web-app></web-app>之间插入下面的代码):
<servlet> <servlet-name>init</servlet-name> <jsp-file>/sysInit.jsp</jsp-file> <init-param> <param-name>jdbcName</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </init-param> <init-param> <param-name>dbUrl</param-name> <param-value>jdbc:mysql://localhost:3306/db_xxx</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>init</servlet-name> <url-pattern>/init</url-pattern> </servlet-mapping>
其中客户端请求init的时候,在<servlet-mapping></servlet-mapping>中寻找到servlet-name然后到url-pattern路径中找到init文件,之后在<servlet></servlet>之间找到servlet-name为init,下一步映射到jsp-file中找到sysInit.jsp文件。(打开sysInit.jsp文件)
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="javax.servlet.http.*" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>UserLogin.jsp</title> </head> <body> <% String jdbcName=config.getInitParameter("jdbcName"); String dbUrl=config.getInitParameter("dbUrl"); %> <h1>数据库名称: <%=jdbcName%></h1> <h1>连接池地址:<%=dbUrl %></h1> </body> </html>
打开之后我们看到输出结果。
exception对象
Exception内置对象用来处理JSP文件在执行时发生的异常,它是java.lang.Throwable类的一个对象。
我们写一个简单的例子:
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <%@page errorPage="error.jsp" %> 4 5 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 6 <html> 7 <head> 8 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 9 <title>exception</title> 10 </head> 11 <body> 12 <% 13 int a=1; 14 int b=0; 15 out.print(a/b); 16 %> 17 </body> 18 </html>
在代码中我们可以看到
<%@page errorPage="error.jsp" %>
错误信息传递到了error.jsp文件。在error.jsp文件内利用exception获取错误信息。内置对象out 输出结果。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util.*"%> <%@ page isErrorPage="true" %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>ErrorMessage.jsp</title> </head> <body> <% if(exception!=null){ out.println("程序出错,错误信息是"); out.println(exception.getMessage()); } %> </body> </html>
pageContext对象
pageContext内置对象是一个比较特殊的对象,它相当于页面中所有对象功能的集合,即使用它可以访问到本页面中所有对象。pageContext内置对象由jsp容器创建并初始化,pageContext对象提供了对JSP页面所有对象及控件的访问。
例子是让page,request,session application分别设置数值。然后pageContext取出输出。
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 7 <title>内置对象pageContext</title> 8 </head> 9 <body> 10 <% 11 //利用pagecontext设置page request session application的值。 12 pageContext.setAttribute("name0", "pageContext"); 13 request.setAttribute("name1", "requestInfo"); 14 session.setAttribute("name2","sessionInfo"); 15 application.setAttribute("name3","applicationInfo"); 16 //利用pageContext获取取值 17 out.println("pageContext: "+pageContext.getAttribute("name0")+"<br/>"); 18 out.println("request: "+pageContext.getRequest().getAttribute("name1")+"<br/>"); 19 out.println("session: "+pageContext.getSession().getAttribute("name2")+"<br/>"); 20 out.println("application: "+pageContext.getServletContext().getAttribute("name3")); 21 %> 22 </body> 23 </html>