Java Web ---- 第四章JSP内置对象

目录

前言

4.1  request对象

 4.1.1  获取用户提交的信息

4.1.2  处理汉字信息 

4.1.3  常用方法举例 

 4.1.4  处理HTML标记

 4.2  response对象

4.2.1  动态响应contentType属性

4.2.2  response对象的HTT文件头 

 4.2.3  response对象的重定位

4. 3  session对象

 4.3.1  session对象的ID

4.3.2  session对象与URL重写 

4.3.3  session对象存储数据 

4.3.4  session对象的生存期限 

4.4  application对象 

4.4.1  application对象的常用方法 

4.4.2  application留言板 

4.5  out对象 

总结


前言

使用浏览器从网站获取HTML页面时,实际在使用HTTP.HTTP协议规定了信息在Internet上的传输方法,特别规定了浏览器与服务器的交互方法.

在使用JSP对象时,有些Java程序片和表达式部分使用,这就是JSP的内置对象.JSP的常用内置对象有request,response,session,application和out.


4.1  request对象

  1. 内置对象request是实现了ServletRequest接口类的一个实例,可以在Tomcat服务器的webapps\tomcat-docs\servletapi中查找ServletRequest接口的方法 
  2. 用户通常使用html的form表单来请求访问服务器的某个JSP页面,并提交必要信息给所请求的JSP页面.表格一般格式如下:
    <form action = "请求访问的页面或Servlet" method = get | post>
    提交的手段
    </form>

    其中<form>为开始标签,</form>为结束标签.action为form表单的属性,其属性值为给出请求访问的JSP页面或Servlet.这里的get或post的区别是:get方法提交的信息会在提交的过程中显示在浏览器的地址栏中,而post方法不会.提交的手段包括文本区,列表,文本框等等.

  3. form表单请求访问的JSP页面可以

让内置request对象调用getParameter(String s)方法来获取信息.其中字符串s的取值为提交手段内容的name的取值.比如:

request.getParamter("boy");

 4.1.1  获取用户提交的信息

request对象获取用户提交信息的最常用的方法是 getParameter(String s).

比如下面列子:

example4_1.jsp通过form表单向example4_1_computer.jsp传递三角形3边的值,让其负责计算并显示

example4_1.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<HTML><body bgcolor = #ffccff> 
   <form action="example4_1_computer.jsp" method=post >
       <input type="text" name="sizeA" value=9 size=6 />
       <input type="text" name="sizeB" value=8 size=6 /> 
       <input type="text" name="sizeC" value=8 size=6 />
       <input type="submit" name="submit" value="提交"/>
   </form> 
</body></HTML>

example4_1_computer.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<HTML><body bgcolor = #ccffff>
<p style="font-family:黑体;font-size:36;color:blue">
<%  
    String sideA=request.getParameter("sizeA");
    String sideB=request.getParameter("sizeB");
    String sideC=request.getParameter("sizeC");
    try {  double a=Double.parseDouble(sideA);
           double b=Double.parseDouble(sideB);
           double c=Double.parseDouble(sideC);
           double p=(a+b+c)/2,area=0;
           area=Math.sqrt(p*(p-a)*(p-b)*(p-c));
           String result = String.format("%.2f",area);
           out.println("<BR>三边:"+sideA+","+sideB+","+sideC);
           out.println("<BR>三角形面积(保留2位小数):"+result);
    }
    catch(NumberFormatException ee){
          out.println("<BR>请输入数字字符");
    } 
%>
</p></body></HTML>

 结果:

 提示:

在使用request对象获取提交的信息时,如果用户没有提交信息就提交时,得到的对象就是空对象.如果java解析器就会提出异常.为了避免可以使用一下代码:

String shop = request.getParamter("shopping");
if(shop == null)
{
    shop = "0";
}

4.1.2  处理汉字信息 

 request对象为了防止提交的信息出现特殊符号.可以使用以下代码设置编码方式为UTF-8.代码如下:

