java-jsp内置对象

JSP中预先定义了9个这样的对象,request,response,session,application,out,pageContext,config,page和exception

request对象

request对象是javax.servlet.http.HttpServletRequst类型的对象,该对象代表了客户端的请求信息,主要用于接收通过HTTP协议传送到服务端的数据(包括头信息,系统信息,请求方式以及请求参数等)request对象的作用域为一次请求。

获取请求参数中传递的值
可以通过

String id = request.getParameter("id");

获取参数的值。如果不存在此参数,那么该方法返回null。
使用request对象获取请求参数值
在web中创建index.jsp页面,在其中加入一个超链接按钮用来请求show.jsp页面,并在请求后增加一个参数id

  <body>
    <a href = "show.jsp?id=001">获取请求参数的值</a>
  </body>

新建show.jsp页面,其中通过getParameter()方法来获取id参数和name的值,并将其输出到页面中

  <body>
    id参数的值为:<%=request.getParameter("id") %><br>
    name参数的值为:<%=request.getParameter("name") %>
  </body>

结果
这里写图片描述
这里写图片描述

获取Form表单信息
对于文本元素,单选按钮,下拉列表框都可以使用getParameter()方法来获取其具体的值
但对于复选框和多选列表别选定的内容就要使用getParameterValue()方法来获取,该方法会返回一个字符串数组,通过循环遍历这个数组就可以得到用户选定的所有内容。

创建index.jsp页面,在该页面创建一个form表单,在表单中分别加入文本框,下拉列表框,单选按钮和复选框

<body>
    <form action="show.jsp"method="post">
        <ul style="list-style:none;line-height:30px">
        <li>输入用户姓名:<input type="text"name="name"/><br></li>
        <li>选择性别:
            <input name = "sex"type="radio"value="男"/>男
            <input name = "sex"type="radio"value="女"/>女
        </li>
        <li>
            选择密码提示问题:
            <select name = "question">
            <option value = "母亲生日">母亲生日</option>
            <option value ="宠物名称">宠物名称</option>
            <option value = "电脑配置">电脑配置</option>
            </select>
        </li>
        <li>请输入问题答案:<input type ="text" name = "key"/></li>
        <li>
            请选择个人爱好:
            <div style="width:400px">
                <input name="like" type="checkbox"value="唱歌跳舞"/>唱歌跳舞
                <input name="like"type="checkbox"value="上午冲浪"/>上网冲浪
                <input name="like"type="checkbox"value="户外登山"/>户外登山
                <input name="like"type="checkbox"value="体育运动"/>体育运动<br/>
                <input name="like"type="checkbox"value="读书看报"/>读书看报
                <input name="like"type="checkbox"value="欣赏电影"/>欣赏电影
            </div>
        </li>
        <li><input type="submit"value="提交"/></li>
    </ul>

    </form>
  </body>

编写show.jsp页面,该页面是用来处理请求的,在其中分别使用getParameter()方法与getParameterValues()方法将用户提交的表单信息显示在页面中

<body>
    <ul style="list-style:none;line-height:30px">
        <li>输入用户名:<%=new String(request.getParameter("name")) %></li>
        <li>选择性别:<%=new String(request.getParameter("sex")) %></li>
        <li>选择密码提示问题:<%=new String(request.getParameter("key")) %></li>
        <li>请输入问题答案:<%=new String(request.getParameter("key")) %></li>
        <li>请选择个人爱好:
            <%
            String[] like = request.getParameterValues("like");
            for(int i = 0;i<like.length;i++){ 
            %>
            <%=new String(like[i])+"&nbsp;&nbsp;" %>
            <%
            }
             %>
        </li>
    </ul>
  </body>

结果
这里写图片描述

获取请求客户端信息
在request对象中通过相应的方法还可以获取客户端的相关信息,如HTTP报头信息,客户信息提交方式,客户端主机IP地址,端口号等
这里写图片描述

  <body>
    <ul style="line-height:24px">
        <li>客户使用协议:<%=request.getProtocol() %>
        <li>客户端发送请求的方法:<%=request.getMethod() %>
    </ul>
  </body>

