第四章:JSP内置对象

JSP(Java Server Pages)是一种动态网页技术,它允许开发人员在HTML页面中嵌入Java代码,以便在服务器上生成动态内容。在JSP中,有一些内置对象,这些对象提供了许多有用的功能,使得开发人员可以更轻松地处理请求和响应,以及访问Web应用程序的各个部分。在本文中,我将总结JSP内置对象的学习经验和知识。

首先,我们需要了解JSP中的内置对象有哪些。在JSP中,有9个内置对象,它们分别是:request、response、out、session、application、config、pageContext、page和exception。这些内置对象提供了各种功能,例如访问请求参数、设置响应头、输出HTML内容、管理会话、访问应用程序范围的属性等等。

目录

•request对象

•response对象

•session对象

•out对象

•application对象


•request对象

获取用户提交的信息

用户通常使用HTMLform表单:

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

    提交手段

</form>

例如:

<form action="tom.jsp" method= "post" >
     <input type="text" name="boy" value= "ok" /> 
     <input type="submit" name="submit" value="提交"/>
</form> 

通过表单向example4_1_computer.jsp提交三角形三边的长度,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对象获取用户提交信息的最常用的方法是getParameter(String s)

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<%@ page import="java.util.regex.Pattern" %>
<%@ page import="java.util.regex.Matcher" %>
<style>
   #tom{
      font-family:宋体;font-size:22;color:blue 
   }
</style> 
<HTML><body id ="tom" bgcolor = #ffccff>
输入购物小票内容(显示的是默认内容):
<%
   String content = "牛奶:12.68元,面包:6.6元,"
                    +"苹果:28元,香皂:6.58元";
%>
<form  action =""  method="post" id ="tom">
   <textArea  name="shopping" rows=5 cols=32 id ="tom">
      <%= 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>

结果: 

处理汉字信息

 

通过表单向自己提交不同语言的问候语,内置对象request在获取信息之前调用setCharacterEncoding方法设置编码为utf-8,然后再获取数据。

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

结果:

处理HTML标记(不区分大小写)

<%@ page import="java.time.LocalDate" %>
<%@ page import="java.time.DayOfWeek" %>
<%
    request.setCharacterEncoding("utf-8");  
    String year=request.getParameter("year"); 
    String month=request.getParameter("month");
    int y = Integer.parseInt(year);
    int m = Integer.parseInt(month);
    LocalDate date = LocalDate.of(y,m,1);
    int days = date.lengthOfMonth(); //得到该月有多少天。
    int space = 0;                   //存放空白字符的个数
    DayOfWeek dayOfWeek = date.getDayOfWeek(); //得到1号是星期几
    switch(dayOfWeek) {
          case SUNDAY:    space = 0;
                          break;
          case MONDAY:    space = 1;
                          break;
          case TUESDAY:   space = 2;
                          break;
          case WEDNESDAY: space = 3;
                          break;
          case THURSDAY:  space = 4;
                          break;
          case FRIDAY:    space = 5;
                          break;
          case SATURDAY:  space = 6;
                          break;
   }
   String [] calendar = new String[space+days]; //用于存放日期和1号前面的空白
   for(int i=0;i<space;i++)
       calendar[i]="--";
   for(int i = space,n=1;i<calendar.length;i++){
       calendar[i] = String.valueOf(n) ;
       n++;
   }  
%>
<HTML><body bgcolor = #ffccff>
<h3> <%=year %>年<%=month %>月的日历:</h3>
<table  border=0>
  <tr><th>星期日</th><th>星期一</th><th>星期二</th><th>星期三</th>
      <th>星期四</th><th>星期五</th><th>星期六</th>
  </tr>
<% 
   int n = 0;
   while(n<calendar.length){
       out.print("<tr>");
       int increment = Math.min(7,calendar.length-n);
       for(int i=n;i<n+increment;i++) {
         out.print("<td align= center>"+calendar[i]+"</td>");
       }
       out.print("</tr>");
       n = n+increment;
   }
%> 
</table></body></HTML>

结果:

•response对象

动态响应contentType属性

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<%@ page import="java.awt.*" %>
<%@ page import="java.io.OutputStream" %>
<%@ page import="java.awt.image.BufferedImage" %>
<%@ page import="java.awt.geom.*" %>  
<%@ page import="javax.imageio.ImageIO" %>
<style>#textStyle
   { font-family:宋体;font-size:36;color:blue 
   }
</style> 
<%! void drawCircle(double r,HttpServletResponse response) { //定义绘制圆的方法
        int width=320, height=300;
        BufferedImage image = 
        new BufferedImage(width,height,BufferedImage.TYPE_INT_RGB);
        Graphics g = image.getGraphics();
        g.fillRect(0, 0, width, height);
        Graphics2D g_2d=(Graphics2D)g; 
        Ellipse2D ellipse=new Ellipse2D.Double(160-r,150-r,2*r,2*r);
        g_2d.setColor(Color.blue);
        g_2d.draw(ellipse); 
        try {
          OutputStream outClient= response.getOutputStream();//指向用户端的输出流
          boolean boo =ImageIO.write(image,"jpeg",outClient);
        }
        catch(Exception exp){}
    }
    double getArea(double r) { //定义求面积的方法
       return  Math.PI*r*r;
    }
