Tomcat

课程内容:

  • tomcat虚拟主机配置及使用
  • tomcat配置https
  • tomcat在我们开发中帮我们做了哪些事情

什么是服务器?

  • 服务器软件: 其实就是一个软件 接收用户的请求,处理请求作出响应

    • 作用:可以将我们开发好的静态资源或动态资源提供给外界(浏览器)访问。
  • 服务器: 其实就是一台电脑,该电脑安装了软件服务器。

软件服务器分类

  • http 服务器:用于运行静态的网页(html)

  • Web服务器:实现了 JavaEE 部分规范(比如Servlet/JSP)、没有实现 JavaEE 中的 EJB 规范。

    • 部署web应用,让用户通过浏览器来访问我们的项目
    • 常用的 Web服务器有:Tomcat(Java代码写的,开源的服务器) , Jetty 等
  • 应用服务器:实现了 JavaEE 全部的规范/支持 EJB 的:TomEE,GlassFish,JBoss,Weblogic,WebSphere

?Tomcat前置知识

  • 什么是tomcat?

    • 服务器是什么?

    • 硬件服务器和软件服务器

      • 硬件服务器 就是一台电脑
      • 软件服务器 就是一个程序 每个程序都有特定的作用与价值
  • 为什么要学习tomcat?

    B/S架构 我们的javaweb程序要基于软件服务器来运行 tomcat的优势 轻量级 运行速度快

  • tomcat学习之后能帮我们做什么?

    让我们的代码运行

?Tomcat安装

官网:

apache官网。www.apache.org

tomcat的产品页面: tomcat.apache.org/

我们要知道tomcat是java语言开发的 所以我们想要使用tomcat就必须配置jdk环境

?windows环境下的配置

Tomcat 是使用 Java 语言编写的一个服务器(程序),要运行Tomcat必须得有 jre。必须先配置 JAVA_HOME 或者 JRE_HOME 的环境变量 一般的我们只配置 JAVA_HOME

image-20221214151154015

上面是设置 JAVA_HOME 环境变量,启动 Tomcat 需要执行安装目录下的 bin 目录下面的 startup.bat 可执行文件

Tomcat 启动和关闭

1.启动:双击 bin/startup.bat

image-20221214151326343

2.测试是否可以访问

image-20221214151352291

3.关闭 运行的是 bin/shutdown.bat

image-20221214151423094

4.再次访问

image-20221214151449111

?修改 Tomcat 端口号

  • Tomcat 的默认端口是 8080。但是 HTTP 协议的默认访问的端口是 80。所以在访问 8080 端口的 Tomcat 中的资源时,必须要加上端口号 http://localhost:8080/index.jsp

  • 如果想在访问的时候不加端口号,我们可以将 tomcat 的端口号修改为80。

  • 修改 Tomcat 安装目录下 /conf/server.xml 文件中默认第 69 行,将 8080 修改为 80

    1670913064717

?配置JDK环境

1.将 压缩包上传到虚拟机

2.将jdk的压缩包解压

tar -zxvf jdk-8u241-linux-x64.tar.gz
tar -zxvf jdk-8u241-linux-x64.tar.gz 
tar -zxvf jdk-8u241-linux-x64.tar.gz

3.配置环境变量

vim /etc/profile
vim /etc/profile
vim /etc/profile

在文件尾部添加

export JAVA_HOME=/home/usr/jdk/jdk1.8.0_241
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME=/home/usr/jdk/jdk1.8.0_241
export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/
export PATH=$PATH:$JAVA_HOME/bin
export JAVA_HOME=/home/usr/jdk/jdk1.8.0_241 export CLASSPATH=$:CLASSPATH:$JAVA_HOME/lib/ export PATH=$PATH:$JAVA_HOME/bin

4.使用java -version命令 验证

?tomcat环境

1.将tomcat压缩包上传到服务器

2.解压

tar -zxvf apache-tomcat-8.5.24.tar.gz
tar -zxvf apache-tomcat-8.5.24.tar.gz 
tar -zxvf apache-tomcat-8.5.24.tar.gz

3.去到bin目录

4.启动tomcat

./startup.sh
./startup.sh
./startup.sh

5.关闭tomcat

./shutdown.sh
./shutdown.sh
./shutdown.sh

启动tomcat后,我们去访问 tomcat的默认端口是8080

在访问之前我们需要知道自己的主机是否可以ping通虚拟机

1.通过ifconfig 查找到虚拟机的ip地址

2.在主机去ping

ping 虚拟机地址
ping 虚拟机地址
ping 虚拟机地址

如果可以ping通 那么我们就可以去访问,访问后我们可以看到tomcat的欢迎页

那么这个欢迎页是怎么来的呢?

欢迎页是在 webapps下的ROOT目录中

它是在哪里配置的呢?

在conf的web.xml中配置,这里的配置是否还有其他玄机呢?

接下来我们来介绍一下 各个文件夹是干嘛用的

文件目录介绍:

目录名 作用
bin 启动和关闭Tomcat可执行文件
conf 配置文件夹,有些重要配置文件在这下面。如:server.xml, web.xml等 不建议乱修改,可能导致Tomcat不能启动
lib Tomcat使用时依赖的一些第三方jar包
logs 日志记录文件,记录服务器运行过程中一些事件。包括运行过程中出现异常
temp 临时文件夹,保存服务器运行过程中生成的一些垃圾文件
webapps 我们做好的项目发布的目录,可以通过浏览器来直接访问
ROOT目录:在浏览器上看到的欢迎页面,在这个目录下
work Tomcat 工作目录,存储 Tomcat 运行过程中产生的文件,比如 jsp 翻译后的class文件