request.setCharacterEncoding("utf-8");

 下面代码通过form表单提交信息,request对象调用setCharacterEncoding方法设置编码方式.在获取信息.

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<style>
   #tom{
      font-family:宋体;font-size:26;color:blue 
   }
</style> 
<HTML><body id="tom" bgcolor = #ffccff>
可以输入各种语言的文字,单击提交键:
<%
   String content = "早上好,Good morning,อรุณสวัสดิ์ค่ะ(泰语),"+
                  " おはよう,Доброе утро,좋은 아침";
%>
<form  action="" method='post' >
   <textArea  name="language" id="tom" rows=3 cols=50>
      <%= content %>
   </textArea>
   <input type="submit" id="tom" name="submit" value="提交"/>
</form>  
<%   request.setCharacterEncoding("utf-8");
     String variousLanguages=request.getParameter("language");
     out.print(variousLanguages);
%>
</p></body></HTML>

结果:

4.1.3  常用方法举例 

当用户访问一个页面时,会提交一个HTTP请求给Tomcat服务器,这个请求包括一个请求行,http头和消息体.

request对象调用的方法有很多,比如: 

  1. Sting getProtocol()
  2. Sting getServletPath()
  3. Sting ContextPath()
  4. String getMethod()
  5. String getHeader(String s)
  6. int getContentLength()
  7. Enumeration getHeaderNames()
  8. Enumeration getHeaders(Sting s)
  9. Sting getRemoteAddr()
  10. String getRemoteHost()
  11. String getServletName()
  12. Enumeration getServletPort()
  13. Srting getServletPort()

 4.1.4  处理HTML标记

在jsp页面中html标记大约为100多个,这些标记可以描述数据的显示格式.

1.form标记

在上面以着重讲了form标记,这里就不多讲述

2.input标记

在form表单中,将input标记作为子标记来指定form表单中数据的输入方式 以及form表单的提交键.input标记属于空标记,即没有标记体.所以input标记没有开始标签和结束标签.input标记的基本格式为:

<input type ="gui对象" name = "gui对象的名字"  value = "gui中的默认值"  >

GUI对象可以是text,checkbox,submit等等.

(1)文本框text

当gui对象为text时,具体格式为:

< input type =" text " name =" m " value =" h " size ="8" algin =" left " maxlength ="9"/>

 其中, value 的值是 text 中文本的初始值, size 是 text 的长度(单位是字符), algin 是 text 在浏览器窗体中的对齐方式, maxlength 指定 text 可输入的最多字符。 request 对象通过 name 指定的名字来获取用户在 text 输入的字符串。如果用户没有在 text 输入任何信息,就单击 form 表单中的 submit 提交键, request 对象调用 getParameter 方法将获取由 value 指定的默认值( text 中显示的默认文本),如果 value 未指定任何值, getParameter 方法获取的字符串的长度为0,即该字符串为"".

(2) 单选框radio

当gui对象为text时,具体格式为:

< input type =" radio " name =" hi " value =" 男" algin =" top "
 checked =" ok "/>
< input type =" radio " name =" hi " value =" 女"
 algin =" top "/>

algin 是 radio 在浏览器窗体中的对齐方式,如果几个单选键的name 取值相同,那么同一时刻只能有一个被选中。 request 对象调用 getParameter 方法获取被选中的 radio 中 value 属性指定值。 checked 如果取值是一个非空的字符串,那么该单选框的初始状态就是选中状态。


(3)复选框checkbox

具体格式为:

< input type =" checkbox " name =" item " value =" A " algin =" top " checked =" ok "/>< input type =" checkbox " name =" item " value =" B " algin =" top "/>
< input type =" checkbox " name =" item " value =" C " algin =" top " checked =" ok />< input type =" checkbox " name =" item " value =" D " algin =" top "/>

