手摸手教会你在idea中配置Tomcat进行servlet/jsp开发(多图超详)

news2025/7/17 6:59:02

1. 下载安装idea,创建project,如果没有JDK可以通过idea指定文件夹并下载JDK。工程就是普通的Java工程,名字为webdemo

 2.因为是Web项目,所以要对这个普通的项目进行WEB扶持^^,在项目名称webdemo上右键单间选择菜单项"Add Framework Support..."

 3.在弹窗的Web Application前的复选框打钩。

 4. 此时项目结构会发生变化,在项目结构中加入了Web相关的元素。

 5. 配置Tomcat容器。前提是已经下载并安装或解压缩完毕。我使用的是Tomcat9。配置时选择Run菜单的Edit Configurations...菜单项,也就是配置Web项目的运行环境。

 6.点击左上角+,选择Tomcat Server Local,开始配置。

7.配置Tomcat基本信息

 首先配置的Server选项卡的内容,这是服务器启动时的相关信息。

VM options里面配置的内容是防止Tomcat启动时的配置信息有中文乱码。

同时还需要在IDEA的配置文件vmoptions中也加上这一句才可以。 

 ​​​​​​

 然后是配置Deployment选项卡,这里配置的是服务器启动后,部署什么内容到服务器中:

点击+,选择Artiface...菜单项 

可以看到部署的内容就是我们的Web项目。但是需要注意的是窗口下方的Application Context,如果按照这个内容,那意味着我们项目部署后的根路径是http://localhost:port/webdemo_war_exploded/

 如果你觉得没问题,那就直接OK。但是我还是觉得根路径是/比较符合习惯。

 项目部署后,项目的根路径是localhost:port/

 8.配置了Tomcat之后,项目面板又会产生变换。

9. 接下来要编写 Servlet,前提是要导入应有的JAR文件。这里我整体将Tomcat的lib作为项目的库(Library)导入。

首先添加项目库(Library):选择File菜单下的Project Structure...菜单项

 在弹出的窗口中选择Libraries,然后点击+,选择Java,添加要添加的库的位置:

 选择Tomcat的lib文件夹:

点击OK后,IDEA马上提问是否以项目模块的形式引用库:

 注意,这里如果点击OK,那么库的名字就是lib。我们不妨先点击Cancel,给库起一个容易辨识的名字后再手动的添加为项目模块。 

 将库的名字改为TomcatLib,然后点击OK

 现在手动将TomcatLib作为项目的模块导入到项目中。

依然是点击File的Project Structure...然后选择Modules(模块),点击+,导入Library....

选中刚才的TomcatLib

最后在TomcatLib的复选框中打√,表示确定引入。

 10.编写Servlet,在src文件夹下右键选择New...然后是Servlet

 然后填入具体的类名和包名,注意Java关于类名与包名的命名规范。

点击OK后,IDEA会提供一些FirstServlet的模板代码:

 @WebServlet是用注解的形式向Tomcat注册该Servlet。当然,如果不习惯使用注解的方式注册,一样可以通过传统的编写web.xml方式来进行注册。

使用注解注册一般提供两个信息:

  1. name应该是类的全限定名,也就是包名.类名。
  2. value对应的是触发该servlet的URL。

@WebServlet还提供了“传统”的urlPattern属性,value与它的作用是一致的。原则上,提供了value就不需要提供urlPattern了,但是如果你两个都提供,以urlPattern的内容为准。

doGet和doPost不用赘述,分别对应以get还是post的方式对value/urlPattern指定的url发起访问时回调的方法。

我们按照这个规则稍微修改一下FirstServlet:

当对/first发起get访问时,会在控制台打印一句话,并跳转到一个名为test1.jsp。

12 编写test1.jsp,格局项目结构,我们直接复制index.jsp,并黏贴为test1.jsp

 

 可以酌情修改index.jsp和test1.jsp

 

 13.至此所有配置完毕,从IDEA中启动Tomcat。点击绿色三角 

 IDEA底部的控制台会输出一些信息,当服务器启动结束时,注意观察Tomcat的状态:

 服务器状态已经从Not Started变为了Running,表示服务器处于正常运行中。在Tomcat服务器/容器中装载的是webdemo.war exploded。

此时浏览器中应该显示的是index.jsp的内容:

 注意观察路径,我们现在的位于根路径/,别忘了这是在Deployment选项卡的Application context中设置的。

接下来访问路径/first,看看控制台和页面变换:

 显然我们的FirstServlet发挥了作用。

---------------------------------------------------------------------------------------------------------------------------------

尾声:最后我们再看一下通过web.xml配置servlet过程。

首先去掉FirstServlet的@WebServlet注解。

接着在项目面板中找到web.xml所在位置,双击打开编辑:

 

 通过xml标签,进行servlet的注册和url的映射。

