jsp学习笔记之四:内置对象

application对象:

设置一个名为name,值为val的应用内共享的数据

<%
  application.setAttribute("name",val);
%>

获取名为name的应用内共享数据的值

<%
  application.setAttribute("name");
%>

exception对象:

一般用于异常处理页面。在当前页面出现错误时,会将错误类型和错误信息传到异常处理页面,此时异常处理页面可以用以下指令获取错误信息和类型:

<%=exception.getClass()%>
<%=exception.getMessage()%>

out对象:

<%
  out.println("<tr>");
  out.println("text");
  out.println("</tr>");
%>

效果同

<tr>text</tr>

pageContext对象:

设置不同范围的变量:

//设置名为page的变量,值为hello,默认范围为page,无需另外加入参数
pageContent.setAttributesScope("page","hello");

//设置名为request2的变量,值为hello,范围为request
pageContent.setAttributesScope("request2","hello",PageContext.REQUEST_SCOPE);

//设置名为session2的变量,值为hello,范围为session
pageContent.setAttributesScope();("session2","hello",PageContext.SESSION_SCOPE);

//设置名为app2的变量,值为hello,范围为application
pageContent.setAttributesScope("app2","hello",PageContext.APPLICATION_SCOPE);

获取不同范围的变量:

//获取名为page的变量,默认范围设为page
pageContent.setAttributesScope("page");

//获取名为request2的变量,范围定位为request
pageContent.setAttributesScope("request2",PageContext.REQUEST_SCOPE);

注:范围为session、application的不再一一列出

获取变量的范围:

//获取名为page的变量的范围
pageContext.getAttributesScope("page");

返回值对应:

1:page 2:request 3:session 4:application

request对象:<url>

post请求和get请求的区别参考文章:http://kimmking.github.io/2017/12/01/comparing-get-and-post/

post请求案例:

form.jsp(发送方)

<form id="f1" method="post" action="request.jsp">
    请输入一个数字:<input type="text" value="" name="number" id="number"/>
</form>

request.jsp(接收方)

<%
        //获取所有请求头的名称
        Enumeration<String> headerNames=request.getHeaderNames();
        while(headerNames.hasMoreElements()){
            //逐个取出请求名称
            String headerName=headerNames.nextElement();
            //获取并打印对应请求名称的值
            out.println(headerName+request.getHeader(headerName)+"<br/>");
        }
        //设置解码方式,对于中文,使用GBK解码方式
        request.setCharacterEncoding("GBK");
        //获取并打印从form.jsp传来的名为number的参数值
        String num=request.getParameter("number");<br />     //获取多个值的请求参数:<br />     //String[] mVal=request.getParameter("mValues");
        out.println("number: "+num+"<br>");
%>

注:get请求与post请求的发送和接收类似

reponse对象:

响应生成非字符响应实例:

生成一张图片并生成非字符响应(案例摘自《轻量级JAVA EE企业应用实战》)

<%--
  Created by IntelliJ IDEA.
  User: macrazds
  Date: 18-3-11
  Time: 下午3:43
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="image/png" language="java" %>
<%@ page import="java.awt.image.*,javax.imageio.*,java.io.*,java.awt.*" %>
<%
    //创建BufferedImage对象
    BufferedImage image=new BufferedImage(340,160,BufferedImage.TYPE_INT_RGB);
    //以image对象来获取Graphics对象
    Graphics g=image.getGraphics();
    //画图(所画图形会存储在image对象中):
    g.fillRect(0,0,400,400);
    //设置颜色  下同
    g.setColor(new Color(255,0,0));
    //画弧  下同
    g.fillArc(20,20,100,100,30,120);
    g.setColor(new Color(0,255,0));
    g.fillArc(20,20,100,100,150,120);
    g.setColor(new Color(0,0,255));
    g.fillArc(20,20,100,100,270,120);
    g.setColor(new Color(0,0,0));
    //设置文本字体
    g.setFont(new Font("Arial Black",Font.PLAIN,16));
    //画出字符串
    g.drawString("red:climb",200,60);
    g.drawString("green:swim",200,100);
    g.drawString("blue:jump",200,140);
    g.dispose();  //画完后将g对象dispose
    //将图像输出到页面的响应
    ImageIO.write(image,"png",response.getOutputStream());
%>

接着在其他页面直接调用img标签即可显示此图片:

<img src="img.jsp">

注:本例在chrome中无法将img.jsp显示,具体原因还不清楚,但可在firefox或IE等正常显示

重定向:

进入当前页面后,重定向(自动跳转)到另一页面,且不保留传给原页面request范围的属性及所有请求参数

//重定向到index.jsp
<% response.sendRedirect("index.jsp"); %>

增加Cookie:

Cookie:常用于网站记录客户信息,如用户名等。

写一个username的Cookie:

<%
    //首先获取名为name的请求参数
    String name=request.getParameter("name");
    //以获取到的name为值,创建一个名为username的Cookie对象
    Cookie c=new Cookie("username",name);
    //设置Cookie生存期,为3600秒
    c.setMaxAge(3600);
    //在客户端处添加新Cookie对象c
    response.addCookie(c);
%>

从客户端中获取指定Cookie:

<%
    //获取本机所有保留的Cookie
    Cookie[] cookies=new request.getCookies();
    //遍历获取到的Cookies
    for(Cookie c:cookies){
        //符合条件(这里的条件是Cookie对象的名称相符)的Cookie作相应处理(这里仅仅是打印出来)
        if(c.getName().equals("username"))
            out.println(c.getValue());
    }
%>

值得一提的情况是,若Cookie的内容是中文的话,可以用到以下指令:

java.net.URLEncoder.encode("中文内容","gbk");  //这里的返回值是String类型,可以直接作为Cookie构造方法的(值)参数
java.net.URLDecoder.decode(cookie.getValues());  //如果内容是中文,并已通过上面一条指令正确创建了中文内容的Cookie对象,这个可以直接放到out.println(String str);里面直接显示

session对象:

这个对象表示浏览器和服务器之间的一次会话,即浏览器连接到服务器开始,直到与服务器断开,为一次会话。常用于用户登陆系统等。此外,其范围内的属性可以在(来自同一个服务器的)多个页面间共享。

常用方法:

//设置一个session属性
session.setAttribute(String attName,Object attValue);
//获取一个session属性值
session.getAttribute(String attName);

相关推荐