其中, value 指定 checkbox 的值。复选框与单选框的区别就是可以多选,即如果几个 checkbox 的 name 取值相同,那么同一时刻可有多个 checkbox 被选中。这时, request 对象需调用 getParameter Values 方法(不是 getParameter 方法)获取被选中的多个 checkbox 中 value 属性指定的值。 checked 如果取值是一个非空的字符串,那么该复选框的初始状态就是选中状态。

 (4)口令框password

用户输入的信息用回显,防止偷看.格式为:

< input type =" password " name =" me " size ="12" maxlength ="30"/>

*用户在口令框中输入 tiger ,单击提交键, tiger 将被提交给 form 表单请求的页面,请求的页面的内置对象 request 调用 getParameter 方法获取 password 提交的值 tiger ( password 仅仅起着不让别人偷看的作用,不提供加密措施)。

(5)隐藏 hidden

input没有可见的输入界面,form表单将会将input标记中的value属性的值提交给所请求的页面.具体格式: 

< input type =" hidden " name =" nogui " value =" hello "/>

(6)submit提交键

为了能把 form 表单的数据提交给服务器,一个 form 表单至少包含一个提交键(可以有多个提交键) .具体格式为:

<input type = "submit" name="提交" value = "提交" />

 当单机提交按键时,用户输入的页面才会被接收.

(7)重置键reset

重置键将表单中输人的数据清空,以便重新输入数据. 具体格式:

< input type =" reset " value ="重置"/>

提示:HTML embed 标记可以播放音乐,音乐文件可以是. wav 和.mp3格式。 

具体例子如下:

example4_5.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<style>
   #tom{
      font-family:宋体;font-size:26;color:blue 
   }
</style> 
<HTML><body id="tom" bgcolor = #ffccff>
<form action="example4_5_receive.jsp" method=post id=tom>
  <br>音乐:
  <input type="radio" name="R" value="on" />打开 
  <input type="radio" name="R" value="off" checked="default">关闭 
<br>哪些是奥运会项目:<br> 
  <input type="checkbox" name= "item" value="A"  algin= "top"  />足球
  <input type="checkbox" name= "item" value="B"  algin= "top"  />围棋
  <input type="checkbox" name= "item" value="C"  algin= "top"  />乒乓球
  <input type="checkbox" name= "item" value="D"  algin= "top"  />篮球
  <input type="hidden" value="我是球迷,但不会踢球" name="secret"/>
  <br><input type="submit" id="tom" name="submit" value="提交"/>
  <input type="reset" id="tom" value="重置" />
</form> 
</body></HTML>

 example4_5_receive.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<%@ page import  = "java.util.Arrays" %> 
<%! public boolean isSame(String []a,String [] b){
         Arrays.sort(a); 
         Arrays.sort(a);
         return Arrays.equals(a,b);
    }
%>
<HTML><body bgcolor = white >
<p style="font-family:宋体;font-size:36;color:blue"> 
<%   String answer[] = {"A","C","D"};
     request.setCharacterEncoding("utf-8");  
     String onOrOff=request.getParameter("R"); //获取radio提交的值
     String secretMess=request.getParameter("secret");//获取hidden提交的值
     String itemName[]=request.getParameterValues("item"); //获取checkbox提交的值
     out.println("<br> 是否打开音乐:"+onOrOff);
     out.println("<br> 您的答案:");
     if(itemName==null) {
          out.print("没给答案");
     } 
     else {
         for(int k=0;k<itemName.length;k++) {
           out.print(" "+itemName[k]);
         }
         if(isSame(itemName,answer)){
           out.print("<br>回答正确。");
         }
     }
     out.println("<br> 提交的隐藏信息:"+secretMess);
     if(onOrOff.equals("on")) {
%>       <br><embed src="sound/back.mp3" />
<%   } 
%>
</p></body></HTML>

结果:

3.textArea标记

< textArea >是一个能输入或显示多行文本的文本区,在 form 表单中使用< textArea >作
为子标记可以提交多行文本给所请求的 JSP 页面。< textArea >的基本格式为:

