一:JSP内置对象的分类
这些对象不用经过显示声明直接引用,也不用代码创建其实例,可在程序中直接使用,由Web Container为对象实例化。
二:内置对象属性保存范围
(1)page:在JSP中设置一个页的属性范围,必须通过pageContext完成,属性值只能在当前页取得。
(2)request:将属性保存在一次请求范围之内,必须使用服务器跳转
(3)session:只保留一个用户的信息,不管什么跳转都可以取得属性,与session有关的任何打开的页面都可以取得session。
(4)application:所有用户都可以取得此信息,此信息在整个服务器上被保留,所有网页窗口都可以取得数据。
注意:这四种属性范围,都是通过pageContext对象来完成的。
设置属性:
public abstract void setAttribute(String name,Object value,int scope)
取得属性:
public abstract Object getAttribute(String name)
其中,scope取值为:
public static final int APPLICATION_SCOPE
public static final int SESSION_SCOPE
public static final int REQUEST_SCOPE
public static final int PAGE_SCOPE
例子:
<%
pageContext.setAttribute("name","内置对象");
String d= (String) pageContext.getAttribute("name");
out.print(d);
%>
三:JSP内置对象的常用方法(只列了一些)
(1)request请求对象
request对象属于 Javax. ervlet ServletRequest接口的实例化对象。
【作用】 request对象不但可以用来设置和取得 request范围变量,还可以用来获得客户端请求参数、请求的来源、表头、 cookies等。
【机制】当用户请求一个JSP页面时,JSP页面所在的 Tomcat服务器将用户的请求封装在内置对象 request中。 request内置对象代表了客户端的请求信息,主要用于接收客户端通过HTTP协议传送给服务器端的数据。在客户端的请求中如果有参数,则该对象就有参数列表。
(2)response响应对象
response对象属于Javax.servlethttpHttpservletrEsponse接口的实例化对象
【作用】 response对象用来给客户端传送输出信息、设置标头等。
【机制】 response对象的生命周期由JSP容器自动控制。当服务器向客户端传送数据JSP容器就会创建 response对象,并将请求信息包装到 response对象中。它封装了JSP性的响应,然后被发送到客户端以响应客户的请求,当JSP容器处理完请求后, response
对象就会被销毁。
1)页面跳转的多种方式:
每隔1s刷新一次页面
<%
response.setHeader("refresh","1");
%>
2秒后跳转到login.jsp
<%
response.setHeader("refresh","2;URL=login.jsp");
%>
2)response.sendRedirect("地址")实现页面跳转(可以携带参数)
<%
response.sendRedirect("AA.jsp?id=1");
%>
跳转后地址为:http://localhost:8080/AA.jsp?id=1
这种是客户端跳转,页面跳转时,地址栏改变,不能保存request属性,要通过URL地址重写传递参数。
和
3)设置Cookie
Cookie是服务器端保存客户端的一组资源。例如,登录时会问用户是否记住密码,或多长时间不用登录,这些功能都是通过 Cookie来实现的。
Cookie是通过服务器端设置到客户端上去的,用response提供的方法实现:
public void addCookie(Cookie cookie)
如果要在服务器端取得 Cookie,用 request提供的方法实现:
public Cookie[] getCookies()
在使用 request对象取得全部 Cookie时,会出现 Jsessionid信息。 Jsessionid表示一个客户端在服务器端的唯一一个标识编号(自动获得 Session对象),服务器端在客户端第一次访问之后,会设置一个默认的 Cookie在客户端上: Jsessionid
默认情况下, Cookie只针对当前浏览器有效,如果需要 Cookie长留在本地计算机上,可以设置 Cookie的保存时间。通过 Cookie对象的 setMaxAge0设置最大保留时间。
Cookie是保存在客户端上的信息,安全性较差,不要把过多的隐秘信息保留在 Cookie中,这样很不安全。
(3)session会话对象
session对象属于Javax.servlet.http.Htpsessio接口的实例化对象。
【作用】 session对象用来表示用户的会话状况,一般用于保存用户的各种信息,直到生命周期(一般为900s)超时或者被人为释放掉为止。
【机制】当一个用户首次访问服务器上的一个JSP页面时,JSP引擎产生一个 session对象,同时分配一个 String类型的ID号,JP引擎同时将这个ID号发送到用户端,存放在Cookie中,这样session对象和用户之间就建立了一一对应的关系。当用户再访问连接该服务器的其他页面时,不再分配给用户新的 Session对象。直到关闭浏览器后,服务器端该用户的 Session对象才取消,与用户的对应关系也一并消失。当重新打开浏览器再连接到该服务器时,服务器会为该用户再创建一个新的 Session对象。
1) session与 Cookie比较
session和 Cookie用于跨网页共享数据。
1> session:将信息以对象形式保存于服务端,记录独有的个人信息,在不同页面中传递。 session对象随会话结束而结束
2> Cookie:将信息以字符串形式保存于客户端,供浏览器与web服务器互通数据用的文本文件,当IE执行时,会在计算机中产生一个 Cookie。 Cookie可以长期保存在客户端。
session比 Cookie更安全,但更占用资源。重要的信息使用 session保存,不重要的用信息通常用 Cookie保存
【开发原则】尽量少向 session中保存信息, session使用了 Cookie的机制,如果 Cookie禁用,则 session也无法使用。
(4)application应用程序对象
application对象属于Javax.servlet.jsp.ServletContext接口的实例化对象。
【作用】application对象用户取得和设置Servlet的相关信息,实现了用户间数据的共享,可存放全局变量
【机制】开了于服务器的启动,知道服务器关闭,这样在用户的前后连接或不同用户之间的连接中,可以对此对象的同一属性进行操作。
(5)其他对象
1>pageContext页面上下文对象
<%
request.setAttribute("name","漫步云端");
%>
<%=pageContext.getRequest().getAttribute("name")%>
四:小例子
login.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
login
<%--正则表达式将字符串前后空格用空字符串替代--%>
<%--/.../g:全文匹配;\s*:0个或多个空格;^:字符串必须以后面的规则开头;|:或--%>
<%--(^\s*):0个或多个空格开头;$:字符串必须以前面的规则结尾;(\s*$):0个或多个空格结尾--%>
<%
if (request.getParameter("err")!=null){
//getParameter获得客户端传送给服务器端传送的参数值;获取表单提交的信息,以字符串形式返回客户端传来的某一个请求参数的值
String err = request.getParameter("err");
if (err.equals("-1")){
out.print("账号或密码错误");
}
else {
out.print("其他问题");
}
}
%>
在这个页面我遇到几个问题
第一个就是window我把它写为大写的W就没效果了
第二个就是正则表达式replace(/(^\s*)|(\s*$)/g,""),作用是将字符串前后空格用空字符串替代,当我输入是空或者空格都会提示
第三个就是在form写原生的botton控件,会默认是submit类型,会提交
loginSubmit.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
login处理
<%
String userName = request.getParameter("userName");
String userPassword = request.getParameter("userPassword");
if (userName.equals("123456")&&userPassword.equals("123456")){
// 将类型为o(Object o,右边的)存入session对象的name(String name,左边的)属性中
session.setAttribute("userName",userName);
session.setAttribute("userPassword",userPassword);
// 页面重定向跳转,跳转后地址改变,属于客户端跳转
response.sendRedirect("index.jsp");
}
else {
// 因为是重定向跳转,不能保存request属性,所以重写传递参数err=-1
response.sendRedirect("login.jsp?err=-1");
}
%>
index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
主页
<%
if (session.getAttribute("userName")!=null){
%>
当前用户:<%=session.getAttribute("userName")%>
<%
}else{
%>
当前用户:游客
<%
}
%>
如果有值就是哪个值,没有就是游客,不过前面因为写了判断,所以账号密码错误也不会跳到游客,可以直接进这个页面
在这个例子中:
getParameter 是用来接受用post个get方法传递过来的参数的
参考https://terryjs.iteye.com/blog/1317610