结果
这里写图片描述

在作用域中管理属性
通过使用setAttribute()方法可以在request对象的属性列表中添加一个属性,然后在request对象的作用域范围内通过getAttribute()方法将其属性取出,此外,还可使用removeAttribute()方法将一个属性删除掉。

//首先将date属性加入到request属性列表中,然后输出这个属性的值,接下来使用removeAttribute()方法将date属性删除,最后再次输出date属性
<%
    request.setAttribute("date",new Date());//添加一个属性
 %>
 <body>
        <ul style="line-height:24px;">
            <li>获取date属性:<%=request.getAttribute("date") %></li>
            <!-- 降属性删除 -->
            <%request.removeAttribute("date"); %>
            <li>删除后再获取date属性<%=request.getAttribute("date") %></li>
        </ul>
  </body>

这里写图片描述
request对象作用域为一次请求,超出作用域后属性列表中的属性即会失效。

cookie管理
cookie是小段的文本信息,通过使用cookie可以标识用户身份,记录用户名及密码,跟踪重复用户。
cookie在服务器端生成发送给浏览器,浏览器将cookie的key/value保存到某个指定的目录中,服务器的名称和值可以由服务器端定义。

通过cookie的getCookies()的方法可以获取到所有的cookie对象集合,然后通过cookie对象的getName()方法获取到指定名称的cookie,再通过getValue()方法即可获取到cookie对象的值。另外,将一个cookie对象发送到客户端使用了response对象的addCookie()方法。

创建index.jsp页面文件,在其中创建form表单,用于让用户输入信息,并且从request对象中获取cookie,判断是否含有此服务器发送过的cookie。如果没有,则说明该用户第一次访问本站,如果有,则直接将值读取出来,并赋给对应的表单。

<%
    String welcome = "第一次访问";
    String[] info = new String[]{"","",""};
    Cookie[] cook = request.getCookies();
    if(cook!=null){
        for(int i = 0;i < cook.length;i++){
            if(cook[i].getName().equals("mrCoolInfo")){
                info = cook[i].getValue().split("#");
                welcome=",欢饮回来!";
            }
        }
    }
    %>
    <%=info[0]+welcome %>
        <form action="show.jsp"method="post">
        <ul style = "line-height:23">
            <li>姓&nbsp;&nbsp;&nbsp;名:<input name="name"type ="text"value="<%=info[0] %>"></li>
            <li>出生日期:<input name ="birthday"type="text"value = "<%=info[1] %>"></li>
            <li>邮箱地址:<input name="main"type="text"value="<%=info[2] %>"></li>
            <li><input type="submit" value="提交"></li>
        </ul>
        </form>

创建show.jsp页面文件,在该页面中通过request对象将用户输入的表单信息提取出来,创建一个cookie对象,并通过response对象的addCookie()方法将其发送到客户端。

 <%
        String name = request.getParameter("name");
        String birthday = request.getParameter("birthday");
        String mail = request.getParameter("mail");
        Cookie myCook = new Cookie("mrCookInfo",name+"#"+birthday+"#"+mail);
        myCook.setMaxAge(60*60*24*365); //设置cookie有效期
        response.addCookie(myCook);
     %>
     表单提交成功
     <ul style ="line-height:24px">
        <li>姓名:<%=name %>
        <li>出生日期:<%=birthday %>
        <li>电子邮箱:<%=mail %>
        <li><a href="index.jsp">返回</a>
     </li>

这里写图片描述

这里写图片描述

response对象

response代表的是对客户端的响应,主要是将JSP容器处理过的对象传回到客户端。response对象也是有作用域,它只是JSP页面内有效。response对象的常用方法:
这里写图片描述

重定向网页
使用sendRedirect()方法,将响应发送到另一个指定的位置进行处理,进行重定向操作后,request中的属性全部失效,并且进入一个新的request对象的作用域。