< textArea name ="名字" rows ="文本可见行数" cols ="文本可见列数">
 
</ textArea >

 4.style样式标记

该标记可以定义html其他标记中的字体样式,具体格式为:

< style >
# textStyle {
 font - family :宋体; font - size :18; color : blue 
 
}
# tom {
 font - family :黑体; font - size :16; color : black 
 
}
</ style >

 HTML 标记可以让其 id 属性值是样式名称来使用这个样式。例如,段落标记 p 就可以如下使用 textStyle 样式:

<p id = "textstyle">你好 </p>

 6.table标记

表格以行列形式显示数据,不提供输入数据功能。经常将某些数据或GUI放置在表格的单元格

具体格式如下:

< tabe border ="边框的宽度">
< tr width ="该行的宽度">
< th width ="单元格的宽度">单元格中的数据</ th >
< td width ="单元格的宽度">单元格中的数据</ td >...</ tr >
</ table >
 
其中<tr>....</tr>

定义表格的一个行,< th >或< td >标记定义这一行中的表格单元,二者的区别是< th >定义的单元着重显示,< td >称为普通单元,不着重显示。 table 中增加选项 border 可给出该表格边框的宽度,当 border 取值是0时,相当于没有边框。

7.image标记

使用image标记可以在jsp页面中显示一张图片.基本格式:

< inage src ="图像文件的 URL ">描述文字</ image >

 如果图像文件和当前页面在同﹣ Web 服务目录中,图像文件的地址就是该图像文件的名字,如果图像文件在当前 Web 服务目录一个子目录中,比如 image 子目录中,那么"图像文件的 URL "就是" image /图像文件的名字"。

8.embed标记

使用 embed 标记可以播放音乐和视频.具体格式为:

< embed src ="音乐或视频文件的 URL ">描述文字</ embed >
或
< embed src ="音乐或视频文件的 URL "/>

如果音乐或视频文件和当前页面在同一 Web 服务目录中, embed 标记中 src 属性的值就是该文件的名字;如果视频文件在当前 Web 服务目录一个子目录中,比如 avi 子目录中,那么 embed 标记中 src 属性的值就是" avi /视频文件的名字"。 

4.1.5  处理超链接

具体格式为:

<a href=链接的页面地址 >文字说明</ a>

 超链接所链接的页面,使用request对象调用getParameter(“参数“)方法获得超链接的数传递过来的参数的值,即字符串。需要注意的是,超链接标记向所链接的页面传递的参数的值,即字符串中不允许含有非ASCII字符。

例如下面例题:

example4_9.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<HTML><body bgcolor = #ffccff>
<%
   double price = 98.78;
%>
<p style="font-family:宋体;font-size:36;color:blue">
商品编号A1001,价格8765
<a href ="example4_9_receive.jsp?id=A1001&price=8765">购买</a><br>
商品编号A1002,价格<%= price%>
<a href ="example4_9_receive.jsp?id=A1002&price=<%= price%>">购买</a>
</p></body></HTML>

example4_9_receive.jsp

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<HTML><body bgcolor = #EEEEFF>
<p style="font-family:宋体;font-size:36;color:blue"> 
<%  String id = request.getParameter("id");
    String price = request.getParameter("price");
%>
<b>商品编号:<%= id %><br>
商品价格:<%= price %>
</p></body></HTML>

 结果:

 4.2  response对象

在前面的学习中我们了解的request对象,也就是请求对象.这里我们主要讲述response对象,即为动态响应对象.可以用 response 对象对用户的请求作出动态响应,向用户端发送数据.

4.2.1  动态响应contentType属性

