网页第三次大培训
文章目录
一、servlet是啥
1、介绍
Java servlet技术简称Servlet技术,是Java开发Web应用的底层技术。Servlet是一个Java程序,一个servlet应用有一个或多个servlet程序。 Servlet应用无法独立运行,必须运行在servlet容器中。Servlet容器将用户的请求传递给servlet应用,并将结果返回给用户。Tomcat就是一个servlet容器,Web用户通过浏览器可访问servlet应用,通常web浏览器又叫web客户端。
用简单的图来表示:
2、API
Servlet API 有以下四个java包:
- javax.servlet
- javax.servlet.http
- javax.servlet.annotation
- javax.servlet.descriptor
以上接口定义了servlet与servlet容器之间的契约。
大多数应用程序都要与HTTP结合起来使用,可以利用第二个包,使用时还要借助HttpServletRequest和HttpServletResponse对象。
主要调用doGet、doPost、doHead等方法,其中doGet和doPost方法最常用。
具体方法可以查看 API文档
举个栗子
Request 接口里的一些方法:
- getContentLength()
- getContentType()
- getParameter(String name)
- getProtocol()
二、第一个servlet应用
- 新建工程如图,并配置好tomcat
- 找到tomcat的安装目录下的lib,将servlet-api.jar导入
- 继承HttpServlet类,写doGet和doPost方法
- 写doGet方法,写响应。
- 配置url,使之可以被访问到。以下两种方式都可以。
- 来一波测试吧。
- 写请求。
- 再来一波测试吧。
三、使用jdbc访问关系数据库
1、什么是关系型数据库?
关系数据库,是建立在关系模型基础上的数据库。标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
表是以行和列的形式组织起来的数据的集合。一个数据库包括一个或多个表。例如,可能有一个有关作者信息的名为 authors 的表。每列都包含特定类型的,如作者的姓氏。每行都包含有关特定作者的所有信息:姓名、住址等等。在关系型数据库当中一个表就是一个关系,一个关系数据库可以包含多个表。
2、如何访问关系数据库?
一组应用程序接口(一组类和一组方法);
一个程序过程:建立连接发送SQL语句处理结果;
设计关键:代码重用(一段代码访问不同的数据库)。
由此,我们引出jdbc这个概念。
3、jdbc简介
Java数据库连接(Java Database Connectivity:JDBC),Java运行平台的核心类库中的一部分,由一组Java类和接口组成,提供访问各种数据库的统一API。
不同具体数据库的访问针对这一组访问接口进行实现,这些不同的实现被称为对应数据库的"JDBC 驱动程序"。
应用程序开发人员无需关心具体数据库的“JDBC 驱动程序”的实现细节,只需在程序初始化的时候指定采用哪个“JDBC 驱动程序”即可,其后的数据库操作完全针对访问接口进行编程。
4、JDBC应用程序体系结构
使用JDBC的应用程序(黄色):针对JDBC接口进行编程,Java数据库应用程序开发者。
JDBC for DatabaseX(红色框):针对具体数据库DatabaseX实现这一组抽象的JDBC接口。
一组抽象的JDBC接口(绿色):JDK
5、JDBC应用程序编程步骤
5.1 实现步骤
(1)、装载数据库驱动驱动程序(只做一次)
(2)、建立数据库连接对象(Connection)
(3)、创建执行SQL的语句对象(Statement)
(4)、执行SQL语句,如果需要处理执行SQL语句的返回结果集,则处理SQL语句的返回的ResultSet对象
(5)、释放资源
5.2 具体实现过程
(1)装载数据库驱动程序类
JDBC可以调用Java数据库驱动程序和相应的数据库建立连接
方式1:Class.forName(驱动程序类名字符串);
推荐这种方式
其他方式暂不介绍。
例子:使用本地协议驱动连接SQL Server数据库
Class.forName(com.mysql.jdbc.Driver);
(2)建立连接(Connection)
使用address、用户名和密码创建数据库连接对象
语句
Connection conn =
DriverManager.getConnection(addr, username, password);
address格式
JDBC:子协议:子名称://主机名(或IP):端口/数据库名;属性名=属性&…
例子
String addr = "jdbc:mysql://localhost:3306/esta?useUnicode=true&characterEncoding=utf8";
Connection conn=DriverManager.getConnection(addr, "sa", "xxx");
(3)创建执行语句对象(Statement),处理结果集
方法一:Statement接口
Statement st = conn.createStatement();
方法二:PreparedStatement接口(预编译的statement,防止SQL注入,建议尽量用PreparedStatement接口)
PreparedStatement ps = conn.prepareStatement(sql);
(Sql注入:statement可以看见sql语句的内容,防止有人利用这个漏洞进行攻击。)
(4).xxxStatement对象执行SQL的语句,处理结果集
//执行sql语句返回数据集(带查询参数)
String sql ="select * from BookInfo where bookId=?";
ps.setInt(1, 123); //设置查询参数(从1开始编号)
ResultSet rs=ps.executeQuery(); //执行SQL语句
//逐行访问数据集,输出到控制台
if(rs.next()==true){
System.out.print( "bookId=" + rs.getInt("bookId") );
System.out.println(",bookName=" + rs.getString("bookName") );
}
(5). 关闭数据库连接,释放资源
数据库连接(Connection)是非常稀有的资源,用完后必须马上释放,Connection的使用原则是尽量晚创建,尽量早的释放
语句
rs.close(); //关闭数据集
ps.close(); //关闭SQL语句对象
conn.close(); //关闭数据库连接对象
四、项目实战
例子:在控制台输出图书表的所有图书信息
1、先在数据库(由你的addr决定)中创建表BookInfo
2、过程
(1)新建一个java项目,名称为library;
(2)在lib下加入jar包;
(3)新建访问数据库的类BookInfoDao.java
(4)查询所有图书信息(BookInfoDao.java)
3、代码如下:
public class BookInfoDao{
public void queryBookInfos(){
try{
// 1.装载驱动程序类(返回com.mysql.jdbc.Driver对象)
Class.forName("com.mysql.jdbc.Driver");
// 2.设置连接URL、用户名和密码,建立数据库连接
String addr = "jdbc:mysql://localhost:3306/esta?useUnicode=true&characterEncoding=utf8";
String username ="root";
String password = “ “;
Connection conn = DriverManager.getConnection(addr, username, password);
if(!conn.isClosed()){
System.out.println("连接成功");
}
// 3.建立SQL语句对象
Statement st = conn.createStatement();
// 4.执行SQL查询,返回数据集
ResultSet rs = st.executeQuery("select * from BookInfo");
//遍历数据集,输出到控制台
while (rs.next()==true) {
System.out.print(rs.getRow()+"bookId="+rs.getInt("bookId"));
System.out.println(" bookName="+rs.getString("bookName"));
}
// 5.关闭数据库连接
conn.close();
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String[] args) {
BookInfoDao dao = new BookInfoDao();
dao.queryBookInfos();
}
}