用<servlet>注册servlet,用<servlet-mapping>进行url映射。两个标签之间通过servelt的名字进行关联。

<?xml version="1.0" encoding="UTF-8"?>
<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_4_0.xsd"
         version="4.0">
    <servlet>
        <servlet-name>firstServlet</servlet-name>
        <servlet-class>servlets.FirstServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>firstServlet</servlet-name>
        <url-pattern>/first</url-pattern>
    </servlet-mapping>
</web-app>

再起启动服务器,测试一下,效果与使用注解方式注册应该是有一样的。

关于web.xml再说两点:

  1. 为什么浏览器启动后会显示index.jsp呢?这是因为在Tomcat的配置文件夹conf中也有一个web.xml,这个web.xml相当于全局配置,在里面有一段配置内容。
        <welcome-file-list>
            <welcome-file>index.html</welcome-file>
            <welcome-file>index.htm</welcome-file>
            <welcome-file>index.jsp</welcome-file>
        </welcome-file-list>

    当浏览器初始启动进入根路径,tomcat会在web部署结构下依次查找是否存在这些文件,如果存在就会自动在浏览器中呈现。如果有注册的servelt映射<url-pattern></url-pattern>,则servelt的配置会压制welcome-file-list的设置。

  2. 如果在web.xml中出现 metadata-complete="true",那么它将压制@WebServlet注解,Tomcat只会参考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_4_0.xsd"
      version="4.0"
      metadata-complete="true">

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Hive搭建

Hive系列第二章 第二章 Hive搭建 2.1 MySQL5.6安装 1、检查删除已有的 有就删除&#xff0c;没有就不用管。 rpm -qa | grep mysql rpm -e mysql-libs-5.1.73-8.el6_8.x86_64 --nodepsrpm -qa | grep mariadb rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_642、删除mysql分…

Windows下Labelimg标注自己的数据集使用(Ubuntu18.04)Jetson AGX Orin进行YOLO5训练测试完整版教程

一、环境配置介绍 整个实现过程所涉及的文件目录&#xff0c;其中&#xff0c;自备表示自己需要准备的&#xff0c;生成表示无需自己准备。 使用yolov5时出现“assertionerror:no labels found in */*/*/JPEGImages.cache can not train without labels”问题 很多朋友都会遇…

SpringBoot+Vue项目医疗管理系统

文末获取源码 开发语言&#xff1a;Java 使用框架&#xff1a;spring boot 前端技术&#xff1a;JavaScript、Vue.js 、css3 开发工具&#xff1a;IDEA/MyEclipse/Eclipse、Visual Studio Code 数据库&#xff1a;MySQL 5.7/8.0 数据库管理工具&#xff1a;phpstudy/Navicat JD…

待办事项是什么意思,怎么用?

待办事项是什么意思&#xff0c;为什么要用&#xff1f;待办事项工具怎么设置&#xff1f;这里一文给你讲清&#xff01; 废话不多说&#xff0c;下面直接教你&#xff1a;梳理待办事项清单的方法&#xff0c;以及待办工具的操作实操步骤。想要快速提升工作效率的小伙伴&#…

第三十七篇 Vue中封装Swiper组件

在上一篇内容的结尾讲到了将swiper初始化从mounted生命周期转移到updated中来能够让swiper动起来&#xff0c;但同时是否会造其他的一个问题&#xff1f;什么问题呢&#xff1f;在每次data中的状态发什么改变&#xff0c;updated中的内容会又重新执行&#xff0c;这样会导致swi…

二维数组与二级指针是好朋友吗?

抛出问题 有一个二维数组&#xff0c;我想把它传给一个函数。于是我把函数接口定义出来了&#xff0c;如下&#xff1a; int array[2][3] {1,2,3,4,5,6}; void fun(int **array) {array[0][0] 5; } 当我试图直接把数组名传给函数时候&#xff0c;fun(array)编译会报错&…

C++ 中explicit的作用及用法

目录 Cexplicit&#xff08;官网的说法&#xff09; Cexplicit 清楚的说法&#xff08;建议英文不好的从这里开始食用哦&#xff09; Cexplicit使用的例子&#xff08;建议喜欢自己敲代码实验的从这里开始食用哦&#xff09; 总结 Cexplicit&#xff08;官网的说法&#xff…

神经网络和深度学习-梯度下降Gradient Descent(下)

梯度下降gradient descent 我们接着用数学公式来看一下梯度下降 首先是梯度 ∂cos⁡t∂ω\frac{\partial \cos t}{\partial \omega} ∂ω∂cost​ 然后我们对权重进行更新 ωω−α∂cos⁡t∂ω\omega\omega-\alpha \frac{\partial \cos t}{\partial \omega} ωω−α∂ω∂c…