页面用 page 指令设置页面的 contentType 属性的值,那么 Tomcat 服务器将按照这种属性值作出响应,将页面的静态部分返回给用户,用户浏览器接收到该响应就会使用相应的手段处理所收到的信息。由于 page 指令只能为 contentType 指定一个值来决定响应的 MIME 类型,如果想动态地改变这个属性的值来响应用户,就需要使用response 对象的 setContent Type ( String s )方法来改变 contentType 的属性值,该方法中的参数 s 可取值: text / html 、text / plain 、image / gif 、image / x - xbitmap 、image / jpeg 、image / pipeg 、application / x - shockwave - flash 、application / vnd . ms - powerpoint 、 application / vnd . ms - excel , application / msword 等。
当用 setContentType ( String s )方法动态改变了 contentType 的属性值,即响应的 MIME 类型, Tomcat 服务器就会按照新的 MIME 类型将 JSP 页面的输出结果返回给用户。

4.2.2  response对象的HTT文件头 

具体格式如下:

post /example3_ I . jsp / HTTP .1.1 host : localhost :8080
 accept - encoding : gzip , deflate

同样,响应也包括一些头。 response 对象可以使用方法:

addHeader ( String head , String value );
或
 set Header ( String head , String value );

 4.2.3  response对象的重定位

在某些情况下,当响应用户时,需要将用户重新引导至另一个页面。例如.果用户输入的form 表单信息不完整,就会再被引导到该form表单的输入页面.
      可以使用response 对象的sendRedirect(URLurl)方法实现用户的重定间即让用户从一个页面跳转到sendRedirect(URL url)中url指定的页面,即所谓面客户端跳转。需要注意的是当使用 sendRedirect(URL url)方法将用户从当前更面重定向另一个页面时,Tomcat 服务器还是要把当前 JSP 页面执行完毕后才实施重定向(转)操作,但Tomcat 服务器不再给用户看当前页面的执行效果。如果在执行sendRedire(URL url)方法后,紧接着执行了return返回语句,那么Tomcat 服务器会立刻结束当前jsp页面的执行。

4. 3  session对象

   HTTP 协议是一种无状态协议。一个用户向服务器发出请求( request ),然后服务器返回响应( response ),在服务器端不保留用户的有关信息,因此当下一次发出请求时,服务器无法判断这一次请求和以前的请求是否属于同一用户。当一个用户访问一个 Web 服务目录时,可能会在这个服务目录的几个页面反复链接,反复刷新一个页面或不断地向一个页面提交信息等,服务器应当通过某种办法知道这是同一个用户。 Tomcat 服务器可以使用内置对象 session (会话)记录用户的信息。内置对象 session 由 Tomcat 服务器负责创建, session 是实现了 HttpSession 接口类的一个实例,可以在 Toamcat 服务器的 webapps \ tomcat - docs \ servletapi 中查找 HttpSession 接口的方法

 4.3.1  session对象的ID

简单地说,用户(浏览器)在访问一个 Web 服务目录期间,服务器为该用户分配一个 session 对象(称作和该用户的会话),服务器可以在各个页面使用这个 session 对象记录当前
用户的有关信息。而且服务器保证不同用户的 session 对象互不相同 .

注意:同一个用户在不同的 Web 服务目录中的 session 对象是互不相同的 

4.3.2  session对象与URL重写 

ession 对象能和用户建立起一一对应关系依赖于用户浏览器是否支持 Cookie 。如果用户端浏览器不支持 Cookie 那么用户在不同网页之间的 session 对象可能是互不相同的,因为 Tomcat 服务器无法将 id 存放到用户端浏览器中,就不能建立session 对象和用户的一一对应关系。用户将浏览器 Cookie 设置为禁止后(选择浏览器( IE )菜单→工具→ Internet 选项→隐私→高级,将第三方 Cookie 设置成禁止),运行上述例4_13会得到不同的结果。也就是说,同一用户对应了多个 session 对象,这样 Tomcat 服务器就无法知道在这些页面上访问的实际上是同一个用户。
         如果用户不支持 Cookie , JSP 页面可以通过 URL 重写来实现 session 对象的唯一性。所谓 URL 重写,就是当用户从一个页面重新链接到一个页面时,通过向这个新的 URL 添加参数,把 session 对象的 id 传带过去,这样就可以保障用户在该 Web 服务目录的各个页面中的 session 对象是完全相同的。可以让 response 对象调用 encodeURL ()或 encodeRedirectURL ()方法实现 URL 重写。

