JavaSE(java 语言的基础版,Java 提供的最基本的类库)
---Java 的开发环境搭建
---Java 的基础语法
---Java 的面向对象
---数组
---常用类
---异常
---集合
---多线程
---IO 流
---反射机制
---注解 Annotation
BS 架构通信原理:
关于 WEB 服务器软件:
--Tomcat(WEB 服务器)
--jetty(WEB 服务器)
--JBOSS(应用服务器)
--WebLogic(应用服务器)
--WebSphere(应用服务器)
应用服务器和 Web 服务器的关系?
-应用服务器实现了 JavaEE 的所有规范。(JavaEE 有 13 个不同的规范)
-Web 服务器只实现了 JavaEE 中的 Servlet+JSP 两个核心的规范
应用服务器是包含 WEB 服务器的
apache 官网地址:https://www.apache.org/
tomcat 官网地址:https://tomcat.apache.org
tomcat 只实现了:Servlet+JSP 规范
tomcat 是 Java 语言写的
关于 Tomcat 服务器的目录;
bin:存放服务器的命令文件存放的目录,比如;服务器的打开可重起
conf:配置文件
lib:核心程序目录 jar 包
logs:日志目录,启动,等信息都会在这个目录生成日志文件
temp:临时目录。临时文件
webapps:web 应用
work;用来存放 JSP 文件翻译之后的文件
启动 Tomcat
bin 目录下有一个文件:startup.bat
xxx.bat 文件是 windows 操作系统专用的,bat 文件是批处理文件,这种文件可以编写大量的
Windows 的 dos 命令,然后执行 bat 文件就相当于批量的执行 dos 命令
start.sh 这个文件在 Windows 当中无法执行,在 Linux 环境中可以使用。在 Linux 环境下可以
使用,在 Linux 环境下能够执行的是 shell 命令,
大量的 shell 命令编写在 shell 文件当中,然后执行这个 shell 文件可以批量的执行 shell 命令。
在 dos 命令窗口中输入 startup.bat 来启动 tomcat 服务器
实现一个最基本的 WEB 应用(这个 WEB 没有 Java 小程序)
第一步:找到 CATALINA_HOME\webapps 目录
应为所有的 webapp 都要放到 webapp 目录下
第二步:在 CALINA_HOME\webapps 目录下新建一个子目录,起名:oa
这个目录名就是你这个 webapp 的名字
第三步:在 oa 目录下新建资源文件,例如 index.html
编写 index.html 文件内容
第四步:启动 Tomcat 服务器
第五步:打开浏览器,在浏览器地址栏上输入这样的 url
http://127.0.0.1:8080/oa/index.html
多个层级也没有关系,正常访问即可
注意:我们目前前端上的路径都以“/”开始,都是加项目名的
BS 结构系统的角色和协议
一个路径是一个资源:这个资源可能是静态的资源也可能是动态的资源(Java 小程序)
后端到底要执行哪个 Java 小程序,取决于你的前端浏览器发送的请求路径。
一个路径对应一个 Servlet 程序
对于一个动态的 web 应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之
间有多少个协议
有哪些角色:(在整个 BS 结构的系统当中,有哪些人参与进去了)
。浏览器软件的开发商
。WEB Server 的开发团队
。DB Server 的开发团队
。webapp 的开发团队
角色和角色之间需要遵守那些规范,哪些协议?
JavaEE 规范之一 Servlet 规范
Servlet 规范的作用是什么?
WEB Server 和 webapp 解耦合
browser 和 WEBServer 之间有一套传输协议:HTTP 协议。(超文本传输协议)
webapp 开发团队和 DB Server 之间有一套 JDBC 规范
开发一个带有 Servlet 的 webapp(重点)
步骤:
①在 webapps 目录下新建一个目录,起名 crm(这个 crm 就是 webapp 的名字)。当然,也
可以是其他目录,名字自拟
注意:crm 就是这个 webapp 的根
②在 webapp 的根下新建一个目录:WEB-INF
注意:这个目录的名字是 Servlet 规范中规定的,必须全部大写,必需一摸一样
③在 WEB-INF 目录下新建一个目录:classes
注意:这个目录的名字必须全是小写。这也是 Servlet 规范中规定的。另外这个目录下一定
存放的是 Java 程序编译之后的
class 文件(这里存放的是字节码文件)
④在 WEB-INF 目录下新建一个目录:lib
注意:这个目录不是必须的。但如果是一个 webapp 需要第三方的 jar 包的话,这个 jar 包要
放到这个 lib 目录下,这个目录的名字也不能随意编写,
必须全部是小写的 lib。例如 Java 语言连接数据库的数据库驱动 jar 包,那么,jar 包就一定
要放到 lib 目录下
⑤在 WEB-INF 目录下新建一个文件:web.xml
注意:这个文件是必须的,这个文件名必须叫做 web.xml。这个文件必须放在这里。一个合
法的 webapp,web.xml 文件是必须的,这个 web.xml 文件
就是一个配置文件,在这个配置文件中描述了请求路径和 Servlet 类之间的对照关系。
这个文件最好从其他的 webapp 中拷贝,最好别手写。
⑥编写一个 Java 程序,这个小 Java 程序也不能随意开发,这个小程序必须实现 Servlet 接口
这个 Servlet 接口不在 JDK 中(应为 Servlet 不是 JavaSE 了。Servlet 属于 JavaEE,是另外一套
类库)
Servlet 接口(Servlet.class 文件)是 Oracle 提供的
Servlet 接口是 JavaSE 的规范中的一员
Tomcat 服务器实现了 Servlet 规范,所以 Tomcat 服务器也需要使用 Servlet 接口。Tomcat 服
务器中应该有这个接口,Tomcat 服务器
的 CATALINA_HOME\lib 目录下有一个 servlet-api.jar,解压这个 jar 包后,你会看到里面有一个
Servlet.class 文件
重点:JakartaEE9 开始,Servlet 接口名就变了:Jakarta.servlet.Servlet
注意:编写这个小程序的时候,Java 源代码你愿意放在那里就放在那里,位置无所谓,你只
需要将 Java 源代码编译之后的 class 文件
放到 classes 目录下即可
⑦编译我们编写的 Java 代码
⑧将以上编译之后的文件拷贝到 WEB-INF\classes 目录下
⑨在 web.xml 文件中编写配置信息,让“请求路径”和“”
⑩启动 Tomcat 服务器,然后打开浏览器
浏览器上编写的路径太复杂,可以使用超链接。(非常重要:惠 HTML 页面只能放到 WEB-INF
目录外面)
以后不需要我们编写 main 方法了,tomcat 服务器负责调用 main 方法,tomcat 服务器启动
时执行的就是 main 方法。我们 Java 程序员
只需要编写 Servlet 接口的实现类,然后将其注册到 web.xml 文件中
解决 Tomcat 服务器在 DOS 命令窗口的乱码问题(控制台乱码)
将 CATALINA_HOME/conf/logging.properties 文件中的内容修改如下:
java.util.logging.ConsoleHandler.encoding=GBK
总结一下:
一个合法的 WEBAPP 目录结构应该是怎样的?
--webapp 的根
WEB-INF
classes(存放字节码)
lib(第三方 jar 包)
web.xml(注册 Servlet)
html
css
javascript
image
...
怎末将一个信息直接输出到浏览器上?
ServletResponse 接口:response
public void service(ServletRequest request,ServletResponse response)
throws ServletException,IOEception{
response.setContentType("text/html");
PrintWriter out=response.getWriter();
//编写 JDBC 代码来链接数据库
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try{
//注册驱动
Class.forName("com.mysql....");
//获取链接
String url="jdbc:mysql://localhost:8080/student";
String user="root";
String password="root";
conn=DriverManger.getConnection(url,user,password)
//获取预编译的数据库操作对向
String sql="select * from stu";
ps=conn.prepareStatement(sql);
//执行 SQL 语句
rs=ps.executeQuery();
//处理结果集
while(rs.next()){
String no-rs.getString("no");
String name=rs.getString("name");
}
}catch( Exception e){
e.printStackTrace();
}finally{
//释放资源
if(rs!=null){ rs.close();}
if(conn!=null){ conn.close();}
if(ps!=null){ps.close();}
}
}
在 Servlet 中连接数据库?
Servlet 是 Java 程序,所以在 Servlet 中完全可以编写 JDBC 代码连接数据库
在一个 WEBAPP 中去链接数据库,需要将驱动 jar 包放到 WEB-INF/lib 目录下
Servlet 对象的生命周期
1.什么是 Servlet 的生命周期?
Servlet 对象什么时候被创建,神魔时候被销毁。
Servlet 对象创建了几个?
Servlet 对象的生命周期表示:一个 Servlet 对象从出生在最后死亡,整个过程是怎样的。
Servlet 对象由随来维护?
Servlet 对象的创建,对象上方法的调用,对象最终的销毁,Javaweb 程序员是无权干预的。
Servlet 对象的生命周期是由 Tomcat 服务器全权负责的。
Tomcat 服务器通常我们又称 web 兼容器。(WEB Container)
web 容器来管理 Servlet 对象的死活。
我们自己 new 的 Servlet 受 web 容器的管理吗?
我们自己 new 的 Servlet 对象是不受 web5 容器管理的
web 容器自己创建的 Servlet 对象都会被放到一个集合中(HashMap),只有放到这个集合中
的 Servlet 才能被 web 容器管理
自己 new 的不在容器里
研究:服务器在启动的 Servlet 对象有没有被创建出来(默认情况下)?
。在 Servlet 中提供一个无参的构造方法,启动服务器的时候看看构造方法是否执行。
。经过测试得出结论:默认情况下,服务器在启动的时候 Servlet 对象并不会被实例化。
。这个设计是合理的,用户没有发送请求之前,如果提前创建出来所有的 Servlet 对象,必
然是耗费内存的,并且创建出来的 Servlet 如果一直
没有用户访问,也没必要创建
怎末让启动服务器的时候创建 Servlet 对象呢?
在 Servlet 标签中添加<local-on-startup>子标签,在该子标签中填写整数,越小的整数说明
优先级越高。