1. 配置Tomcat服务器 03
1.1 Tomcat服务器的安装: 03
绿色版本的安装很简单,直接zip包解压即可。解压就是安装。
1.2 解析关于Tomcat服务器的目录 03
bin : 这个目录是Tomcat服务器的命令文件存放的目录,比如:启动Tomcat,关闭Tomcat等。
conf: 这个目录是Tomcat服务器的配置文件存放目录。(server.xml文件中可以配置端口号,默认Tomcat端口是8080)
lib :这个目录是Tomcat服务器的核心程序目录,因为Tomcat服务器是Java语言编写的,这里的jar包里面都是class文件。
logs: Tomcat服务器的日志目录,Tomcat服务器启动等信息都会在这个目录下生成日志文件。
temp:Tomcat服务器的临时目录。存储临时文件。
webapps:这个目录当中就是用来存放大量的webapp(web application:web应用)
work:这个目录是用来存放JSP文件翻译之后的java文件以及编译之后的class文件。
1.3 解析Tomcat目录bin文件 03
bin目录下有一个文件:startup.bat,通过它可以启动Tomcat服务器。
xxx.bat文件是个什么文件?bat文件是windows操作系统专用的,bat文件是批处理文件,这种文件中可以编写大量的windows的dos命令,然后执行bat文件就相当于批量的执行dos命令。
startup.sh,这个文件在windows当中无法执行,在Linux环境当中可以使用。在Linux环境下能够执行的是shell命令,大量的shell命令编写在shell文件当中,然后执行这个shell文件可以批量的执行shell命令。
tomcat服务器提供了bat和sh文件,说明了这个tomcat服务器的通用性。
分析startup.bat文件得出,执行这个命令,实际上最后是执行:catalina.bat文件。
catalina.bat文件中有这样一行配置:MAINCLASS=org.apache.catalina.startup.Bootstrap (这个类就是main方法所在的类。)
tomcat服务器就是Java语言写的,既然是java语言写的,那么启动Tomcat服务器就是执行main方法。
1.4 启动Tomcat 03
我们尝试打开dos命令窗口,在dos命令窗口中输入startup.bat来启动tomcat服务器。
提示我们将Tomcat的根目录放在了此电脑的(这个操作随意,个人爱好)E:\java\dev\apache-tomcat-10.0.12
启动Tomcat服务器只配置path对应的bin目录是不行的。有两个环境变量需要配置:
- JAVA_HOME=JDK的根
- CATALINA_HOME=Tomcat服务器的根
1.5 配置Tomcat服务器需要哪些环境变量? 03
JAVA_HOME=JDK的根
CATALINA_HOME=Tomcat服务器的根
PATH = %JAVA_HOME%\bin; %CATALINA_HOME%\bin
启动Tomcat: startup
关闭Tomcat:stop (shutdown.bat文件重命名为stop.bat,为什么?原因是shutdown命令和windows中的关机命令冲突。所以修改一下。)
1.6 怎么测试Tomcat服务器有没有启动成功呢? 03
打开浏览器,在浏览器的地址栏上输入URL即可:
- http://ip地址:端口号
- ip地址是什么?端口号我知道,是8080
- 本机的IP地址是:127.0.0.1,或者是localhost,都行。
2. 实现一个最基本的Web应用(这个web应用中没有java小程序) 04
2.1 实现步骤 04
第一步:找到CATALINA_HOME\webapps目录
- 因为所有的webapp要放到webapps目录下。(没有为什么,这是Tomcat服务器的要求。如果不放到这里,Tomcat服务器找不到你的应用。)
第二步:在CATALINA_HOME\webapps目录下新建一个子目录,起名:oa
- 这个目录名oa就是你这个webapp的名字。
第三步:在oa目录下新建资源文件,例如:index.html
- 编写index.html文件的内容。
第四步:启动Tomcat服务器
第五步:打开浏览器,在浏览器地址栏上输入这样的URL:
http://127.0.0.1:8080/oa/index.html
2.2 思考一个问题: 04
我们在浏览器上直接输入一个URL,然后回车。这个动作和超链接一样吗?既然是一样的,我们完全可以使用超链接。
<!--注意以下的路径,以 “/” 开始,带项目名,是一个绝对路径。不需要添加:http://127.0.0.1:8080-->
直接写
<a href="https://www.ctyun.cn/portal/link.html?target=%2Foa%2Flogin.html">user login2</a>
<!--多个层级也没有关系,正常访问即可。-->
<!--注意:我们目前前端上的路径都以“/”开始的,都是加项目名的。-->
<a href="https://www.ctyun.cn/portal/link.html?target=%2Foa%2Ftest%2Fdebug%2Fd.html">d page</a>
代码在 E:\java\dev\apache-tomcat-10.0.12\webapps\oa 04
index.html
解释:感觉用Tomcat实现和我们直接双击浏览器运行没什么区别呀,其实并不然,我们用Tomcat打开是模拟他人人都可以通过向服务器发送请求访问(就是我们在用一台电脑模拟两台机子),但是双击浏览器打开是说明我们可以看淡代码文件的只适用于我们这台电脑而已
<!--实现一个最基本的Web应用 04-->
<!doctype html>
<html>
<head>
<title>index page</title>
</head>
<body>
<h1>my index page!</h1>
<br>
<!--用户点击超链接相当于在浏览器地址栏中输入了URL-->
<a href="https://www.ctyun.cn/portal/link.html?target=http%3A%2F%2Flocalhost%3A8080%2Foa%2Flogin.html">user login</a>
<!--好消息:超链接中的ip地址和端口号都可以不写省略掉
以下这个路径是绝对路径,以“/”开始,带项目名
也可以使用相对路径,但是这里不提,后面再说
-->
<br>
<a href="https://www.ctyun.cn/portal/link.html?target=%2Foa%2Flogin.html">user login2</a>
</body>
</html>
login.html
<!--写一个简单的登录界面 04-->
<!doctype html>
<html>
<head>
<title>login page</title>
</head>
<body>
<form>
<h2>user login</h2>
username:<input type="text" name="username"/><br>
password:<input type="password" name="userpwd"/><br>
<input type="submit" value="login"/>
</form>
</body>
</html>
E:\java\dev\apache-tomcat-10.0.12\webapps\oa\test\debug d.html
<!doctype html>
<html>
<head>
<title>d page</title>
</head>
<body>
<h1>d page!</h1> <!--04-->
<br>
</body>
</html>
3. BS结构系统的角色和协议 05
3.1 动态网页技术 05
3.1.2 图解
对于一个动态的web应用来说,一个请求和响应的过程有多少个角色参与,角色和角色之间有多少个协议
有哪些角色(在整个BS结构的系统当中,有哪些人参与进去了)
- 浏览器软件的开发团队(浏览器软件太多了:谷歌浏览器、火狐浏览器、IE浏览器....)
- WEB Server的开发团队(WEB Server这个软件也是太多了:Tomcat、Jetty、WebLogic、 JBOSS、WebSphere....)
- DB Server的开发团队(DB Server这个软件也是太多了:Oracle、MySQL.....)
- webapp的开发团队(WEB应用是我们做为JavaWEB程序员开发的)
角色和角色之间需要遵守哪些规范,哪些协议
- webapp的开发团队 和 WEB Server的开发团队 之间有一套规范: JavaEE规范之一Servlet规范。
Servlet规范的作用是什么?
- WEB Server 和 webapp解耦合。
- Browser 和 WebServer之间有一套传输协议:HTTP协议。(超文本传输协议。)
- webapp开发团队 和 DB Server的开发团队之间有一套规范:JDBC规范。
3.2 显示网页列表 05
- http://127.0.0.1:8080/oa/userList.html
- 访问这个地址,可以展示一个用户列表页面。但是这个用户列表页面是写死在HTML文件当中的。这种资源我们称为静态资源。怎么能变成动态资源。显然需要连接数据库。
- 连接数据库需要JDBC程序,也就是说需要编写Java程序连接数据库,数据库中有多少条记录,页面上就显示多少条记录,这种技术被称为动态网页技术。(动态网页技术并不是说页面中有flash动画。动态网页技术是说页面中的数据是动态的,根据数据库中数据的变化而变化。)
代码在E:\java\dev\apache-tomcat-10.0.12\webapps\oa
userList.html
<!--展示表格数据 05-->
<!doctype html>
<html>
<head>
<title>user list page</title>
</head>
<body>
<table border="1px" align="center" width="50%">
<tr>
<th>no</th>
<th>username</th>
</tr>
<tr>
<td>1</td>
<td>zhangsan</td>
</tr>
<tr>
<td>2</td>
<td>lisi</td>
</tr>
<tr>
<td>3</td>
<td>wangwu</td>
</tr>
<tr>
<td>4</td>
<td>jack</td>
</tr>
<tr>
<td>5</td>
<td>rose</td>
</tr>
</table>
</body>
</html>
3.3 模拟Servlet本质 06
- 充当SUN公司的角色,制定Servlet规范
- javax.servlet.Servlet接口
- 充当Tomcat服务器的开发者
- 充当Webapp的开发者
- BankServlet implements Servlet
- UserListServlet implements Servlet
- UserLoginServlet implements Servlet
- 通过我们的分析:
- 对于我们javaweb程序员来说,我们只需要做两件事:
- 编写一个类实现Servlet接口。
- 将编写的类配置到配置文件中,在配置文件中:指定 请求路径 和 类名 的关系。
- 注意:
- 这个配置文件的文件名不能乱来。固定的。
- 这个配置文件的存放路径不能乱来。固定的。
- 文件名、文件路径都是SUN公司制定的Servlet规范中的明细。
- 严格意义上来说Servlet其实并不是简单的一个接口:
- Servlet规范中规定了:
- 一个合格的webapp应该是一个怎样的目录结构。
- 一个合格的webapp应该有一个怎样的配置文件。
- 一个合格的webapp配置文件路径放在哪里。
- 一个合格的webapp中java程序放在哪里。
- 这些都是Servlet规范中规定的。
- Tomcat服务器要遵循Servlet规范。JavaWEB程序员也要遵循这个Servlet规范。这样Tomcat服务器和webapp才能解耦合。
请求路径和XXXServlet之间应该有一个对照关系
代码在 E:\java学习\javaWeb\course\course2\模拟Servlet本质(只是模拟)
做一个模拟Servlet的通俗化解释:其实就是写一个接口(此接口是SUN公司规定的)然后我们webapp程序员开发者写的程序要实现这个接口(每一个程序对应不同的功能,供用户选择)开发者还要写一个web.properties配置文件(配置文件中是各种功能的访问路径),然后Tomcat服务器利用用户的输入访问路径(访问路径不同,得到的功能就不同),得到用户的访问路径后要要解析程序开发者写的web.properties配置文件,从而确认用户输入的访问路径,进而利用反射机制创建对应的功能对象,因为这些功能程序都实现了接口,所以强转为接口类型,然后调用相应的功能(提一嘴这里的强转在调用方法涉及到动态绑定机制)这样就实现了用户输入访问路径调出对应的功能啦
Tomcat.java
package org.apache;
import java.util.Scanner;
import java.util.Properties;
import java.io.FileReader;
import javax.servlet.Servlet;
//充当Tomcat服务器的开发者 06
public class Tomcat{
public static void main(String[] args) throws Exception{
System.out.println("Tomcat服务器启动成功,开始接收用户的访问");
// 简单的使用Scanner来模拟一下用户的请求
// 用户访问服务器是通过浏览器上的“请求路径”
// 也就是说用户请求路径不同,后台执行的Servlet不同。
/*
/userList UserListServlet
/login UserLoginServlet
/bank BankServlet
......
*/
System.out.print("请输入您的访问路径:");
Scanner s = new Scanner(System.in);
//用户的请求路径
//解释:next()和nextLine()的区别
//next()不可以读取空白字符,nextLine()可以读取空白字符
String key = s.nextLine();// Tomcat服务器已经获取到了用户的请求路径了。
// Tomcat服务器应该通过用户的请求路径找对应的XXXServlet
// 请求路径和XXXServlet之间的关系应该由谁指定呢?
// 对于Tomcat服务器来说需要解析配置文件
FileReader reader = new FileReader("web.properties");
Properties pro = new Properties();
pro.load(reader);
reader.close();//关闭流
//通过key获取value
String className = pro.getProperty(key);
//通过反射机制创建对象
Class clazz = Class.forName(className);
// obj的类型对于Tomcat服务器开发人员来说不知道。
// 但是Tomcat服务器的开发者知道,你写的XXXXServlet一定实现了Servlet接口
Object obj = clazz.newInstance();
Servlet servlet = (Servlet)obj;//将反射创建的对象强转为Servlet类型
servlet.service();//调用Servlet接口中的方法
}
}
Servlet.java接口
package javax.servlet;
/*
模拟Servlet 06
我们现在充当的角色是SUN公司,SUN公司把Servlet接口/规范制定出来了
*/
public interface Servlet{
//一个专门提供服务的方法
void service();
}
BankServlet.java
package com.bjpowernode.servlet;
import javax.servlet.Servlet;
/*模拟Servlet 06
充当的角色发生了改变:webapp开发者
只要我们webapp开发者写的XXXServlet都要实现Servlet接口
*/
public class BankServlet implements Servlet{
//实现接口方法
public void service(){
System.out.println("BankServlet 's service...");
}
}
UserListServlet.java
package com.bjpowernode.servlet;
import javax.servlet.Servlet;
/*模拟Servlet 06
充当的角色发生了改变:webapp开发者
只要我们webapp开发者写的XXXServlet都要实现Servlet接口
*/
public class UserListServlet implements Servlet{
public void service(){
System.out.println("UserListServlet 's service...");
}
}
UserLoginServlet.java
package com.bjpowernode.servlet;
import javax.servlet.Servlet;
/*模拟Servlet 06
充当的角色发生了改变:webapp开发者
只要我们webapp开发者写的XXXServlet都要实现Servlet接口
*/
public class UserLoginServlet implements Servlet{
public void service(){
System.out.println("UserLoginServlet 's service...");
}
}
web.properties配置文件
/aaaa=com.bjpowernode.servlet.UserListServlet
/bbbb=com.bjpowernode.servlet.UserLoginServlet
/cccc=com.bjpowernode.servlet.BankServlet