4.3.3  session对象存储数据 

session可以调用以下方法来存储数据:

  1. public void setAttribute (String key,Object obj)。session 对象可以调用该方法将参数 Object 指定的对象obj添加到 session 对象中,并为添加的对象指定了一个素引关键字,如果添加的两个对象的关键字相同,则先前添加的对象被清除。
  2. public Object getAttribute(String kcy)。获取 session对象索引关键字是key的对象。由于任何对象都可以添加到scssion对象中,因此用该方法取回对象时,应显式转化为原来的类型.
  3.  public Enumeration getAttributeNames()。session 对象调用该方法产生一个枚举对象,该枚举对象使用nextElemets()遍历session中的各个对象所对应的关键字。
  4. public void removeAttribute(String key)。session 对象调用该方法移掉关键字key对应的对象。

4.3.4  session对象的生存期限 

个用户在某个 Web 服务目录的 session 对象的生存期限依赖于 session 对象是否调用 invalidate ()方法使得 session 无效或 session 对象达到了设置的最长的"发呆"状态时间以及用户是否关闭浏览器或服务器被关闭。

参考代码如下:

<%@ page import="java.time.LocalTime" %>
<%@ page import="java.time.temporal.ChronoUnit" %>
<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<HTML><body bgcolor = #ffccff> 
 <%  out.println("session的Id:"+session.getId());
     session.setMaxInactiveInterval(6);
     LocalTime time = LocalTime.now();
     out.print("<br>(时:分:秒:纳秒)"+time);
     out.println("<br>开始发呆");
%>
</body></HTML>

 

4.4  application对象 

 该对象被该web服务器的所有用户共享.

4.4.1  application对象的常用方法 

(1) public void setAttribute ( String key , Object obj ). applicationXT 调用该方法将参数 Object 指定的对象 obj 添加到 application 对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加对象被清除。
(2) public Object getAttibute ( String key . plicationK 
键字是 key 的对象。由于任何对象都可以添加到 application 对象中,因此用该方法取回对象时,应显式转化为原来的类型。
(3) public Enumeration getAttributeNamliio Enumeration (枚举)对象,该 Enumeration 对象使用 ncxtElemets ()遍历 application 中的各个对象所对应的关键字。
(4) public void removeAttribute ( String key ). MM application 
 key 的对象。
(5) public String getServletlnfo ()。获取 Servlet 编译器的当前版本的信息。
由于 application 对象对所有的用户都是相同的,因此,在某些情况下,对该对象的操作需要实现同步( synchronized )处理.

4.4.2  application留言板 

该部分是application的具体案例.这里就不多说接受.

4.5  out对象 

out对象是一个输出流对象.用来想用户输出数据. 在前面的许多例子里曾多次使用 out 对象进行数据的输出。 out 对象可调用如下的方法用于各种数据的输出,例如:
(1) out . print ( boolean )或 out . println ( boolean )用于输出一个布尔值。(2) out . print ( char )或 out . println ( char )用于输出一个字符。
(3) out . print ( double )或 out . println ( double )用于输出一个双精度的浮点数。
(4) out . print ( fload )或 out . println ( float )用于输出一个单精度的浮点数。
(5) out . print ( long )或 out . println ( long )用于输出一个长整型数据。
(6) out . print ( String )或 out . println ( String )用于输出一个 String 对象的字符序列。
 


总结

本章主要介绍jsp内置对象的使用,具体包括request对象,response对象,session对象,application对象和out对象.其中request对象和response对象是我们用的最多的.这些对象在jsp页面中,不需声明就可以使用,所以被称为内置对象.内置对象说白了就是别人创建好了的对象,我们直接用即可.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值