Tomcat服务器|创建java web项目

文章目录

    • Tomcat是什么?
    • 下载启动Tomcat
    • 使用maven创建java web项目
    • 集成本地Tomcat
    • 例子
    • 注意事项
      • 启动tomcat控制台乱码
      • 改端口

Tomcat是什么?

Apache Tomcat,通常简称为Tomcat,是一个开源的Web服务器和Servlet容器。Tomcat主要用来运行Java Servlets和JavaServer Pages (JSP) 技术,允许开发者用Java编写的Web应用程序在Web服务器上运行。

以下是Tomcat的一些关键特性和用途:

  • Servlet容器:Tomcat支持Servlet API,用于处理和响应客户端请求,尤其是HTTP请求。

  • JSP引擎:Tomcat支持JSP技术,这是一种简化的方式来创建动态网页。

  • Web服务器:Tomcat可以作为一个独立的Web服务器,处理静态和动态内容。

下载启动Tomcat

官网网址:Tomcat下载
第一步:下载
在这里插入图片描述

第二步:安装成功
在这里插入图片描述
第三步:启动与停止
启动:
在这里插入图片描述

在这里插入图片描述
停止:

  • ctrl+c
  • bin\shutdown.bat

使用maven创建java web项目

在这里插入图片描述

集成本地Tomcat

将刚才本地安装好的Tomcat集成到IDEA中,完成项目的部署
在这里插入图片描述

启动项目:
在这里插入图片描述

例子

<!-- web.xml -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
         http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
    <!--当客户端请求/hello路径时,由com.example.HelloServlet类来处理这个请求。-->
    <servlet>
        <!-- servlet的名称 名字任意-->
        <servlet-name>HelloServlet</servlet-name>
        <servlet-class>com.hac.HelloServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <!-- servlet的名称 要和上面的名称一致-->
        <servlet-name>HelloServlet</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>
</web-app>

// HelloServlet.java

package com.hac;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

public class HelloServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        String name = request.getParameter("name");
        request.setAttribute("name", name);
        // 将请求和响应转发到hello.jsp页面
        request.getRequestDispatcher("hello.jsp").forward(request, response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doPost(request, response);
    }
}

<!-- index.jsp -->
<!DOCTYPE html>
<html>
<head>
    <title>Welcome</title>
</head>
<body>
    <h2>Enter your name:</h2>
    <form action="hello" method="post">
        <input type="text" name="name">
        <input type="submit" value="Submit">
    </form>
</body>
</html>

<!-- hello.jsp -->
<!DOCTYPE html>
<html>
<head>
    <title>Hello</title>
</head>
<body>
    <h2>Hello, ${name}!</h2>
</body>
</html>

部署项目,效果
在这里插入图片描述

好的,让我再详细一步一步解释:

request.getRequestDispatcher("hello.jsp").forward(request, response);

这一行代码在Servlet中用于将当前请求和响应转发到hello.jsp页面进行处理和显示。为了帮助理解,让我们分解这个过程并解释每个部分的作用。

  1. 获取RequestDispatcher对象

    request.getRequestDispatcher("hello.jsp")
    
    • request:这是HttpServletRequest对象,表示从客户端发送到服务器的HTTP请求。
    • getRequestDispatcher("hello.jsp"):这个方法从request对象中获取一个RequestDispatcher对象,用于将请求转发到指定的资源(这里是hello.jsp)。
    • "hello.jsp":这是目标资源的路径。在这个例子中,它指向Web应用的根目录下的hello.jsp文件。

    RequestDispatcher对象负责将请求和响应转发到指定的资源。

  2. 转发请求和响应

    request.getRequestDispatcher("hello.jsp").forward(request, response);
    
    • forward(request, response):这是RequestDispatcher对象的方法,负责将请求和响应对象转发到另一个资源。
    • request:当前的请求对象,包含从客户端发送过来的所有信息(如请求参数)。
    • response:当前的响应对象,用于向客户端发送响应。

    当调用forward方法时,当前Servlet的处理过程会停止,控制权会转交给hello.jsp页面。服务器将继续处理hello.jsp页面,并生成响应内容返回给客户端。