部署静态资源:

这里我们演示一下 怎么去部署,我就使用hello.html来做演示了

1.我们先将html放入到ROOT目录中

2.启动tomcat 访问 localhost:8080/hello.html

接下来我们来演示我们刚才在配置文件中看到的那样 我将hello.html名字改为 index.html

接下来我们来访问 localhost:8080 来看一下首页 已经变成了我们自定义的网页了

?Tomcat内置

随着架构不断的演化,传统的方式是将搭建Tomcat 并将代码放在tomcat容器中运行,而现在我们日常的开发都是使用SpringBoot开发再也不用配置tomcat了,那么SpringBoot是如何做到的呢?

在Servlet4.0已经为我们提供了一些简单的方式来简化我们的开发了,不用再去手动过配置tomcat

public class App {
public static void main(String[] args) throws LifecycleException {
Tomcat tomcat = new Tomcat();
//指定端口
tomcat.setPort(Integer.getInteger("port",8082));
tomcat.getConnector();
//创建上下文
Context ctx = tomcat.addWebapp("/", new File("src/main/web").getAbsolutePath());
//指定web资源目录
WebResourceRoot resources = new StandardRoot(ctx);
//设置编译路径
resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes", new File("target/classes").getAbsolutePath(), "/"));
ctx.setResources(resources);
// 启动Tomcat服务
tomcat.start();
tomcat.getServer().await();
}
}
public class App {
    public static void main(String[] args) throws LifecycleException {
        Tomcat tomcat = new Tomcat();
        //指定端口
        tomcat.setPort(Integer.getInteger("port",8082));
        tomcat.getConnector();
        //创建上下文
        Context ctx = tomcat.addWebapp("/", new File("src/main/web").getAbsolutePath());
        //指定web资源目录
        WebResourceRoot resources = new StandardRoot(ctx);
        //设置编译路径
        resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes", new File("target/classes").getAbsolutePath(), "/"));
        ctx.setResources(resources);
        // 启动Tomcat服务
        tomcat.start();
        tomcat.getServer().await();
    }
}
​
public class App {    public static void main(String[] args) throws LifecycleException {        Tomcat tomcat = new Tomcat();        //指定端口        tomcat.setPort(Integer.getInteger("port",8082));        tomcat.getConnector();        //创建上下文        Context ctx = tomcat.addWebapp("/", new File("src/main/web").getAbsolutePath());        //指定web资源目录        WebResourceRoot resources = new StandardRoot(ctx);        //设置编译路径        resources.addPreResources(new DirResourceSet(resources, "/WEB-INF/classes", new File("target/classes").getAbsolutePath(), "/"));        ctx.setResources(resources);        // 启动Tomcat服务        tomcat.start();        tomcat.getServer().await();   } } ​

上述代码在启动时会报错java.lang.NoClassDefFoundError: org/apache/catalina/WebResourceRoot

做如下设置即可

image-20221216211639692.png

其他版本idea做如下设置

image-20221216211806705.png

image-20221216212006762.png

业务代码

@WebServlet("/login")
public class loginServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// 1: 解决用户传递参数进来的乱码
request.setCharacterEncoding("UTF-8");
// 2: 解决服务器往浏览器输出中文的乱码问题
response.setCharacterEncoding("UTF-8");
//3: 告诉浏览器,后面用writer输出的内容,浏览器全部用html方式进行解析和渲染
response.setContentType("text/html;charset=UTF-8");
// 4: 跳转到login.jsp
request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request,response);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
}
}
@WebServlet("/login")
public class loginServlet extends HttpServlet {
​
    @Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // 1: 解决用户传递参数进来的乱码
        request.setCharacterEncoding("UTF-8");
        // 2: 解决服务器往浏览器输出中文的乱码问题
        response.setCharacterEncoding("UTF-8");
        //3: 告诉浏览器,后面用writer输出的内容,浏览器全部用html方式进行解析和渲染
        response.setContentType("text/html;charset=UTF-8");
        // 4: 跳转到login.jsp
        request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request,response);
    }
​
    @Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
  
    }
}
@WebServlet("/login") public class loginServlet extends HttpServlet { ​    @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {        // 1: 解决用户传递参数进来的乱码        request.setCharacterEncoding("UTF-8");        // 2: 解决服务器往浏览器输出中文的乱码问题        response.setCharacterEncoding("UTF-8");        //3: 告诉浏览器,后面用writer输出的内容,浏览器全部用html方式进行解析和渲染        response.setContentType("text/html;charset=UTF-8");        // 4: 跳转到login.jsp        request.getRequestDispatcher("/WEB-INF/login.jsp").forward(request,response);   } ​    @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {     } }

通过浏览器来访问一下http://localhost:8082/login 看到了login.jsp的内容

© 版权声明
THE END
喜欢就支持一下吧
点赞0

Warning: mysqli_query(): (HY000/3): Error writing file '/tmp/MY5URoY3' (Errcode: 28 - No space left on device) in /www/wwwroot/583.cn/wp-includes/class-wpdb.php on line 2345
admin的头像-五八三
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

图形验证码
取消
昵称代码图片