Day10_Tomcat
1.回顾
1.批处理
statement
1.将执行sql语句的命令加入到批处理的命令列表中
addBatch(String sql)
2.批处理的命令加完之后,批处理执行
executeBatch()
3.清理批处理的命令列表
clearBatch()
preparedStatement
1.将执行sql语句的命令加入到批处理的命令列表中
addBatch()
2.批处理的命令加完之后,批处理执行
executeBatch()
3.清理批处理的命令列表
clearBatch()
statement:擅长做不同sql语句操作
preparedStatement:擅长做相同sql语句操作
Statement和PreparedStatement的区别?
1.定义:
Statement执行静态sql语句,不能预编译sql语句
PreparedStatement 即可以执行静态sql,也可以执行动态sql,sql语句可以预编译
功能和使用:
Statement在做sql语句拼接的时候比较复杂,sql注入攻击
PreparedStatement不需要拼接,解决|避免sql注入攻击
批处理:
statement:擅长做不同sql语句操作
preparedStatement:擅长做相同sql语句操作
事务:
1.开启事务
Connection
setAutoCommit(false)
2.进行相对应的sql操作
3.如果执行没有问题 commit()
如果执行优问题 rollback()--->catch()
连接池
c3p0|dbcp|druid
c3p0
导入2个包
1.创建连接池对象
ComboPooledDataSource ds = new ComboPooledDataSource();
2.创建一个c3p0-config.xml文件---》文件名不能修改---》放到src下
3.获取连接池连接
ds.getConnection()
4.CRUD
dbcp
导包3个
dbcp核心包
pool2包
commion-logging
1.加载配置文件---》创建的以.properties为后缀的文件---》src下
InputStream is = 当前类名.class.getClassLoader.getResourceAsStream("文件名");
Properties p = new Properties();
p.load(is);
2.获取数据源
DataSource ds = BasicDataSourceFactory.createDataSource(p);
3.获取连接池连接
ds.getConnection();
Druid连接池操作与以上的dbcp操作一致。
封装和优化:
封装的是获取连接池连接和关闭|释放资源(将连接放入到连接池)
考虑到线程并发问题--->ThreadLocal--->线程本地变量--->将本地的变量复制给每一个线程
JdbcUtils--->封装的工具类
class JdbcUtils{
static ThreadLocal<Connection> tl;
static ComboPooledDataSource ds;
static{
t1 = new ThreadLocal<>();
ds = new ComboPooledDataSource();//获取到数据源
}
//获取连接池连接
public static Connection getCon(){
Connection con = null;
con = t1.get();//获取当前线程的本地变量值
if(con==null){
con = ds.getConnection();
tl.set(con);//给当前线程设置本地变量值
}
return con;
}
//释放资源
public static void closeSource(){
Connection con = tl.get();
if(con!=null){
tl .remove();//将本地变量与当前线程解除关系
try{
con.close();
}catch(SQLException e){
}
}
}
}
dbutils
JDBC的框架---》微型的---》对JDBC做了一个二次封装
API:
Dbutils--->
设计的dbutils框架的连接,关闭,回滚,提交
close(Connection con ):关闭连接
commitAndClose(Connection con ):先提交在关闭连接
commitAndCloseQuietly(Connection con):先提交在关闭连接,关闭连接的手,隐藏当前的抛出的异常,SQLException
QueryRunner:核心类,实现数据库的操作(增删改查)
ResultSetHandler<T>:结果集映射器---》接口
映射规则:将结果及中的一行或者所有行,一列或者所有列映射到单个对象中或者Map或者集合中
实现类:
Beanhandler<T>:将结果接中结果的第一行映射到一个bean(实体)对象
BeanListHandler<T>:将结果集中的所有行映射到bean对象中集合对象List<T>
ScalarHandler<T>:将结果集中的一列映射到一个Object|Number|Long类型对象,适合聚合查询
Object query(Connection con,String sql,ResultSetHandler<T>,Object...objects):查询操作
int update(Connection con ,String sql,Object...objects):执行DML操作
封装BaseDao:
class BaseDao<T>{
QueryRunner qr;
{
qr= new QureryRunner();
}
//DML
public int update(String sql,Object...obj){
return qr.update(JdbcUtils.getCon(),sql,obj);
}
//查询单个
public T queryOne(String sql,Class<T> clazz,Object...obj){
return qr.query(JdbcUtils.getCon(),sql,new BeanHandler<T>(clazz),obj);
}
//查询多个
public List<T> queryOne(String sql,Class<T> clazz,Object...obj){
return qr.query(JdbcUtils.getCon(),sql,new BeanListHandler<T>(clazz),obj);
}
//聚合查询
public Number queryCount(String sql){
return qr.query(JdbcUtils.getCon(),sql,new ScalarHandler<Number>());
}
}
如果现在有一个对象User--->CRUD
class UserDao extends BaseDao<User>{
}
如果现在有一个对象Person--->CRUD
class UserDao extends BaseDao<Person>{
}
单元测试:
/**
1.public 修饰
2.没有返回值
3.没有参数
@Test(出现在方法上) 注解:具有特定功能的标识
@Before :在其他方法执行的前面执行
@After:在其他方法的后边执行
@Test
public void test1(){
}
*/
2.今日的目标
tomcat:
tomcat的配置和应用
3.Tomcat
项目架构:
B/S:浏览器--》服务器
C/S:客户端--》服务器
[外链图片转存失败(img-MVWdf6b3-1568989208824)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567662917832.png)]
Tomcat也是一个开源的服务器,本地的服务器-->(远程服务器|云服务器)-->web项目
Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成。由于有了Sun 的参与和支持,最新的Servlet 和JSP 规范总是能在Tomcat 中得到体现,Tomcat 5支持最新的Servlet 2.4 和JSP 2.0 规范。因为Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的Web 应用服务器。
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选。对于一个初学者来说,可以这样认为,当在一台机器上配置好Apache 服务器,可利用它响应HTML(标准通用标记语言下的一个应用)页面的访问请求。实际上Tomcat是Apache 服务器的扩展,但运行时它是独立运行的,所以当你运行tomcat 时,它实际上作为一个与Apache 独立的进程单独运行的。
诀窍是,当配置正确时,Apache 为HTML页面服务,而Tomcat 实际上运行JSP 页面和Servlet。另外,Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器。目前Tomcat最新版本为9.0。
容器:是给组件提供运行环境。
Tomcat既是容器又是服务器(tomcat具有服务器所有具备的功能)
下载:
https://tomcat.apache.org/
[外链图片转存失败(img-2FHDyC27-1568989208825)(C:\Users\Administrator\Desktop\QQ截图20190905141445.png)]
[外链图片转存失败(img-bWzkVbuJ-1568989208826)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567664203680.png)]
配置:
1.JAVA_HOME:jdk的安装路径
2.如果通过startup.bat启动tomcat闪退在
该命令文本中添加一下配置:
set Java_HOME=C:\Program Files\Java\jdk1.8.0_191
set tomcat_home=C:\Users\Administrator\Desktop\apache-tomcat-9.0.24-windows-x64\apache-tomcat-9.0.24
3.先看看服务器启动的过程有没有异常,如果没有
当最最后看到如下图片的时候,启动成功
[外链图片转存失败(img-IFQpUsUP-1568989208826)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567665787935.png)]
4.访问一下tomcat ---》tomcat的默认端口号为8080
当端口被占用或者冲突了
修改默认端口号
tomcat安装目录下的conf---》server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改port,修改完之后重启服务器
访问:http://localhost:8080---->ip:port
成功界面如下:
[外链图片转存失败(img-w5FeRorg-1568989208827)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567666091406.png)]
[外链图片转存失败(img-krzMwk0g-1568989208828)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567666340996.png)]
进入Server Status---》发现401未授权
---》进入到tomcat--->conf--->tomcat-users.xml添加授权
在该文本的最后变加一下配置
<role rolename ="manager-gui"/>
<user username ="tomcat" password ="123456" roles ="manager-gui"/>
重启服务器
[外链图片转存失败(img-LEsEntP0-1568989208828)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567667292374.png)]
项目的管理界面
远程加载|部署项目(war文件)
如何生成war文件
1.创建一个人动态的web项目
2.export---->右键--->war File--->导入到指定的路径
Tomcat集成到Eclipse中
1.在Eclipse中显示server视图
--->window--->show view-->other-->搜索servers
[外链图片转存失败(img-7niNh0fw-1568989208830)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567669485408.png)]
2.点击以上连接
[外链图片转存失败(img-cIrlUV0Y-1568989208830)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567669568579.png)]
下一步:
[外链图片转存失败(img-7CzjRhRz-1568989208832)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567669611982.png)]
点击完成
[外链图片转存失败(img-rKtu6gLX-1568989208832)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567669714020.png)]
配置:
双击服务器名
[外链图片转存失败(img-AnOG05s0-1568989208833)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567669802957.png)]
启动服务器:
右键点击服务器—》start
部署项目到服务器–》
部署到tomcat下的项目如何访问:
http://ip:port/项目名/请求路径
4.Servlet
Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。
狭义的Servlet是指Java语言实现的一个接口,广义的Servlet是指任何实现了这个Servlet接口的类,一般情况下,人们将Servlet理解为后者。Servlet运行于支持Java的应用服务器中。从原理上讲,Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
Servlet为了扩展web服务功能--》生成动态页面---》显示动态的数据
Servlet就是一个特殊java类--》有特定的功能--》组件--》组件只能在在容器中运行
tomcat是容器也是服务器---》web服务器
如何生成Servlet
1.创建一个类,实现Servlet接口
public class ServletDemo01 implements Servlet{
@Override
public void destroy() {
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void init(ServletConfig arg0) throws ServletException {
}
@Override
public void service(ServletRequest arg0, ServletResponse arg1) throws ServletException, IOException {
}
1.2:继承HttpServlet
2.配置 web.xml文件中配置
当有多个servlet的是时候,配置文件的内容也随着增多,操作不方便
引用servlet3.0的新特性:添加注解 @WebServlet("/路径") 添加类上方
动态项目的目录结构:
[外链图片转存失败(img-ppHuIq5b-1568989208833)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\1567671121768.png)]