response.sendRedirect("www.mingribook.com")

处理HTTP文件头
setHeader()方法通过两个参数——头名称与参数值的方式来设置HTTP文件头
例如:设置网页每5秒自动刷新一次

response.setHeader("refresh","5");

例如:设置2秒钟后自动跳转至指定页面

response.setHeader("refresh","2;URL=welcome.jsp")

例如:设置响应类型

response.setContentType("text/html");

设置输出缓冲
通常,服务器要输出到客户端的内容不会直接写到客户端,而是先写到一个输出缓冲区;只有在以下3种情况下,才会把缓冲区的内容写入缓冲区
JSP页面的输出信息已经全部写入缓冲区
缓冲区已满在JSP页面中调用flushbuffer()方法或out对象的flush()方法
setBufferSize()方法可以设置缓冲区大小。例如设置缓冲区大小为0KB,

response.setBufferSize(0);

使用isCommitted()方法来检测服务器端是否已经把数据写入到了客户端。

session对象

session对象是由服务器自动创建的与用户请求相关的对象。session保存该用户信息,跟踪用户的操作状态,内部使用Map类来保存数据,因此保存数据的格式为key/value
这里写图片描述
创建及获取session信息
session是与请求有关的会话对象,是java.servlet.http.HttpSession对象。
setAttribute()方法可以实现将信息保存在session范围内,语法格式
setAttribute(String key,Object obj)
key:保存在session范围内的关键字
obj:保存在session范围内的对象
getAttribute()方法可以实现获取保存在session范围内的信息
getAttribute(String key)
key:指定保存在session范围内的关键字

在index.jsp页面中,实现将文字信息保存在session范围内

 <%
        String sessionMessage = "session练习";
        session.setAttribute("message", sessionMessage);
        out.print("保存在session范围内的对象为:"+sessionMessage);     
     %>

在default.jsp页面中,获取保存在 session范围内的信息并在页面中显示

<body>
    <%
        String message=(String)session.getAttribute("message");
        out.print("保存在session范围内的值为"+message);
     %>
  </body>

这里写图片描述

从会话中移除指定的绑定对象

removeAttribute(String key)
key:保存在session范围内的关键字

removeAttribute(“message”)

销毁session
当调用session对象的invalidate()方法后,表示session对象被删除,即不可以再使用session对象
session.invalidate();
调用后,再调用session对象的任何其他方法时都会报出Session already invalidated异常。

会话超时的管理
在应用session对象时应该注意session的生命周期,一般在20-30分钟。
在session对象中提供了设置会话生命周期的方法
getLastAccessedTime():返回客户端最后一次与会话相关联的请求时间
getMaxInactiveInterval():以秒为单位返回一个会话内两个请求最大时间间隔
setMaxInactiveInterval():以秒为单位设置session的有效时间

例如

session.setMaxInactiveInterval(10000);

session对象的应用
在index.jsp页面中,提供了用户输入用户名文本框,在session.jsp页面中,将用户输入的用户名保存在session.jsp页面中,将用户输入的用户名保存在session对象中,用户在该页面中可以添加最喜欢去的地方;在result.jsp页面中,将用户输入的用户名与最想去的地方在页面中显示。

(1)index.jsp

<body>
    <form id = "form1"name="form1"method="post"action="session.jsp">
        <div align="center">
            <table width="23%"border="0">
                <tr>
                    <td width="36%"><div align="center">您的名字</div></td>
                    <td width="64%">
                        <label>
                            <div align="center">
                                <input type = "text" name ="name"/>
                            </div>
                        </label>
                    </td>
                </tr>
                <tr>
                    <td colspan="2">
                        <label>
                            <div align="center">
                                <input type="submit"name="Submit"value="提交"/>
                            </div>
                        </label>
                        </td>
                </tr>
            </table>
        </div>
    </form>
  </body>

