静态web与动态web
- 静态web:HTML,CSS(提供给所有人看的数据几乎不会变)
- 动态web:提供给所有人看的数据会发生变化,每个人在不同时间,不同地点看到的信息各不相同。
web应用程序及服务器
javaweb:动态web资源开发的技术统称为javaweb
web应用程序:可以提供浏览器访问的程序
注意:
- 我们能访问到的任何一个页面或资源,都存在这个世界的某一个角落的计算机上,我们通过url进行访问
- 一个web应用程序由多部分组成(静态web、动态web)
- web应用程序编写完毕后,若想提供给外界访问,则需要一个服务器进行统一的管理
WEB服务器:服务器是一种被动的操作,用来处理用户的一些请求和给用户一些响应信息。
访问web应用程序内在流程:
客户端发起请求准备访问服务器的某个页面,则web服务器就会去找他有没有这个页面,若找到了则将此页面返回给客户端(通过web服务)
Tomcat服务器
含义:比较流行的web应用服务器(开源,免费,轻量级)
Tomcat的目录结构
- bin:存放tomcat中可执行文件的目录
- conf:存放tomcat中配置文件的目录
- lib:存放tomcat服务器运行时依赖的jar包
- logs:存放tomcat服务器运行时产生日志文件的目录(记录每次启动关闭的一些信息)
- temp:存放tomcat服务器产生的临时文件目录(tomcat会自己清理该目录,可以忽略)
- work:存放tomcat服务器产生的工作文件
- webapps:tomcat服务器中存放网站的目录
Tomcat服务器的使用
- 准备:官网上下载并解压(同时必须配置好JAVA_HOME的环境变量)
- 开启服务器:startup.bat
- 关闭服务器:shutdown.bat
- 测试:先开启tomcat服务器,然后你访问localhost:8080后就可以看到tomcat的主页面
注意:
- 此页面(localhost:8080)对应到了你tomcat的webapps目录里面,如果里面有项目,则可以按照特定的路径直接访问此项目。
- 项目必须放在特定的项目目录里才能被访问,此目录被叫做项目名称)
举例:
比如我的webapps里面有browser项目,browser里面有index.html页面和app.html页面
直接访问browser里面的默认index.html页面:http://localhost:8080/browser/
访问browser里面的特定app.html页面:http://localhost:8080/browser/app.html
tomcat端口号以及主机名的修改
注意:在conf文件中server.xml为tomcat服务器的核心配置文件,在这里面可以改访问tomcat服务器的端口名以及主机的名称(主机名通过hosts文件来实现)。
监听关闭端口
<Server port="8005" shutdown="SHUTDOWN">
注意:
- 当执行shutdown.sh关闭tomcat就是链接8005端口执行SHUTDOWN命令;由此,我们直接用telnet向8005端口执行SHUTDOWN来关闭tomcat,这也是比较正统的关闭方式,如果这个端口没被监听,那么sh脚本就是无效的。
- 实际上这个端口是可以直接屏蔽不监听的。设置时候将其port值修改为-1就可以。
与其他http服务器集成的端口
<Connector protocol="AJP/1.3"
address="::1"
port="8009"
redirectPort="8443" />
注意:负责和其他的HTTP服务器建立连接。再把Tomcat与其他HTTP服务器集成时,就需要用到这个连接器。
浏览器访问tomcat服务器用到的端口
注意:该端口负责建立HTTP连接,在通过浏览器访问Tomcat服务器的Web应用时,使用的就是这个连接器。
将其改为8081后重启tomcat访问成功:http://localhost:8081
修改主机名称
hosts文件目录:C:\Windows\System32\drivers\etc
在主机hosts文件内增添映射主机地址:127.0.0.1 www.cjc.com
在tomcat的server.xml文件内配置主机名:www.cjc.com
重启tomcat访问成功:http://www.cjc.com:8080/
当我们输入url(里面有域名)回车后
计算机会检查本机的C:\Windows\System32\drivers\etc\hosts配置文件下有没有这个域名映射
- 有:直接返回对应的ip地址
- 没有:去DNS服务器找到域名所对应的ip地址
tomcat的context.xml配置文件
每个context标签代表了运行在虚拟主机上的单个Web应用
<Context>
监控资源文件,如果web.xml改变了,则自动重新加载应用
<WatchedResource>WEB-INF/web.xml</WatchedResource>
使用Resource时将数据库的驱动程序copy到tomcat的lib目录下,这一部是要害,假如没有copy 当运行程序的时候后报-找不到驱动-的异常
<Resource name="jdbc/数据库名" 表示指定的jndi名称(这个名称可以随意起)
auth="Container" 描述当前资源交给容器管理
type="javax.sql.DataSource" 表示类型为java扩展包下的数据源
maxActive="100" 连接池支持的最大连接数
maxIdle="30" 连接池中最多可空闲maxIdle个连接
maxWait="10000" 连接池中连接用完时,新的请求等待时间,单位毫秒
username="root" 表示数据库用户名
password="root" 表示数据库用户的密码
driverClassName="com.mysql.jdbc.Driver" 表示数据库的驱动类
url="jdbc:mysql://localhost:3306/数据库名"/> 表示数据库URL地址
</Context>
context.xml与server.xml文件的区别:
本身context作为server的host标签内的一个context标签,但是server.xml是不可动态重加载的资源,服务器一旦启动了以后,要修改这个文件,就得重启服务器才能重新加载。而context.xml文件则不然,tomcat服务器会定时去扫描这个文件。一旦发现文件被修改(时间戳改变了),就会自动重新加载这个文件,而不需要重启服务器。
webapps目录
webapps=>项目名目录=>WEB-INF(classes,lib,web.xml)
注意:
- 项目名目录必须存在
- 在项目名称目录里面具体的内容与WEB-INF平级。
- WEB-INF这个目录下的资源是受保护的,浏览器不能直接访问
- WEB-INF名字不可更改(更改后就可以访问里面内容),但是大小写可以更改(更改后不可以访问里面内容)
WEB-INF里面有3个文件及目录classes、lib、web.xml,其中作用如下:
- classes:用于存放编译后的class文件(即java程序)
- lib:用于存放web应用所依赖的jar包
- web.xml:用于存放web应用相关的一些配置信息
Tomcat配置数据库连接池
前言
在tomcat容器中配置数据库连接池有2种形式,一种直接在server.xml或context.xml文件中进行连接池的配置(希望tomcat内多个项目共用一个数据库时使用该配置),另一种直接在具体的web项目(META-INF目录下的context.xml文件)中进行数据库连接池的配置(每个项目有单独的数据库时使用该配置)
tomcat数据库连接池的设计结构
理解:首先必须提供sql数据库,在连接池之中需要保存若干个连接对象(这些对象是可以动态扩充的,但并不是无限扩充),所有的连接池需要被javax.sql.DataSource接口实例所管理,他所描述的就是数据接口,而数据库连接池中的每一个连接都在数据源的管理之中,而DataSource被JNDI所管理
JNDI:即java的命名及目录接口,其就相当于一个map集合,你可以根据Map中的key的名称查询到对应的value(DataSource的接口实例)
tomcat数据库连接池实践
具体原理
通过JNDI名称找到DataSource->通过DataSource找到Connection->Connection关闭表示归还连接
具体实践
创建一个web项目
创建servlet(DataAll)类用于数据库连接池测试
@WebServlet(name = "GetData")
public class DataAll extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response){
Connection connection=null;
PreparedStatement preparedStatement=null;
ResultSet resultSet=null;
try {
//使用jndi获取连接对象
//1初始化上下文,context为数据库连接池的上下文对象(context.xml文件)
Context context = new InitialContext();
//获取与逻辑名相关联的数据源对象——传入参数:java:comp/env/+jndi名称
DataSource lookup = (DataSource)context.lookup("java:comp/env/jdbc/db");
//从连接池中获取连接
connection=lookup.getConnection();
String name="小昭";
Integer age=45;
String sql="select * from emp where name=? or age=?";
preparedStatement = connection.prepareStatement(sql);
preparedStatement.setObject(1, name);
preparedStatement.setObject(2, age);
resultSet = preparedStatement.executeQuery();
while (resultSet.next()){
//这里的i表示该行的列数
for (int i=1;i<9;i++){
System.out.println(resultSet.getObject(i));;
}
}
}catch (Exception e){
e.printStackTrace();
}finally {
try {
resultSet.close();
preparedStatement.close();
connection.close();
}catch (Exception e){
e.printStackTrace();
}
}
}
}
配置web.xml映射规则
<servlet>
<servlet-name>DataAll</servlet-name>
<servlet-class>cn.tedu.DataAll</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>DataAll</servlet-name>
<url-pattern>/getData</url-pattern>
</servlet-mapping>
配置tomcat程序
我配的tomcat程序为localhost的8080端口,然后虚拟项目名用的是jndi
向tomcat的lib目录中放入mysql的驱动包(因为我用的是mysql数据库)
配置tomcat中conf目录下的context.xml文件(当然也可以选择配置单个项目的数据库连接池,那么就在项目的META-INF目录下添加context.xml文件)
<?xml version="1.0" encoding="UTF-8"?>
<!--每个context标签代表了运行在虚拟主机上的单个Web应用-->
<Context>
<!--监控资源文件,如果web.xml改变了,则自动重新加载应用-->
<WatchedResource>WEB-INF/web.xml</WatchedResource>
<WatchedResource>${catalina.base}/conf/web.xml</WatchedResource>
<!--使用Resource时将数据库的驱动程序copy到tomcat的lib目录下,这一部是要害,假如没有copy 当运行程序的时候后报-找不到驱动-的异常-->
<Resource name="jdbc/db"
auth="Container"
type="javax.sql.DataSource"
maxActive="100"
maxIdle="30"
maxWait="10000"
username="root"
password="root"
driverClassName="com.mysql.jdbc.Driver"
url="jdbc:mysql://localhost:3306/db"/>
</Context>
注意:Resource标签可以设置多个,每一个都相当于一个数据源,该数据源中存放着多个连接对象,而数据源被JNDI所管理,可以通过jndi名称找到对应的数据源
完成后访问:http://localhost:8080/jndi/getData
结果:数据库查询成功。