Servlet第四章知识点总结——资源访问
分布式开发
1. 分布式开发
a) 什么是分布式开发:
i. 是指将用户界面、控制台服务、数据库管理三个层次部署在不同的位置上。
ii. 用户界面是客户端实现的功能,控制台服务是一个专门的服务器,数据管理是在一个专门的数据库服务器上实现的。
b) 特点:
i. 运行在不同的地址空间中的计算器互相通讯.
ii. 双层模型(客户机/服务器)由多个客户跟一个或多个服务器通话.
2. 分布式Java技术
a) JAVA数据库连接(JDBC)
b) Java远程方法调用(RMI / IIOP)
c) 公共对象请求代理体系结构( CORBA)通过Java接口描述语言(IDL)描述
3. 资源类型
a) 数据库
b) 网页
c) 文件
d) 图片
e) ……
目标
熟悉和掌握如何访问数据库资源
熟悉和掌握如何访问页面资源
熟悉和掌握如何访问环境信息
知识点预览
数据访问
Servlet与资源访问
数据访问
1. JAVA数据库连接(JDBC)
a) 作用:
i. 使JAVA客户端程序与数据库隔断
ii. 提供一个由数据库驱动实现的通用接口类
b) 创建步骤:
i. 第一步:获得数据库连接参数信息
ii. 第二步:注册数据库驱动
iii. 第三步:实例化连接对象
iv. 第四步:实例化statement对象
v. 第五步:执行SQL语句
vi. 第六步:处理结果集
vii. 第七步:关闭对象,释放资源
2. 一个数据库Servlet示例
<init-param>
<param-name>driver</param-name>
<param-value>com.mysql.jdbc.Driver</param-value>
</init-param>
<init-param>
<param-name>url</param-name>
<param-value>jdbc:mysql://localhost:3306/mydatabase</param-value>
</init-param>
<init-param>
<param-name>user</param-name>
<param-value>root</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>admin</param-value>
</init-param>
3. JDBC 优势与不足
a) 优势:
JDBC能够处理多用户并发访问同一数据引发的并发问题.
b) 不足
i. 每建立一个数据库连接需要一至三秒.
ii. 每一个请求都要创建一个新的连接,效率是很低的.
iii. 当数据库环境发生变化时,应用程序会出错
1. 数据库名称、登录信息
2. 数据库类别
4. 通过JNDI访问数据库
a) 必须有一个数据源使用JNDI绑定
b) Servlet通过一个映射到JNDI名称的数据源引用名称来获取数据源
<Resource name="jdbc/wcleye"
type="javax.sql.DataSource" password="admin"
driverClassName="com.mysql.jdbc.Driver" username="root"
maxIdle="2" maxWait="10" url="jdbc:mysql://localhost:3306/mydatabase"
author="Container"
/>
5. 数据源示例
try{
Context initCtx=new InitialContext();
ds=(DataSource)initCtx.lookup("java:comp/env/jdbc/wcleye");
if(ds!=null){
Connection con=ds.getConnection();
return con;
}else{
return null;
}
}catch(Exception ne){
ne.printStackTrace();
return null;
}
Servlet与资源访问
1. 分发不同的结果到一个视图页面
a) 把结果集封装到一个JavaBean中
b) 从一个ServletContext获取分发器
c) RequestDispatcher 类
d) 分发请求到一个新的资源上
2. 封装结果
a) 创建一个持有学生状态的学生类
3. 在Servlet中修改doGet()方法
4. 在Servlet中增加一个dispResultSet()方法
5. 在Servlet中修改doGet()方法
6. 视图页—users.jsp
<table>
<tr><td>Id</td><td>name</td><td>password</td></tr>
<%
ArrayList users=(ArrayList)request.getAttribute("users");
Iterator i=users.iterator();
while(i.hasNext()){
User s=(User)i.next();
%>
<tr>
<td><%=s.getId() %></td><td><%=s.getName() %></td><td><%=s.getPassword() %></td>
</tr>
<%
}
%>
7. 分发请求到一个新的资源上
a) 从一个请求分发器中有两种方法来分发请求
i. Forward:把请求从一个servlet跳向同一个服务器上的另一个资源上
ii. Include: :包括资源的内容
b) 两种得到请求分发器的方法
i. ServletRequest.getRequestDispatcher() //相对路径
ii. ServletConext.getRequestDispatcher() //绝对路径
c) 新资源可以访问其他不同范围属性的请求和响应
i. javax.servlet.ServletContext—application in jsp
ii. javax.servlet.http.HttpSession—session in jsp
iii. javax.servlet.ServletRequest—request in jsp
iv. javax.servlet.jsp.PageContext—page in jsp
8. 访问环境条目
a) 通过JNDI服务
b) 部署描述包括:
Environment name="isReady" value="true" type="java.lang.Boolean" override="false"/>
c) 在servlet中的代码片断
资源访问回顾
数据库访问
通用JDBC客户端
通过JNDI
资源可以通过请求分发器访问:
jsp
Servlet
资源可以通过JNDI访问:
环境变量
资源环境变量
EJB(企业级应用JavaBean )