JSP内置对象

  • JSP内置对象的分类
  • 内置对象属性保存范围
  • JSP内置对象的常用方法(只列了一些)
  • 小例子

 

 

一:JSP内置对象的分类

这些对象不用经过显示声明直接引用,也不用代码创建其实例,可在程序中直接使用,由Web Container为对象实例化。

JSP内置对象_第1张图片

 

 

 

 

 

二:内置对象属性保存范围

(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地址重写传递参数。

相比,后者是服务器跳转,地址栏不改变,无条件跳转,之后的代码不执行,所以在跳转之前释放全部资源 request设置的属性能保留在下一个页面,通过传递参数

 

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个或多个空格结尾--%>
    



账号: 密码: <%--当用户鼠标经过按钮执行Javascript代码--%>
<% 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

你可能感兴趣的:(jsp学习)