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);