JSP总结笔记
第一章:动态网站开发基础
一: 认识和熟悉B/S技术。
(1).动态网页是指在服务器端运行的程序或者网页,他们会虽不同客户,不同时间,返回不同内容。
二:开发JSP动态网站的步骤:
(1).创建一个Web项目。
(2).设计Web项目的目录结构。
(3).编写Web项目的代码。
(4).部署Web项目。
(5).运行Web项目。
三:网页项目的目录结构
(1).src目录:用来存放java源文件。
(2).WebRoot目录:是这个Web应用的顶层目录,也称为文档根目录,由以下部分组成。
[1]:META-INF目录:系统自动生成,存放系统描述信息。
[2]:静态文件:包括所有的HTML网页,CSS文件,图像文件等。一般按功能以文件夹形式分类。
[3]:JSP文件:利用jsp可以很方便的在页面生成动态的内容。
(3).WEB-INF:该目录存在于文档根目录下面。但是,该目录不能被引用.既该目录下的文件无法对外发布。
(1).lib目录:包含Web应用所需的.jar或者.zip文件,例如SQL 2005数据库的驱动文件。
(2).Web.xml:Web应用的初始化配置文件,非常重要,不能将其随意修改或者删除。
四: Web程序的调试和排错。
错误类别:
(1):没有启动Tomcat,或者没有在预期的端口启动Tomcat服务
(2):没有部署Web应用
(3):URL输入错误
(4):目录不能被应用。例如:将文件放在了WEB-INF文件下。此文件夹是不能被外界所引用的。
第二章:用集合存储对象
一:集合可用于不知道数据大小时使用。或者要求存储数据时值和编号一一对应关系时使用。
二:完整的java集合框架位于java.util包中,包含众多的接口和类。
三:接口:Collection是最基本的集合接口,一个Collection代表一组元素。
(1):List接口集成自Collection接口,List时有序集合,允许有相同的元素,使用List能够精确的控制每个元素的插入位置,用户能够使用索引(元素在List中的位置,类似于数组中的下标)来访List很像。
(2):Map提供key(键)到value(值)的映射。一个Map中不能包含相同的key,每个key只能映射一个value。(如果key重复,将覆盖以前的键-值对)。
四:具体类:实现List接口的常用类有ArrayList和LinkList.他们都可以容纳所有类型的对象,包括null,并且都保证元素的存贮位置。
(1):ArrayList实现了可变大小的数组,他的优点在于遍历元素和随机访问元素的效率比较高。
(2):LinkList提供了额外的addFirst(),addLast(),removeFirst(),removeLast()等方法,可以在LinkList的首部或尾部执行插入或者删除操作,这些方法使得LinkList可被用做堆栈(stack)或者队列(queue)。
(3):HashMap时Map接口的实现类,实现一个键到值的映射的哈希表。
五:List接口中定义的各种常用方法
(1):add(Object o)[返回类型:boolean](在列表的末尾顺序添加元素,起始索引位置从0开始)。
(2):size()[返回类型:int(返回列表中元素的个数)。
(3):get(int index)[返回类型:Object](返回指定索引位置处的元素,值得注意的是:取出的元素时Object类型,所以使用前要进行强制类型转换)。
(4):add(int index,Object o)[返回类型:void](在指定的索引位置添加元素,值得注意的是:索引位置必须是介于0和列表元素个数之间的)。
(5):contains(int index,Object o)[返回类型:boolean](判断列表中是否存在制定的元素)。
(6):remove(Object o)[返回类型:boolean](从列表中删除元素)。
六:LinkList的一些特殊方法:
(1):addFirst(Object o)[返回类型:void](在列表的首部添加元素)。
(2):addLast(Object o)[返回类型:void](在列表的尾部添加元素)。
(3):getFirst()[返回类型:Object](返回列表中的第一个元素)。
(4):getLast()[返回类型:Object](返回列表中的最后一个元素)。
(5):removeFirst()[返回类型:Object](删除并返回列表中的第一个元素)。
(6):removeLast()[返回类型:Object](删除并返回列表中的最后一个元素)。
七:HashMap中的常用方法:
(1):put(Object key,Object value)[返回类型:Object](以键-值对的方式进行存储。值得注意的是:键必须时唯一的,值可以重复,如果添加了重复的键,那么最后加入的键-值对将替换掉原先的键-值对)。
(2):keySet()[返回类型:Set](返回键的集合)。
(3):values[返回类型:Collection](返回值的集合)。
(4):containKey(Object key)[返回类型:Object](如果存在由指定的键映射的“键-值对”,返回true)。
(5):get(Object key)[返回类型:Object](根据键返回相关联的值,如果不存在指定的键,返回null)。
(6):remove(Object key)[返回类型:Object](删除由指定的键映射的“键-值对”)。
第三章:访问数据库
一:JDBC时java数据库连接(java DataBase Connectivity)技术的简称。提供连接各种常用数据库的能力。
二:java应用程序可以使用集成在JDK中的java.sql和javax.sql包中的JDBC API来连接和操作数据库
三:JDBC API由sun公司提供,提供了java应用程序于各种不同数据库交互的标准接口,如:Connection(连接)接口,Statement接口,PreparedStatement接口,ResultSet(结果集)接口。
四:JDBC API 可以做三件事:与数据库建立连接,发送SQL语句,处理结果。
(1):DriverManager类:依据数据库的不同,管理JDBC驱动。
(2):Connection接口:负责连接数据库并担任传送数据的任务。
(3):Statement接口:由Connection产生,负责执行SQL语句。
(4):ResultSet接口:负责保存Statement执行后产生的查询结果。
五:开发JDBC应用程序的基本步骤:
(1):将JDBC驱动装在入java虚拟机中。可以使用Class.forName()方法。如果系统不存在给定的类,则会引发异常,异常类型为ClassNotFoundException。
(2):加载驱动。并与数据库建立连接。DriverManager类的getConnection()方法建立与数据库的连接。这个方法接收三个参数,分别表示URL,数据库用户名和密码。
(3):发送SQL语句,并得到结果集。得到的结果集类型为ResultSet的对象。
(4):处理结果。使用ResultSet对像的next()方法将光标(cursor)指向下一行。因为最初光标位于第一行之前(既列名那一行上),因此第一次调用next()方法会把光标置于第一行上。如果到达结果集的末尾,则ResultSet的next()方法会返回false。getXXX提供了获取当前行中某列值的途径,列名或列号可用于标识要从中获取数据的列。
六:两种常用的驱动方式:
(1):JDBC 驱动有数据库厂商提供,我们实际编程时,有两种常用的驱动方式。一:JDBC-OCBC桥连。适用于个人的开发与测试。(桥连方式可以访问所有的ODBC可以访问的数据库,但是JDBC-ODBC桥连不能提供非常好的性能,一般不适合在实际系统中适用)。
[建立桥连代码]:Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con=DriverManager.getConnection("jdbc:odbc:数据库名称","数据库登录名","数据库密码");
另一种是:纯java驱动方式,它直接同数据库进行连接,在生产型开发中,适用纯java驱动方式比较好。
使用纯java方式建立连接时:要导入jar包到工程中. 例如:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con=DriverManager("jdbc:sqlserver://localhost:1433;databaseName=数据库名称","数据库登录名","数据库密码");
六:Statement 可以通过Connection对象产生Statement的实例
ResultSet executeQuery(sql语句) 可以执行SQL查询并获取到ResultSet对象
int executeUpdate(sql 语句) 可以执行插入,删除,更新等操作,返回受影响的行数
boolean execute(sql 语句) 可以执行任意SQL语句
Statement 在执行数据库操作时传入SQL语句:statement.executeUpdate(sql语句)
七:PrepareStetement接口继承自Statement接口
PrepareStetement 在获得实例时传入参数:con..prepareStatement(sql语句)
第四章:
1. JSP指令一般以<%@ 开始,以 %>结束
2. 小脚本格式:<% %>
3. 表达式:<%= %>
4. 注释:
<!--这是HTML注释,客户端可以看到此注释 -->
<%--这是JSP注释,客户端看不到此注释-- %>
5. 设置欢迎页面:在WEB-INF下面的web.xml中设置
<?xml version="1.0" encoding="UTF-8"?>
<web-app >
<welcome-file-list>
<welcome-file>要设置的欢迎页面名称.jsp</welcome-file>
</welcome-file-list>
</web-app>
6. 在Tomcat的conf目录下有一个web.xml文件,这是Tomcat容器的全局配置文件
7. web容器处理JSP文件请求的三个阶段:
a) 翻译成java源码
b) 编译成字节码
c) 执行
第五章
1. out.print()用来在页面输出数据
2. 在JSP中用page指令导入包
第六章:
1. JSP内置对象
2. request 用户请求
String getParameter(string name) 根据表单组件名称获取页面提交数据
String []getParameterValues(string name) 获取一个页面表单组件对应多个值时的用户请求数据
void SetCharacterEndoding(string charset) 制定请求的编码,在调用retuest. getParameter(string name)之前设定
getRequestDispatcher(String path) 返回一个RequestDispatcher对象,该对象的forward方法用于转发请求
3. 内置对象response 响应客户请求
response常用的方法: response.sendRedirect(String location)这个方法用来将请求重新定位到一个不同的url
4. request.getRequestDispatcher("跳转页面").forward(request,response);
5. 客户端没有重新建立链接,客户端的url地址不会发生改变
6. response.sendRedirect(String location) 客户端重新建立了链接,url地址发生了改变
7. session
8. session.setAttribute(String key,Object value); 往session中放值
9. session.getAttribute(String key); 从session中拿值
10. include 指令:导入外部文件
11. application 对象:
application.setAttribute(String key,Object value); 以键值方式存值
application.getAttribute(String key); 拿值
12. BaseDao中的代码:
package dao;
import java.sql.*;
public class BaseDao {
//数据库驱动
public static final String DRIVER="com.microsoft.sqlserver.jdbc.SQLServerDriver";
//连接数据库
public static final String URL="jdbc:sqlserver://localhost:1433;databaseName=chenkang";
public static final String DBNAME="sa"; //数据库用户名
public static final String DBPASS=""; //数据库密码
/**
* 获取数据库连接
* @return
*/
public Connection getConn(){
Connection con=null;
try {
try {
Class.forName(DRIVER);
} catch (ClassNotFoundException e) {
System.out.println("无法加载所需的驱动类!");
e.printStackTrace();
}
con=DriverManager.getConnection(URL,DBNAME,DBPASS);
} catch (SQLException e) {
System.out.println("5555555操作数据库出现异常,请检查!");
e.printStackTrace();
}
return con;
}
/**
* 执行增删改通用方法
* @param sql
* @param param
* @return
*/
public int executeSQL(String sql,String []param){
Connection con=null;
PreparedStatement ps=null;
BaseDao bDao=new BaseDao();
int num=0;
try {
con=bDao.getConn();
ps=con.prepareStatement(sql);
if (param!=null) {
for (int i = 0; i < param.length; i++) {
ps.setString(i+1, param[i]);
}
}
num=ps.executeUpdate();
} catch (Exception e) {
System.out.println("操作数据库是出现错误,请重试!错误原因:");
e.printStackTrace();
}finally{
bDao.closeAll(null, ps, con);
}
return num;
}
/**
* 关闭数据库连接,释放资源。
* @param rs 结果集
* @param ps PreparedStatement对象
* @param con 数据库连接
*/
public void closeAll(ResultSet rs,PreparedStatement ps,Connection con){
if (rs!=null) {
try {
rs.close();
} catch (SQLException e) {
System.out.println("关闭结果集是出现异常!");
e.printStackTrace();
}
}
if (ps!=null) {
try {
ps.close();
} catch (SQLException e) {
System.out.println("关闭PreparedStatement时出现异常!");
e.printStackTrace();
}
}
if (con!=null) {
try {
con.close();
} catch (SQLException e) {
System.out.println("关闭数据库连接时出现异常!");
e.printStackTrace();
}
}
}
}