%>
<%  request.setCharacterEncoding("utf-8"); 
    String submitValue = request.getParameter("submit");
    String radius = request.getParameter("radius");
    double r =Double.parseDouble(radius);
    if(submitValue.equals("提交看圆形")){
       response.setContentType("image/jpeg");//response更改相应用户的MIME类型
       drawCircle(r,response) ; //绘制圆
    }
%>
<HTML><body bgcolor = #EEEEFF>

<p id ="textStyle">
<%  
    double area=getArea(r);
    String result = String.format("%.2f",area);
%> 
半径:<%= radius %><br>
<b>面积(保留2位小数)<br><%= result %>
</p></body></HTML>

结果:

  response重定向

responsesendRedirect(URL url)方法实现用户的重定向,即让用户从一个页面跳转到sendRedirect(URL: url)url指定的页面。

■当使用sendRedirect(URL url)方法将用户从当前页面重定向另一个页面时,Tomcat服务器还是要把当前JSP页面执行完毕后才实施重定向(跳转)操作,但Tomcat服务器不再给用户看当前页面的执行效果。

■如果在执行sendRedirect(URL url)方法后,紧接着执行了return返回语句,那么Tomcat服务器会立刻结束当前JSP页面的执行。

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<style>#textStyle
   { font-family:宋体;font-size:36;color:blue 
   }
</style>
<HTML><body bgcolor=#ffccff> 
<p id="textStyle">
填写姓名(<%= (String)session.getAttribute("name")%>):<br>
<form action="example4_12_receive.jsp" method="post" name=form>
   <input type="text" id="textStyle"  name="name">
   <input type="submit" id="textStyle" value="确定"/>
</form>
</body></HTML>

session对象

这节学习了session对象,用户第一次访问Web服务目录时,Tomcat服务器创建和该用户相对应的session对象,当用户在所访问的Web服务目录的各个页面之间浏览时,这个session对象都是同一个,而且不同用户的session对象是互不相同的。本节学习的application对象也是由Tomcat服务器负责创建,但与session对象不同的是,application对象被访问该Web服务目录的所有的用户共享,但不同Web服务目录下的application互不相同。

 

Tomcat服务器可以使用内置session对象(会话)记录用户的信息。内置对象sessionTomcat服务器负责创建

<%@ page contentType="text/html" %>
<%@ page pageEncoding = "utf-8" %> 
<style>#textStyle
   { font-family:黑体;font-size:36;color:red 
   }
</style> 
<HTML><body bgcolor=cyan> 
<p id="textStyle">  
这是example4_13_b.jsp页面
<%  String id=session.getId();
    out.println("<br>session对象的ID是<br>"+id);
%>
<br>连接到example4_13_a.jsp的页面。<br>
<a href="example4_13_a.jsp">example4_13_a.jsp</a>   
</body></HTML>

结果:

session对象使用setMaxInactiveInterval(int interval)方法设置最长的“发呆”状态时间为6秒。用户可以通过刷新页面检查是否达到了最长的“发呆”时间,如果两次刷新之间的间隔超过6秒,用户先前的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>

 

 结果:

 

application对象

1public void setAttribute(String  key ,Object  obj)application对象可以调用该方法将参数Object 指定的对象 obj添加到application对象中,并为添加的对象指定了一个索引关键字,如果添加的两个对象的关键字相同,则先前添加对象被清除。

2public Object getAttibute(String key)。获取application对象含有的关键字是key的对象。由于任何对象都可以添加到application对象中,因此用该方法取回对象时,应显式转化为原来的类型。

•out对象

out对象是一个输出流,用来向用户端输出数据。在前面的许多例子里曾多次使用out对象进行数据的输出。out对象可调用如下的方法用于各种数据的输出

例如

out.print(boolean)out.println(boolean) 用于输出一个布尔值。

out.print(char) out.println(char) 输出一个字符。

out.print(double) out.println(double)输出一个双精度的浮点数。

out.print(fload) out.println(float)用于输出一个单精度的浮点数。

out.print(long) out.println(long)输出一个长整型数据。

out.print(String) out.println(String)输出一个String对象的字符序列。

方法printlnprint的区别是:println会向缓存区写入一个换行,而print不写入换行。但是浏览器的显示区域目前不识别println写入的换行,如果希望浏览器显示换行,应当向浏览器写入"<br>"实现换行

以上就是对jsp内置对象的学习,JSP内置对象是JSP技术中非常重要的组成部分,它们提供了一些常用的Java对象,使得开发者可以方便地使用这些对象来完成网页的开发。通过学习JSP内置对象,开发者可以更好地掌握JSP技术,从而实现更加高效和灵活的网页开发。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值