第10天_Tomcat

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)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值