java web开发-第四章 JSP内置对象

目录

前言

4.1 request 对象

4.1.1 获取用户提交的信息

 4.1.2处理汉字信息

4.1.3 常用方法

4.1.4 处理HTML标记

1.form标记

2.input标记

3.select、option标记

4.textArea标记

5.style样式标记

6.table标记

7.image标记

8.embed标记

4.1.5 处理超链接

4.2 response 对象

4.2.1 动态响应contentType属性

4.2.2 response对象的HTTP文件头

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对象

总结


前言

本章主要内容为request 对象、response 对象、session对象、application 对象和out对象。

4.1 request 对象

在JSP中,内置对象request封装了用户提交的信息,那么该对象调用相应的方法可以获取封装的信息,即使用该对象可以获取用户提交的信息。内置对象request是实现ServletRequest接口类的一个实例。

4.1.1 获取用户提交的信息

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

例:example4_2.jsp(向当前页面提交信息)

<%@ page contentType="text/html" %>   //JSP指令标记
<%@ page pageEncoding = "utf-8" %>   //JSP指令标记
<%@ page import="java.util.regex.Pattern" %>  //JSP指令标记
<%@ page import="java.util.regex.Matcher" %>   //JSP指令标记
<style>
   #tom{
      font-family:宋体;font-size:22;color:blue 
   }
</style> 
<HTML><body id ="tom" bgcolor = #ffccff>  //id调用上面"#"后面的内容
输入购物小票内容(显示的是默认内容):
<%
   String content = "牛奶:12.68元,面包:6.6元,"
                    +"苹果:28元,香皂:6.58元";
%>
<form  action="" method="post" id ="tom"> //action=""表示提交给当前页面,双引号中不能有空格
   <textArea  name="shopping" rows=5 cols=32 id ="tom">  //textArea实现多行文本框,大小为5*12
      <%= content %>
   </textArea>
   <input type="submit" id ="tom" name="submit" value="提交"/>  //设置一个提交按钮
</form>  
<%   String shoppingReceipt=request.getParameter("shopping");  //获取用户提交的多行文本框中的信息
     if(shoppingReceipt==null) {
        shoppingReceipt="0";
     }
     Pattern pattern;          //模式对象
     Matcher matcher;          //匹配对象
     String regex="-?[0-9][0-9]*[.]?[0-9]*" ;//匹配数字,整数或浮点数的正则表达式。
     pattern = Pattern.compile(regex); //初试化模式对象。
     matcher =
     pattern.matcher(shoppingReceipt); //matcher检索shoppingReceipt。
     double sum = 0;
     while(matcher.find()) {
       String str = matcher.group(); 
       sum += Double.parseDouble(str);
     } 
     out.print("购物小票消费总额:"+sum);
%>
</body></HTML>

 4.1.2处理汉字信息

request对象获取用户提交的信息中如果含有汉字字符或其他非ASCII符,就让request对象在获取信息之前调用setCharacterEncoding方法设置编码为UTF-8(默认是ISO-8859-1)就可以避免乱码现象。

request.setCharacterEncoding("utf-8");

4.1.3 常用方法

(1) String getProtocol()获取用户向服务器提交信息所使用的通信协议,例如http/1.1等。
(2) String getServletPath()获取用户请求的JSP页面文件的名字(带目录符号\,例如\hello.jsp)。
(3) String getContextPath()获取用户请求的当前Web服务目录(例如ch4)。
(4) int getContentLength()获取用户提交的整个信息的长度。
(5) String getMethod()获取用户提交信息的方式,例如post或get。
(6) String getHeader(String s)获取HTTP头文件中由参数s指定的头名字的值,一般来说参数s可取的头名有accept、accept-language、content-type、accept-encoding、user-agent、host、content- length、connection、cookie等,例如,s取值useragent将获取用户的浏览器的版本号等信息。
(7)Enumeration getHeaderNames()获取头名字的一个枚举。
(8) Enumeration getHeaders(String s)获取头文件中指定头名字的全部值的一个枚举。
(9)String getRemoteAddr()获取用户的IP地址。
(10) String getRemoteHost()获取用户机的名称(如果获取不到,就获取IP地址)。(11) String getServerName()获取服务器的名称。
(12) String getServerPort()获取服务器的端口号。
(13) Enumeration getParameterNames()获取用户提交的信息体部分中各个name给出的参数的一个枚举。

4.1.4 处理HTML标记

1.form标记

form表单的一般格式:

<form action="请求访问的页面或servlet" method=get | post>

         各种提交手段

         提交键

</form>

ps:get适合提交数据量不大,安全行不高的数据

    post适合提交数据量大,安全性高的用户信息

form表单的子标记:

  • <input.../>
  • <select...></select>
  • <option...></option>
  • <textArea...></textArea>

