JSP程序设计【三】

一、JSP内置对象


1、什么是内置对象

注意程序片、JSP标记等对应的所在位置

2、request对象

当用户请求一个JSP页面时,JSP页面所在的Web服务器会将用户的请求信息封装到内置对象request。request对象主要用于接收客户端通过HTTP协议传送给服务器端的数据

(1)获取通过表单提交的信息

  • getParameter(String name) :用于获取客户端传送给服务器端的指定请求参数的值,返
    回值是字符串对象,若指定请求参数不存在,返回null。
  • getParameterValues(String name): 用于获取客户端传送给服务器端的指定请求参数的
    所有值,返回值是字符串数组。

单值:

多值:

(2)获取通过URL(如超链接)提交的信息

(3)一些异常处理

①使用表单时出现 NullPointerException 异常

原因:在本页面处理本页面中的表单提交的数据,客户端还未有机会提交,页面已经执行了一遍
获取得到的对象值为 null在未判断的情况下使用该对象则抛出 NullPointerException 异常

解决办法:添加判断语句

②中文乱码问题

Post和Get都是表单属性Method的可选值,Method的默认值为Get

  • 表单使用 post 方式提交

  • 表单使用 get 方式提交

  • 通过URL形式(如超链接)传递的信息

(4)request对象存储数据

在本页面、include、forward的页面中有效

3、response 对象

response对象封装了对客户的响应信息,通过response对象可以对请求做出动态响应、向用户端发送数据。它与request组成了一对接收、发送数据的对象

(1)动态响应contentType属性

  • void setContentType(String s)

(2)设置响应的HTTP文件头

动态添加新的响应头及其值,并将它们发送给客户浏览器,如果添加的头已经存在,则先前的头会被覆盖

  • void setHeader(String head ,String value)
  • void addHeader(String head,String value)
  • String getHeader(String name)
  • Collection< String > getHeaderNames()
  • Collection< String > getHeaders(String name)

(3)页面重定向

浏览器改变访问地址,重定向(请求)到由location指定的网址

  • void sendRedirect(String location) //任意网址

forward转发与sendRedirect重定向的区别:

(4)修改响应状态行

当JSP引擎对用户请求进行响应时,它发送的首行称做状态行状态行包括3位数字的状态代码和对状态代码的描述可通过response修改状态行,但通常不需要这么做

例如:设置response.setStatus(408);访问就会显示404

4、out 对象

out对象是一个输出流对象,用来向客户端输出数据

来自:out instanceof javax.servlet.jsp.JspWriter extends java.io.Writer

5、session 对象

(1)session会话

HTTP(Hyper Text Transfer Protocol)是无状态的服务器对客户端发出的请求响应后连接就关闭了,服务器端不保留连接的相关信息,每次请求之间都是独立的。

然而,很多应用是需要“保留和跟踪客户状态”的,如教务系统、购物系统、邮件系统等

从客户端连接到服务器的一个Web服务目录开始,直到客户端与服务器端断开连接为止的一个过程,称为一次会话,使用session对象表示。

  • 服务器会为每个客户自动创建一个session对象,并为该对象分配一个String类型的唯一标识id,用于区分不同客户,服务器将该id发送到客户端,存放在客户的Cookie中

  • session对象是按照区别不同的用户和Web服务目录分配的

    • 同一用户在同一Web服务目录中的session都相同
    • 同一用户在不同Web服务目录中的session不相同
    • 不同用户的session都是不同的(无论服务目录是否相同)
  • 由于cookie可以被人为禁止,必须有其他机制以便在cookie被禁止时仍然能够把session id传递回服务器

    • String encodeRedirectURL(String url) //可以跨Web服务目录,输入url返回新url包含session id
    • String encodeURL(String url)//限于本Web服务目录,输入url返回新url包含session id
    • 表单隐藏字段实现服务器会自动修改表单,添加一个隐藏字段,以便在表单提交时能够把session id传递回服务器

(2)session对象存储数据

(3)session对象的生存期限

  • 客户是否关闭浏览器

  • session对象是否调用invalidate()方法使session无效

  • session对象是否达到设置的最长“发呆”时间(默认30min)

    • 设置发呆时间的方法

6、application 对象

application对象保存Web应用程序中公有的数据,可存放全局变量。服务器启动后自动创建application对象,此对象将一直有效,直到服务器关闭不同用户可以对该对象的同一属性进行操作;在任何地方对此对象属性的操作,都将影响到其他用户对此对象的访问。因此,application对象可以实现多客户间的数据共享 如网站访问量计数等

(1)application对象存储数据

二、JavaBean


1、什么是JavaBean

JavaBean是一个遵循特定写法的Java类,它通常具有如下特点:

  • 提供一个默认的无参构造函数。
  • 需要被序列化并且实现了 Serializable 接口。
  • 可能有一系列可读写属性,一般是私有的
  • 可能有一系列的 getter 或 setter 方法。

注意,由于需要实例化,所以JavaBean不支持抽象类

JavaBean的属性可以是任意类型,并且一个JavaBean可以有多个属性。每个属性通常都需要具有相应的setter、 getter方法,setter方法称为属性修改器,getter方法称为属性访问器。一个JavaBean的某个属性也可以只有set方法或get方法,这样的属性通常也称之为只写、只读属性。

2、JSP中使用JavaBean

(1)直接当做普通类使用

直接当做普通类使用,导入包使用即可

(2)通过JSP动作标记使用

主要有三种动作标签

  • <jsp:useBean>:声明并创建对象。
  • <jsp:setProperty>:设置指定属性的值。
  • <jsp:getProperty>:获取指定属性的值。
①useBean

<jsp:useBean id=”对象名” class/type=”类名” scope=”有效范围”/>

scope默认值是page

Scope属性有page, requese, session, application四个可选值,分别代表页面,请求,会话,应用4种范围。

class和type的区别就是,若名为id的对象为空则class方式会创建,而type不会,它会抛出异常

也就是说使用class时,它是先判断拿不拿得到实例的bean,若拿不到就使用new关键字实例化一个,而使用的是type时,它只是查找指定的范围中是否存在,在不存在时又没使用classbeanName 指定type就会抛出异常,因此在使用type时就需要注意这点。

②getProperty

<jsp:getProperty name=” 对象名” property=” 属性名”/>

注意,该动作标记的结果是直接显示在页面上!!!

③setProperty

<jsp:setProperty name=” 对象名” property=”属性名” value=”指定值”/>

设置的几种方法,这几种变型主要处理form表单提交时的属性赋值:

  • <jsp:setProperty name=” beanname “ property=” propertyname” />将propertyname的值提交给beanname中的属性名称相同的属性。
  • <jsp:setProperty name=” beanname” property=” propertyname” param=” paramname”/>将请求参数名称为paramname的值提交给propertyname属性。
  • <jsp:setProperty name=” beanname” property=”*” />将所有的属性与请求参数关联,实现自动复制并自动转换数据类型。

注意:设置值的时候,value若填写字符串则会自动转换为property填写的Bean属性的相应的类型,而若value填写value="<%=XX%>"则不会自动转换,而是保留原形式

(3)动作标记和程序片结合使用

因为动作标记最终还是转换成Java类,所以可以配合程序片使用。例如声明使用动作标记,之后程序片就可以直接使用生成的对象

-----------------------本文结束 感谢阅读-----------------------
坚持原创技术分享,您的支持将鼓励我继续创作!恰饭^.^~