一、page指令常用属性
属性 | 描述 |
language | 指定JSP页面使用的脚本言语,默认为Java |
import | 通过该属性来引用脚本言语中使用到的类文件 |
contentType | 用来指定JSP页面所采用的编码方式,默认为'text/htiml;charset=GBK' |
二、声明
<body>
<%!
String formateDate(Date date){
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy年MM月dd日");
return simpleDateFormat.format(date);
}
%>
第一次调用:今天是:<%=formateDate(new Date()) %>
<br>
第二次调用:今天是:<%=formateDate(new Date()) %>
</body>
三、request 对象的几个常用方法
方法名称 | 说明 |
String getParameter(String name) | 根据页面表单组件名称获取页面提交数据 |
String[ ] getParameterValues(String name) | 获取一个页面表单组件对应多个值时的用户的请求数据 |
void setCharacterEncoding(String charset) | 指定每个请求的编码,在调用request.getParameter()方法之前进行设定,可以用于解决中文乱码问题 |
request.getReqeustDispatcher(String path) | 返回一个RequestDispatcher对象,该对象的forword方法用于转发请求 |
四、response 对象的几个常用方法
方法名称 | 说明 |
addCookie(Cookie cookie) | 在客户端添加Cookie |
setContentType(String type) | 设置HTTP 响应的contentType 类型 |
setCharacterEncoding(String charset) | 设置响应所采用的字符编码类型 |
sendRedirect(String path) | 将请求重新定位到一个不同的url上 |
五、中文乱码
1、使用超链接进行数据传递时,采用的是用get方式提交请求,如果在传递数据中存在中文,使用reqeust对象直接获得时,容易产生乱码问题。因此,需要对数据进行重新编码。由于使用request对象获取的数据类型均是String类型,因而可以使用String 对象的方法实现数据重新编码。
语法:new String(需要编码的数据.getBytes("ISO-8895-01"),"GBK")
六、Cookie
a、Cookie 的作用表现在如下几个方面
- 对特定对象的追踪,如访问者的访问次数、最后访问时间、路径等。
- 统计网页浏览次数。
- 在Cookie有效期内,记录用户登录信息。
- 实现各种个性化服务,如针对不同用户喜好以不同的风格展示不同的内容。
b、在JSP中使用Cookie
1、导入类
2、创建Cookie 对象 Cookie newCookie = new Cookie(String key, Object value);
c、写入Cookie
response.addCookie(newCookie);
返回值类型 | 方法名称 | 说明 |
void | setMaxAge(int expriy) | 设置Cookie的有效期,以秒为单位 |
void | setValue(String name) | 在cookie创建后,为cookie赋予新的值 |
String | getName() | 获取cookie的名称 |
String | getValue() | 获取cookie的值 |
int | getMaxAge() | 获取cookie的有效时间,以秒为单位 |
d、读取Cookie
读取Cookie时会调用reqeust.getCookie()方法,该方法将会返回一个HTTP请求头中的内容对应的cookie对象数组,因此必须要通过遍历的方方式进行访问。
七、session
sessionid会返回到客户端,那么在客户端sessionid会保存在什么位置呢?在客户端保存用户信息使用的是cookie,因此保存sessionid的方式也是使用cookie实现的。
返回值类型 | 方法名称 | 说明 |
void | setAttribute(String key, Object value) | 以key/value 的形式保存对象值 |
Object | getValue(String key) | 通过key获取对象值 |
void | invalidate() | 设置session对象失效 |
String | getId() | 获取session id |
void | setMaxInactiveInterval(int interval) | 设定session 的非活动时间 |
int | getMaxInactiveInterval() | 获取session的有效非活动时间,以秒为单位 |
对比cookie与session有什么区别
1、session是在服务器端保存用户信息,cookie是在客户端保存用户信息。
2、session中保存的是对象,cookie保存的是字符串
3、session对象随会话结束而关闭,cookie可以长期保存在客户端。
4、session保存重要的信息,cookie通常保存不重要的用户信息。
八、include指令
include指令表示:在JSP编译时插入一个包含文本文件或代码的文件,这个包含的过程是静态包含。
九、application对象
返回值类型 | 方法名称 | 说明 |
void | setAttribute(String key, Object value) | 以key/value的形式保存对象值 |
Object | getAttribute(String key) | 通过key 获取对象值 |
String | getRealPath(String path) | 返回相对路径的真实路径 |
十、JSP的其它内置对象
1、pageContext:提供访问其他隐含对象的方法
方法名 | 说明 |
getRequest() | 获得request对象 |
getResponse() | 获得response对象 |
getSession() | 获得session对象 |
getOut() | 获得out对象 |
setAttribute() | 保存属性 |
getAttribute() | 获得属性 |
include() | 包含其主页面在pageContext 对象中保存的属性,只能在当前页面中去获取 |
page:表示当前页面,类似于Java中的this
config:用于存放JSP编译后的初始数据
exception:表示JSP页面运行时产生的异常,该对象只有在错误页面(page指令中设定 isErrorPage为 true的页面)中才能够使用。
十一、JNDI
1、学习如何用JNDI API 访问 Tomcat 中的JNDI 资源,并通过一个简单的任务来说明JNDI 的调用。要求:在Tomcat 中发布一条信息供所有的Web应用程序使用。
context.xml 文件为全局的上下文配置文件,对所有的Web 应用有效。
context.xml 文件的代码如下所示:
<Context>
<Environment name="tjndi" value="hello JNDI" type="java.lang.String" />
</Context>
然后编写JSP代码,测试连接,具体代码如下:
<span> </span><%
// context 提供了查找JNDI Resource 的接口
Context ctx = new InitialContext();
// java:comp/env/为前缀
String testjndi = (String)ctx.lookup("java:comp/env/tjndi");
out.print("JNDI:"+testjndi);
%>
运行效果如下:
名称 | 说明 |
name | 相对与java:comp/env 的名称 |
type | Java类名 |
value | 返回给应用的参数值 |
注意:
为了避免JNDI命名空间中的资源名称互相冲突,并且避免可移植性问题,JavaEE应用程序中的所有名称应该以字符串“java:comp/env”开始。
DataSource对象是由Web容器(Tomcat)提供的,因此不能在程序中采用创建一个实例的方式来生成DataSource对象,那么该如何获得一个数据源对象呢?javax.naming.Context提供了查找JNDI Resource 的接口,例如,可以通过以下代码获得名称为 jdbc/news 的数据源。
<span> </span>// context 提供了查找JNDI Resource 的接口
Context ctx = new InitialContext();
// 获取与逻辑名相关联的数据源对象
DataSource ds = (DataSource)ctx.lookup("java:comp/env/jdbc/news");
Connection conn = ds.getConnection(); // 获得数据库连接对象Connection
当程序结束数据库访问后,应该调用Connection 的close() 方法及时将Conneciton 返回给数据库连接池。
方法 | 说明 |
lookup(String name) | 返回与指定的名字绑定的对象 |
数据源的配置
context.xml 文件的配置(配置数据源时添加Resource元素)
<Context>
<Resource name="jdbc/news"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="wcadmin"
password="wcadmin"
driverClassName="oracle.jdbc.driver.OracleDriver"
url="jdbc:oracle:thin:@localhost:1521:oracle" />
</Context>
属性 | 说明 |
name | 指定Resource 的JNDI名字 |
auth | 指定管理的Resource的Manager,它有两个可选值:Container和Application. Container表示由容器来创建Resource,Application表示由Web应用来创建和管理Resource |
type | 指定Resource所属的Java类名 |
maxActive | 指定数据库连接池中处于活动状态的数据库连接的最大数目,取值为0,表示不受限制 |
maxIdle | 指定数据库连接池中处于空闲状态的数据库连接的最大数目,取值为0,表示不受限制 |
maxWait | 指定数据库连接池中处于空闲状态的最长时间(以毫秒为单位),超过这一时间将会抛出异常。取值为-1,表示可以无限制等待 |
username | 指定连接数据库的用户名 |
password | 指定连接数据库的密码 |
driverClassName | 指定连接数据库的JDBC驱动程序 |
url | 指定连接数据库的URL |
注意:不同的Web服务器,配置数据源的方式是不一样的。
web.xml 文件的配置
<web-app>
<resource-ref>
<description>news DataSource</description>
<res-ref-name>jdbc/news</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
属性 | 说明 |
description | 对所引用资源的说明 |
res-ref-name | 指定所引用资源的JNDI名字,与<Resource> 元素中的name属性对应 |
res-type | 指定所引用资源的类名字,与<Resource>元素中的 type属性对应 |
res-auth | 指定管理所引用资源的Manager,与<Resource>元素中的auth属性对应 |
添加数据库驱动
通过数据源访问数据库,由于数据源由Tomcat创建并维护,所以必须把JDBC驱动程序复制到Tomcat的lib目录下
小结:
在使用JNDI获得数据源对象时,可分为如下四个步骤。
(1)配置context.xml 文件
(2)配置web.xml 文件
(3)添加驱动
(4)进行代码编写,使用lookup() 方法获得数据源对象。