python基础之容器类型公共方法

文章目录一、简介1.高级数据类型的公共方法&#xff1a;2.python的内置函数&#xff1a;3.python包含的内置函数&#xff1a;二、遍历字典的列表一、简介 1.高级数据类型的公共方法&#xff1a; 列表元组字典或者字符串都能够共同使用的方法&#xff1b; 2.python的内置函数…

【kafka】七、kafka数据可靠性保证

数据可靠性保证 为保证producer发送的数据&#xff0c;能可靠的发送到指定的topic&#xff0c;topic的每个partition收到producer发送的数据后&#xff0c;都需要向producer发送ack&#xff08;acknowledgement确认收到&#xff09;&#xff0c;如果producer收到ack&#xff0c…

基于AntBlazor的学生在线练习系统实现过程的简单总结

前言 疫情当前&#xff0c;作为一名教师&#xff0c;如何能让学生进行有效练习成了一个难题。如果使用 “问卷星”等线上调查问卷式的网站来做练习测试&#xff0c;是无法及时有效的进行&#xff0c;更谈不上对学生练习情况进行跟踪。鉴于以上现实情况和问题&#xff…

神经网络和深度学习-用pytorch实现线性回归

用pytorch实现线性回归 用pytorch的工具包来实现线性模型的训练过程 准备数据集 设计模型 构造损失函数和优化器&#xff08;使用pytorch API&#xff09; 训练过程&#xff1a;前馈、反馈、更新 准备数据 在PyTorch中&#xff0c;计算图是小批处理的&#xff0c;所以X和…

MATLAB | 世界杯来用MATLAB画个足球玩叭~

世界杯教你用MATLAB画个超逼真的足球&#xff0c; 需要准备Partial Differential Equation Toolbox工具箱&#xff0c;同时因为用到了polyshape类所以至少需要R2017b版本。 绘制讲解 数据来源及说明 我是真的不想写注释了太麻烦了&#xff0c;给大家讲一下我的思路希望能够看…

判断一个时间段是否经过了另一个时间段

场景&#xff1a; IOT设备存在离线与恢复时间记录&#xff0c;每一次离线和恢复记为一个周期即一条数据, 现在需要统计出在某个时段存在离线记录的数据,如果目前未恢复,没有恢复时间&#xff0c;恢复时间置为9999-01-01 00:00:00 原始数据如下(t_offline_record)&#xff1a;…

OPengl学习——初识opengl

文章目录1、网站罗列2、一些词语解析1.入门概念2.Opengl Vs DirectX3、QOpenGLWidget4、引用**OpenGL&#xff08;Open Graphics Library&#xff09;*是一个跨编程语言、跨平台的编程图形程序接口&#xff0c;它将计算机的资源抽象称为一个个OpenGL的对象&#xff0c;对这些资…

3.5、点对点协议 PPP

3.5、点对点协议 PPP 3.5.1、基本介绍 点对点协议 PPP(Point-to-Point Protocol) 是目前使用最广泛的点对点数据链路层协议。 用户计算机只有获取到 ISP 所分配的合法 IP 地址后&#xff0c;才能成为因特网上的主机 用户计算机与 ISP 进行通信时&#xff0c;所使用的数据链路…

【学习笔记21】JavaScript数组的基本方法

笔记首发 一、push&#xff1a;末位新增 语法: 数组.push(数据)作用: 向数组末尾添加数据返回值: 追加数据后, 数组最新的长度 var arr [10, 20, 30, 40];console.log(原始数组: , arr); ​var num arr.push(500);console.log(push新增后数组: , arr);console.log(push的返回…

进程的初识

目录预备知识 -> 操作系统操作系统的定义操作系统的定位进程进程的概念进程调度的过程进程的管理描述组织PCB描述进程的特征进程调度的相关属性进程的状态优先级上下文记账信息预备知识 -> 操作系统 操作系统的定义 操作系统是一个搞管理的软件 对上&#xff0c;要对硬…

为什么一定要申请专利呢

问题一&#xff1a;如何避免被判为非正常专利&#xff1f; 原本有个发明创造&#xff0c;想申请专利&#xff0c;却被列入非正常申请&#xff0c;甚至违法。以下五种情况一定要注意&#xff0c;千万不能碰。 1、同一单位或个人申请多件明显抄袭现有技术的专利&#xff1b; 2…

如何通过 Java 合并和取消合并 Excel 单元格

在整理 Excel 中的数据时&#xff0c;我们不可避免地需要合并和取消合并单元格。同时&#xff0c;如果需要创建跨列或行的标题&#xff0c;我们可以合并 Excel 单元格以在电子表格中轻松完成此操作。 合并单元格是指将两个或多个单元格合并为一个单元格&#xff0c;而取消合并单…