2.input标记

在form表单将input标记作为子标记来指定form表单中数据的输入方式以及form表单的提交键。

input标记的基本格式:

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

GUI对象:

(1)文本框text

(2)单选框radio

(3)复选框checkbox

(4)口令框password

(5)隐藏hidden

(6)提交键submit

(7)重置键reset

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.select、option标记

select标记将option作为子标记,形成下拉列表或滚动列表。在select中增加size属性的值就变成滚动列表,size的值是滚动列表的可见行的数目。

下拉列表的基本格式:

<select name="myName">

     <option value="item1">文本描述</option>

     <option value="item2">文本描述</option>

         ...

</select>

滚动列表的基本格式:

<select name="myName" size="正整数">

     <option value="item1">文本描述</option>

     <option value="item2">文本描述</option>

         ...

</select>

4.textArea标记

<textArea>是一个能输入或显示多行文本的文本区。

textArea标记的基本格式:

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

5.style样式标记

style标记用于定义HTML其他标记中的字体样式。例:

<style>

     #textStyle{

          font-family:宋体;font-size:18;color:blue

     }

</style>

6.table标记

table标记定义表格,表格以行列形式显示数据,更加美观。

table标记的一般格式:

<table border="边框的宽度">

     <tr width="该行的宽度">

          <th width="单元格的宽度">单元格中的数据</th>

            ...

          <td width="单元格的宽度">单元格中的数据</td>

     </tr>

...

</table>

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

7.image标记

使用image标记可以显示一幅图像。基本格式:

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

8.embed标记

使用embed标记可以播放音乐和视频。基本格式:

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

4.1.5 处理超链接

HTML的超链接标记基本格式:

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

用户单击超链接标记的文字说明,可以访问超链接给出的链接页面。使用超链接标记时还可以增加参数,以便向所链接的页面传递值。格式:

<a herf=链接的页面地址?参数1=字符串1&参数2=字符串2...>文字说明</a>

例如,example4_9.jsp用超链接向example4_9_receive传递商品编号和价格。

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:

<%@ 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 对象

可以用response对象对用户的请求作出动态响应,向用户端发送数据。

4.2.1 动态响应contentType属性

page指令只能为contentType指定一个值来决定响应的MIME类型。

用setContentType(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 等。

4.2.2 response对象的HTTP文件头

当用户访问一个页面时,会提交一个 HTTP 请求给 Tomcat 服务器,这个请求包括一个请求行、 HTTP 头和信息体,例如:

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

      其中,首行叫请求行,规定了向请求访问的页面提交信息的方式,例如, post 、 get 等方式,以及,请求的页面的名字和使用的通信协议。
      第2、3行分别是两个头( Header ): host 和 accept - encoding ,称 host 、accept - encoding 是头名字,而 localhost :8080以及 gzip , deflate 分别是两个头的值。一个典型的请求通常包含很多的头,有些头是标准的,有些和特定的浏览器有关。
同样,响应也包括一些头。 response 对象可以使用方法

 addHeader ( String head , String value );

 set Header ( String head , String value );

动态添加新的响应头和头的值,将这些头发送给用户的浏览器。如果添加的头已经存在,则先前的头被覆盖。

4.2.3 response对象的重定向

可以使用response 对象的sendRedirect(URLurl)方法实现用户的重定向即让用户从一个页面跳转到sendRedirect(URL url)中url指定的页面,即所谓面客户端跳转。需要注意的是当使用 sendRedirect(URL url)方法将用户从当前更面重定向另一个页面时,Tomcat 服务器还是要把当前 JSP 页面执行完毕后才实施重定向操作,但Tomcat 服务器不再给用户看当前页面的执行效果。如果在执行sendRedire(URL url)方法后,紧接着执行了return返回语句,那么Tomcat 服务器会立刻结束当前页面的执行。

4.3 session对象

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重写

 session 对象能和用户建立起一一对应关系依赖于用户浏览器是否支持 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对象存储数据

(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 对象达到了设置的最长的"发呆"状态时间以及用户是否关闭浏览器或服务器被关闭。所谓"发呆"状态时间是指用户对某个 Web 服务目录发出的两次请求之间的间隔时间(默认的发呆时间是30分钟)。比如,用户对某个 Web 服务目录的 JSP 页面发出请求,并得到响应,如果用户不再对该 Web 服务目录发出请求(可能去请求其的 Web 服务目录),那么用户对该 Web 服务目录进入"发呆"状态,直到用户再次请求该 Web 服务目录时,"发呆"状态结束。

4.4 application 对象

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 对象的字符序列。

总结

本章需掌握request 对象、response 对象、session对象、application 对象和out对象及其它们的应用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值