一.Tomcat
1.基础部分
静态资源
所有用户访问所得到的反馈是一样的,并且是可以被浏览器所直接解析的资源。比如: HTML CSS
动态资源
每个用户访问所得到的结果是不一样的,需要先转换为静态资源,才能被浏览器解析。比如:JSP
由于入门,只是了解到 JSP 是一种特殊的Servlet
2.服务器软件
Servlet是用Java编写的服务器端的程序
稍微了解了一下Servlet,可以说是Java实现了Servlet这个接口完成与用户交互,生成动态Web的功能
服务器软件接收用户的请求并且做出响应,而在Web服务器软件中,可以部署Web项目,使用户可以通过浏览器来访问这些项目。
Tomcat 是一种开源的、免费的* 中小型 JAVAEE 服务器 ,仅仅只能提供少量的JAVAEE规范 Servlet / JSP。
3.Tomcat 基础
两个核心组件
1. connector:Service中的connector组件可以接收\特定端口的请求
负责生成请求对象和响应对象,根据Response中的内容生成相应的HTTP格式数据。
2. container :有Engine,Host,Context这3个核心
Engine:组件在Service组件中有且只有一个,负责请求处理。。
Host:是Engine的子容器,代表一个虚拟主机,至少有一个defaulthost(localhost),且不需要注册,因为任何与所有Host名字不匹配的请求,都会交由至默认主机。 可运行多个Web应用(一个Context代表一个Web应用),并且负责安装、展开、启动和结束。
其中的name属性是虚拟主机名,只有一个name属性与defaulthost name匹配。
一个Web应用有xml文件和war包和应用目录。
Context:这个属性代表在一个指定的Host上运行一个Web应用,每个Web应用基于WAR文件。
Server中配置多个Service服务(比如支付服务等),可以实现通过不同的端口号来访问同一台机器上部署的不同Web应用
当Tomcat启动时,Service组件就会监听特定的端口
当请求进来时,Tomcat便可根据协议和端口号选定处理请求的Service;Service一旦选定,Engine也就确定。
JSP只有功能,但是没有Main方法,Tomcat就当作容器提供,并且进行管理,Tomcat就是Servlet/JSP的实现。
config 目录下就是Tomcat的配置文件
- logging properties:日志配置文件
- Server.xml:比如端口号等在这个文件中
- tomcat-users-xml:可以配置Tomcat的访问用户以及每个用户拥有的角色信息
- web.xml:Tomcat部署应用的一个文件,可以配置Tomcat默认配置,比如默认的JSP和默认的Servlet
lib 目录里放的全是jar包
logs 目录是日志信息
webapps是Tomcat默认Web应用部署的应用,如果有一些项目需要部署到Tomcat,就可以放在webapps的目录下
work 目录是JSP编译生成的JAVA源码以及class字节码所存放的目录
JSP的出现时为了更方便的动态输出html,能够在html里面写JAVA。
最后生成的HTTP格式数据包再发送给浏览器来解析再呈现给用户
Web服务器有一种服务方式是接收用户发送的请求后,直接调用某个业务类来完成请求返回数据
可是这样会导致一种紧耦合的关系。
所以Tomcat里不仅包含了Web服务器还包含了一个Servlet/JSP,通过这个容器来调用应该调用的业务类,就目前的理解,感觉是这些业务类实现了Servlet/JSP 接口,调用service方法,完成了用户发送的请求。
4.Tomcat整体架构
1.两个核心功能
1)处理socket连接。数据字节传输,Request和Response对象的转化
2)加载管理Servlet,处理Request请求(进行用户请求的逻辑处理)
Tomcat的两个容器分别来做这两件事情
Coyote组件是连接器中处理协议规范 ,再将其自己封装的request对象转换成Servletrequest对象给Catalina(Servlet容器)
Tomcat本质上就是一款 Servlet容器,Catalina是其核心,其他所有模块都为Catalina提供支撑
Server里面有很多Service,每一个Service至少有一个Connector与Container相连。
二.JSP学习实操
JSP编译阶段是先检查是否需要编译,如果没有编译过或者被修改过,则重新编译
- 先解析JSP文件,再转换成Servlet,最后编译Servlet
- 接着调用 jspInit() 方法初始化
- 开始执行JSP调用 jspService(HttpServletRequest request,HttpServletResponse response)方法
- 最后调用 jspDestroy() 方法销毁
1.语法
<%@ page contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" import="java.util.*" language="java" %>
<%@.....%>
:提供当前指令页的说明
contentType="text/html; charset=UTF-8"
:相当于response.setContentType(“text/html; charset=UTF-8”); 通知浏览器以UTF-8进行中文解码
import="java.util.*,java.sql.*"
可以通过 , 隔开,导入多个包<%=...%>
: JSP表达式,用于输出一段html
<%=new Date().toLocaleString()%>
:可以输出当前时间<%....%>
:在这之间可以写java代码<%!...%>
:在这之间进行变量和方法的声明<jsp:include page="Filename" >
:在jsp页面中包含另一个页面<%-- ...-- %>
:代码注释<%out.println("hello jsp");%>
:out是隐式对象,可以用于输出,记得最后加 分号
简单了解个别隐式对象
pageContext 代表当前页面作用域
session 代表当会话作用域
application 代表当全局作用域
page 对象即表示当前对象
JavaBean的标准
- 提供无参public的构造方法(默认提供)
- 每个属性,都有public的getter和setter
- 如果属性是boolean,那么就对应is和setter方法
package bean;
public class Hero {
public int id;
public String name;
public float hp;
public int damage;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public float getHp() {
return hp;
}
public void setHp(float hp) {
this.hp = hp;
}
public int getDamage() {
return damage;
}
public void setDamage(int damage) {
this.damage = damage;
}
}
获取javabean属性,通过 .
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8" import="bean.*"%>
<%
Person person =new Person();
hero.setName("帅哥");
hero.setHeight(167);
request.setAttribute("person", person);
%>
名字 : ${person.name} <br>
人身高 : ${person.height}
IDEA 创建一个JSP项目:
创建完成后是这样:
去Project Structure中
Name 随便起
找到你的Tomcat路径 OK即可
会出现带war的一个文件
点击Run或者快捷键 我这里是 shift+F10
成功启动后会有successfully并弹出一个窗口
即完成
参考了一个Tomcat理解的博客