(2)在session.jsp页面中,将用户在index.jsp页面中输入的用户名保存在session对象中,并为用户提供用于添加最想去的地址的文本框

 <body>
    <%
        String name = request.getParameter("name"); //获取用户填写的用户名
        session.setAttribute("name",name);  //将用户名保存在session对象中
     %>
     <div align="center">
        <form id="form1"name="form1"method="post"action="result.jsp">
            <table width="28%"border="0">
                <tr>
                    <td>您的名字是:</td>
                    <td><%=name %></td>
                </tr>
                <tr>
                    <td>您最喜欢去的地方是:</td>
                    <td><label>
                        <input type="text"name="address"/>
                    </label></td>
                </tr>
                <tr>
                    <td colspan="2"><label>
                        <div align="center">
                            <input type="submit"name="Submit"value="提交"/>
                        </div>
                    </label></td>
                </tr>
            </table>
        </form>
     </div>
  </body>

(3)在result.jsp页面中,实现将用户输入的用户名,最喜欢去的地方在页面中显示

 <body>
    <%
        String name=(String)session.getAttribute("name");//获取保存在session范围内的对象
        String solution = request.getParameter("address");//获取用户输入的最喜欢去的地方
     %>

     <form id="form1"name="form1"method="post"action="">
        <table width = "28%"border="0">
            <tr>
                <td colspan="2"><div align="center"><strong>显示答案</strong></div></td>
            </tr>
            <tr>
                <td width="49%"><div align="left">您的名字是</div></td>
                <td width="51%"><label>
                    <div align ="left"><%=name %></div>
                </label></td>
            </tr>
            <tr>
                <td><label>
                    <div align="left">您最喜欢去的地方</div>
                </label></td>
                <td><div align="left"><%=solution %></div></td>
            </tr>
        </table>
     </form>
  </body>

结果:
这里写图片描述

这里写图片描述

这里写图片描述

application对象

application对象可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会在整个应用中都有效,生命周期更长。
这里写图片描述

访问应用程序初始化参数
application提供了对应用程序环境属性访问的方法。
application对象访问应用程序初始化参数的方法
getInitParameter(String name):返回一个已命名的参数值
getAttributeNames():返回所有已定义的应用程序初始化名称的枚举

管理应用程序环境属性
getAttributeNames():获得所有application对象使用的属性名
getAttribute(String name):从application对象中获取指定对象名
setAttribute(String key,Object obj):使用指定名称和指定对象在application对象中进行关联
removeAttribute(String name):从application对象中去掉指定名称的属性

out对象

out对象用于在Web浏览器内输出信息,并且管理应用服务器上的输出缓冲区。
管理相应缓冲
clear()方法清除缓冲区,如果相应内容已经提交,则报出IOException异常
clearBuffer()方法,即使内容已经提交给客户端,也能够访问该方法
这里写图片描述
向客户端输出数据
向客户端写入数据
print():在页面中打印字符串信息,不换行
println():在页面中打印字符串信息,,并且换行。

其他内置对象

获取会话范围内的pageContext对象
pageContext对象的作用是取得任何范围的参数,通过他可以获取JSP页面的out,request,response,session,application等对象。
这里写图片描述
这里写图片描述

读取web.xml配置信息的config对象
config对象主要作用是取得服务器的配置信息。
这里写图片描述

应答或请求的page对象
这里写图片描述

获取异常信息的exception对象
只有在isErrorPage=“true”的页面中才能被使用
这里写图片描述

获取异常信息的exception对象
(1)创建index.jsp页面,在该页面中编写代码,并通过errorPage属性指定有异常信息时系统将转发至error.jsp页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"errorPage="error.jsp"%>
<body>
     <%
        int apple=Integer.parseInt("ad");
        out.println("苹果每斤"+apple+"元");
      %>
  </body>

(2)编写error.jsp页面,用于接收传递过来的异常信息

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"isErrorPage="true"%>

<body>
    错误提示为:<%=exception.getMessage() %>
</body>

参考书籍:《Java Web开发实战》作者:软件开发技术联盟

猜你喜欢

转载自blog.csdn.net/weixin_39795049/article/details/82215699