大家好久不见~ 这次一回来就给你们带来了一些热乎乎的知识,哈哈,接招吧家人们
目录
一.什么是tomcat?
二.目录结构及作用
三.session持久化示例
- Tomcat是Apache 软件基金会(Apache Software Foundation)的Jakarta 项目中的一个核心项目,由Apache、Sun 和其他一些公司及个人共同开发而成
- Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP 程序的首选
- Tomcat和IIS等Web服务器一样,具有处理HTML页面的功能,另外它还是一个Servlet和JSP容器,独立的Servlet容器是Tomcat的默认模式。不过,Tomcat处理静态HTML的能力不如Apache服务器
- tomcat是一个开源而且免费的jsp服务器,属于轻量级应用服务器,它可以实现JavaWeb程序的装载,是配置JSP(Java Server Page)和JAVA系统必备的一款环境
注:除tomcat外,web应用服务器还有jetty,weblogic,websphere,undertow等.
拓展:weblogic和websphere
WebLogic是美国Oracle公司出品的一个application server,确切的说是一个基于JAVAEE架构的中间件,WebLogic是用于开发、集成、部署和管理大型分布式Web应用、网络应用和数据库应用的Java应用服务器.
将Java的动态功能和Java Enterprise标准的安全性引入大型网络应用的开发、集成、部署和管理之中
- WebSphere 是 IBM 的软件平台。它包含了编写、运行和监视全天候的工业强度的随需应变 Web 应用程序和跨平台、跨产品解决方案所需要的整个中间件基础设施,如服务器、服务和工具,WebSphere 提供了可靠、灵活和健壮的软件
- WebSphere 是一个模块化的平台,基于业界支持的开放标准。可以通过受信任和持久的接口,将现有资产插入 WebSphere,可以继续扩展环境。WebSphere 可以在许多平台上运行,包括 Intel、Linux 和 z/OS
- WebSphere 是随需应变的电子商务时代的最主要的软件平台,可用于企业开发、部署和整合新一代的电子商务应用
tomcat目录结构的截图(tomcat-9.0.60):
bin
bin目录主要要来存放tomcat命令的目录,里面主要有两种类型的文件,一种是以.bat为扩展名的文件,一类是以.sh为扩展名的文件。其中.bat的文件是在windows平台的命令,.sh的文件是在linux平台的文件。
该目录中主要的文件有一下几个:
1. setclasspath 用于设置Java环境变量,如JAVA_HOME,JRE_HOME等
2. catalina 该文件也是用来配置环境的,如CATALINA_HOME,及tomcat的安装路径,我们可 以在此目录设置Java的启动参数,如最大最小堆空间大小:
例如:
JAVA_OPTS="$JAVA_OPTS -Xms256m -Xmx512m -Xmn128m -XX:PermSize=128m -XX:MaxPermSize=512m"
3. startup 用来给启动tomcat,当双击startup后,tomcat启动,读取catalina脚本配置启动环境,catalina又会调用setclasspath脚本,用来设置jdk需要的环境变量,如果系统没有定义JAVA_HOME环境变量,则在会报错退出。
4. shutdomn 用于停止tomcat服务
conf
该目录主要用来存放tomcat的配置文件, 重要的配置文件如下:
1.server.xml 用于配置端口号,虚拟主机,默认加载项目,请求编码等等,是tomcat中最常使用的配置文件
2.web.xml 为所有的部署在该tomcat下的web应用通用的配置,与每个web应用的web.xml配合使用 例如:DefaultServlet,就算系统中没有配置任何的servlet,tomcat依然可以处理html,js,css等静态资源的请求,就是这个servelt起的作用;
JspServlet,当请求jsp页面时,则会用到这个servlet。session过期时间配置session-timeout参数,也是在这个web.xml中配置的。
3.catalina.policy 这个是tomcat安全相关的配置文件,主要使用安全策略文件可以在tomcat启动是附上 -security
4. catalina.properties 安全配置,类加载设置,不需扫描的类,字符缓存等配置
5.context.xml 所有在tomcat中发布的应用都会使用的公用配置,例如:发布的web应用的描述文件的位置及名称,及session持久化配置等
6.tomcat-users.xml
tomcat的角色(授权用户)配置文件,用于访问tomcat管理应用程序时的安全性设置,用server.xml中引用的默认的用户数据库域(UserDatabase Realm)使用它,所有的凭据都是默认被注释的
7.tomcat-users.xsd 定义了 tomcat-users.xml 所使用到的标签,即tomcat-user.xml 的结构定义文件
lib
所有的部署在tomcat中的web应用公用的jar包
logs
用于保存tomcat运行时的日志数据,
- catalina.{yyyy-MM-dd}.log tomcat自己的运行日志
- localhost.{yyyy-MM-dd}.log 应用初始化日志,包含tomcat的启动和暂停时的运行日志,没有catalina.{yyyy-MM-dd}.log记录的全,只包含一部分
- localhost_access_log.{yyyy-MM-dd}.txt tomcat访问日志,包括请求时间,资源,返回的状态码
- manager.{yyyy-MM-dd}.log 是tomcat管理控制台应用的专有日志
- 在Linux系统中,tomcat将日志记入catalina.out文件,可以使用 tail -f catalina.out 进行跟踪。
temp
存放tomcat在运行期间产生的临时文件,可以清空该目录的文件,但不能删除该目录,可能会引发不可预知的错误。
webapps
tomcat默认的项目部署目录,在默认情况下,如果要发布应用可以直接将应用的war包放入该目录即可完成发布,也可以直接发布未压缩的目录,但要求该目录需要符合web应用规范
- doc tomcat文档
- examples tomcat自带的web应用示例
- host-manager tomcat主机管理应用程序
- manager tomcat的管理应用程序
- ROOT 如果项目部署为ROOT,则在地址栏直接输入:http://ip:port/ 就可以访问,即不用输入应用名
work
用来部署应用中由jsp文件生成的java文件和编译之后的class文件,可以删除,删除后可以迫使tomcat重新生成jsp对用的java和class文件
其他文件(了解即可)
1.主要配置文件
session持久化主要是在context.xml文件中进行配置的,context.xml文件可以出现在两个位置上,其作用域不同,配置方式一致:
- tomcat安装目录\conf 目录中的context.xml配置文件,该文件中的配置对部署在该tomcat中的所用应用都有效
- 所开发的web应用的META-INFO目录中,创建一个context.xml配置文件,放在此处的配置,只对所属的web应用有效
2.示例:
具体代码:
Students:
package com.zking.pojo;
import java.io.Serializable;
import javax.servlet.http.HttpSessionActivationListener;
import javax.servlet.http.HttpSessionEvent;
public class Student implements Serializable,HttpSessionActivationListener{
private Integer id;
private String name;
public Student() {
// TODO Auto-generated constructor stub
}
public Student(Integer id, String name) {
super();
this.id = id;
this.name = name;
}
@Override
public String toString() {
return "Student [id=" + id + ", name=" + name + "]";
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
/**
* 当我从磁盘恢复数据的时候,写入数据的时候,它可以帮我调用
*/
public void sessionDidActivate(HttpSessionEvent se) {
// TODO Auto-generated method stub
HttpSessionActivationListener.super.sessionDidActivate(se);
}
/**
* 当我需要进行持久化的时候,他可以帮我自动调用方法
*/
public void sessionWillPassivate(HttpSessionEvent se) {
// TODO Auto-generated method stub
HttpSessionActivationListener.super.sessionWillPassivate(se);
}
}
servlet:
package com.zking.servlet;
import java.io.IOException;
import java.util.Objects;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.zking.pojo.Student;
@WebServlet("/index.do")
public class IndexServlet extends HttpServlet{
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req, resp);
}
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
Object stu= req.getSession().getAttribute("stu");
if(Objects.isNull(stu)) {
Student s=new Student();
s.setId(Integer.parseInt("stu_01"));
s.setName("小华");
System.out.println("将学生信息放入session");
req.getSession().setAttribute("list", s);
}else {
System.out.println("学生的信息已经被录入session中");
Student name=((Student)req.getSession().getAttribute("stu"));
System.out.println("从session中获取学生信息,name="+name);
}
}
}
将web应用部署,运行之后访问servlet,查看指定的目录中是否有session的持久化数据,重新启动web,看session是否会从持久化数据中恢复.
今天的代码就到这里结束啦~ 咱们下期见,哈哈
今天也要记得微笑呀.