注意事项

启动tomcat控制台乱码

启动的过程中,控制台出现中文乱码,需要修改conf/logging.prooperties
在这里插入图片描述

改端口

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/678985.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

kettle从入门到精通 第六十五课 ETL之kettle 执行动态SQL语句,轻松实现全量增量数据同步

本次课程的逻辑是同步t1表数据到t2表&#xff0c;t1和t2表的表机构相同&#xff0c;都有id&#xff0c;name,createtime三个字段。 CREATE TABLE t1 (id bigint NOT NULL AUTO_INCREMENT,name varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,cr…

视创云展虚拟展厅的6大优势,感受3D数字化带来的无限可能!

在数字化浪潮的推动下&#xff0c;视创云展线上数字展厅以其独特的魅力&#xff0c;正逐步成为企业营销宣传的新窗口。它利用互联网技术&#xff0c;将实体展览馆的内容以数字化的形式呈现&#xff0c;打破了时间和空间的限制&#xff0c;让更多人能够随时随地畅游参观&#xf…

SwiftUI中LazyVGrid和LazyHGrid的介绍以及GridItem的用法

在SwiftUI中&#xff0c;我们可以使用LazyVGrid或LazyHGrid视图创建一个二维响应列表。如果我们想要一个垂直网格&#xff0c;我们可以使用LazyVGrid视图&#xff0c;如果我们想要一个水平网格&#xff0c;可以使用LazyHGrid视图。这些视图允许我们创建一个网格的项目&#xff…

Aethir: 破局算力瓶颈,构建AI时代去中心化云基础设施

科技的每一次飞跃都在重新塑造世界&#xff0c;而近年来&#xff0c;跨越式的技术革新再次引发了深刻的变革&#xff0c;那就是人工智能&#xff08;AI&#xff09;。 人工智能已然超越了此前的所有技术概念&#xff0c;成为了继互联网之后的下一个巨大浪潮。从自动驾驶汽车到…

我有点想用JDK17了

大家好呀&#xff0c;我是summo&#xff0c;JDK版本升级的非常快&#xff0c;现在已经到JDK20了。JDK版本虽多&#xff0c;但应用最广泛的还得是JDK8&#xff0c;正所谓“他发任他发&#xff0c;我用Java8”。 其实我也不太想升级JDK版本&#xff0c;感觉投入高&#xff0c;收…

【YOLO系列】YOLOv10论文超详细解读(翻译 +学习笔记)

前言 研究AI的同学们面对的一个普遍痛点是&#xff0c;刚开始深入研究一项新技术&#xff0c;没等明白透彻&#xff0c;就又迎来了新的更新版本——就像我还在忙着逐行分析2月份发布的YOLOv9代码&#xff0c;5月底清华的大佬们就推出了全新的v10。。。 在繁忙之余&#xff0…

Apple HEVC Stereo Video

1. 前言 为左眼和右眼携带立体视频视图的能力产生了更丰富的用户体验。 立体视频&#xff08;有时称为“3D 视频”&#xff09;向用户的左眼呈现一个图像&#xff0c;向用户的右眼呈现另一幅图像&#xff08;通常是相关的&#xff09;以产生立体效果&#xff0c;定义为&#x…

【经验】Ubuntu上离线安装VsCode插件浏览Linux kernel源码

1、下载VsCode离线安装包 1.1 下载 下载地址:https://marketplace.visualstudio.com/vscode 本人安装的插件: C/C++ checkpatch Chinese clangd kconfig Makefile Tools Perl Perl Toolbox注意:C/C++插件要安装Linux 64版本 1.2 安装 将离线安装包拷贝到Ubuntu中,执…

10 -力扣高频 SQL 50 题(基础版)

10 - 每台机器的进程平均运行时间 -- sum(if(activity_type end,timestamp ,-timestamp )) -- 如果activity_type为“end”,值为timestamp&#xff0c;为“start” 为-timestamp&#xff0c;所有数相加end-start -- count(distinct process_id),获取同一机器有几个进行id -- r…

C++系列-STL简介

&#x1f308;个人主页&#xff1a;羽晨同学 &#x1f4ab;个人格言:“成为自己未来的主人~” 什么是STL STL是C标准库的重要组成部分&#xff0c;不仅是一个可复用的组件库&#xff0c;而且是一个包罗数据结构与算法的软件框架。 STL的版本 原始版本 Alexander Stepa…

QT中将资源文件(image、qss、qm等)封装到静态库中,程序该如何引用静态库中的资源文件

1、静态库 2、主程序中使用第三方库中的资源文件 核心代码: int main(int argc, char *argv[]) {QApplication a(argc, argv

C++数组实现推箱子游戏

前言 我是三天打鱼两天晒网的闲人,今天跟着课程视频学习c的数组的运用. 准备好游戏用到的图片资源 代码逻辑实现 #include<iostream> #include<graphics.h> #include<string> #include<conio.h>using namespace std;//设置画布大小 #define SCREEN…

【SpringCloud学习笔记】Elasticsearch

1. Elasticsearch 1.1 安装ES 启动Docker&#xff1a;service docker restart / systemctl restart docker基于Docker创建网络docker network create hm-net向云服务器上传elasticsearch以及kibana的tar包&#xff0c;并使用docker load -i xxx.tar进行加载使用如下命令启动e…

使用Qt实现文本文件的读写操作

文章目录 文本读写简介QFileDialog简介常用方法示例代码 QFile简介常用方法示例代码 QTextStream简介常用方法示例代码 结合使用示例完整示例代码(读写操作&#xff0c;可直接复制运行我使用的Qt版本为QT5.14)mainwindow.hmainwindow.cppmain.cpp代码解释 文本读写简介 在现代…

k8s Pods漂移时间配置

默认为300秒 apiVersion: apps/v1 kind: Deployment metadata:name: my-test spec:replicas: 1selector:matchLabels:app: my-apptemplate:metadata:labels:app: my-appspec:containers:- name: my-containerimage: nginx:latestports:- containerPort: 80tolerations:- key: &…

MySQL之查询性能优化(四)

查询性能优化 MySQL客户端/服务器通信协议 一般来说&#xff0c;不需要去理解MySQL通信协议的内部实现细节&#xff0c;只需要大致理解通信协议是如何工作的。MySQL客户端和服务器之间的通信协议是"半双工"的&#xff0c;这意味着&#xff0c;在任何一个时刻&#…

History 模式和 Hash 模式路由的区别、优缺点及在开发生产环境中的注意事项

在现代单页应用&#xff08;SPA&#xff09;开发中&#xff0c;前端路由是至关重要的一部分。常见的路由模式有两种&#xff1a;History 模式和 Hash 模式。本文将详细探讨这两种模式的区别、优缺点&#xff0c;并在开发和生产环境中的注意事项。 路由模式简介 Hash 模式 H…

.Net 基于.Net8开发的一个Asp.Net Core Webapi后端框架

1.项目结构 该项目是基于.net8开发的Asp.Net Core WebApi后端服务,集成了Efcore,Autofac,Jwt,AutoMapper,Serilog,Quartz,MiniExcel等组件。该框架简单易上手&#xff0c;没有额外的学习成本; 该项目采用了多层结构设计&#xff0c;有利于解耦&#xff0c;包含公共层&#xff0…

机器视觉——硬件常用基础知识

光源 机器视觉中光源的作用 1&#xff09;强化特征&#xff0c;弱化背景 2&#xff09;光源打得好&#xff0c;图好了&#xff0c;后期算法更简化 3&#xff09;图好了&#xff0c;测试速度更高 各种光源的综合性能对比及为啥使用LED灯 光的颜色的选择 白色光&#xff1a;通常用…

【分享】两种方法禁止修改Word文档

对于比较重要的Word文件&#xff0c;不想被随意编辑修改&#xff0c;可以试试以下两个方法&#xff0c;不清楚的小伙伴&#xff0c;一起来看看吧&#xff01; 方法1&#xff1a;设置“只读方式” 我们可以给Word文档设置以“只读方式”打开&#xff0c;这样就算编辑修改了文档…