Servlet编程第一步:从零构建Hello World应用,详细步骤+图解

news2024/11/14 13:53:16

前言

 什么是Servlet?

  • Servlet 是一个 Java程序,是在服务器上运行以处理客户端请求并做出响应的程序

什么是maven?

简而言之,maven是通过一小段描述管理和构建java项目的工具(通过pom.xml),我们通过maven项目可以快速导入项目需要的jar包,避免了手动导入jar包带来的不容易管理和依赖冲突问题。这里不详细赘述maven的使用

第一个Serlvet程序

  • 手动编写一个Servlet主要需要以下几步:
    • 创建一个servlet类,此类继承自HttpServlet
    • 重写doGet和doPost方法中的一个
    • 配置Servlet

第一步:创建一个maven项目

提前需要在idea中配置maven的相关配置

第二步:创建java目录,导入Servlet依赖jar包

此时maven缺少存放源码的java目录(参考maven教程),

右键main->单击NEW->单击Directory-->创建java目录

 

 在pom.xml中配置Servlet依赖

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.example</groupId>
  <artifactId>maven_9_12</artifactId>
  <packaging>war</packaging>
  <version>1.0-SNAPSHOT</version>
  <name>maven_9_12 Maven Webapp</name>
  <url>http://maven.apache.org</url>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
      <!--Servlet3.1-->
    <dependency>
        <groupId>javax.servlet</groupId>
        <artifactId>javax.servlet-api</artifactId>
        <version>3.1.0</version>
        <scope>provided</scope>
    </dependency>
  </dependencies>
  <build>
    <finalName>maven_9_12</finalName>
  </build>
</project>

第三步:创建一个servlet类,此类继承自HttpServlet

重写doGet和doPost方法中的一个

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

public class ServletTest extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //设置响应类型和响应字符集,防止中文乱码
        response.setContentType("text/html;charset=UTF-8");
        //获取响应输出流
        PrintWriter out = response.getWriter();
        //在页面打印HTML标签(会解析成对应的效果)
        out.println("<html>");
        out.println("<head><title>Servlet</title></head>");
        out.println("<body>");
        out.println("你好,欢迎来到Servlet世界");
        out.println("</body>");
        out.println("</html>");
        //使用完毕,关闭流资源
        out.close();

    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp); //目的是为了保证前端传入的get和post请求都能接收处理
    }
}

第四步:配置Servlet

  • 在web.xml文件中配置Servlet

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <servlet>
    <servlet-name>httpServletTest</servlet-name>
    <servlet-class>ServletTest</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>httpServletTest</servlet-name>
    <url-pattern>/demo1</url-pattern>
  </servlet-mapping>
</web-app>

 第五步:配置maven的服务器插件支持

一个web项目想要运行是需要服务器支持的,我们直接下载一个tomcat服务器进行配置,是比较繁琐的,可以通过maven插件 配置一个“虚拟的服务器”,供我们开发使用

 在pom.xml文件中将build标签中的内容替换成下面的内容

 <build>
    <finalName>web</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.3.14.v20161028</version>
      </plugin>
      <plugin>
        <groupId>org.apache.tomcat.maven</groupId>
        <artifactId>tomcat7-maven-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <port>8080</port>
          <path>/</path>
          <uriEncoding>UTF-8</uriEncoding>
          <server>tomcat7</server>
        </configuration>
      </plugin>
    </plugins>
  </build>

第六步:配置以服务器的形式启动

点击右上角的锤子旁边的小括号,选择Edit Configurations

 点击左上角的+号,找到maven

Run中改为jetty:run   或   tomcat7:run  (具体看你在上面配置了哪些服务器)

 

两种服务器,jetty更加轻量级,推荐使用,当然tomcat也有自己的优点,这里不赘述 

 第七步:点击启动

点击启动,在浏览器中输入localhost:8080查看效果

 

此时会跳转到webapp中的默认首页index.jsp

第八步:访问Servlet

 我们在web.xml中声明了访问Servlet的URL为demo1,所以可以如下访问

  1. 启动服务器(tomcat或jetty)
  2. 在浏览器中输入

 

总结

综上所述,一个简单的基于web.xml配置文件的JavaWeb的Servlet程序就完成了,我们可以创建多个页面,然后在web.xml中添加对应的Servlet和Servlet映射即可。

 

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

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

相关文章

HTML中的javascript基本用法及综合实例

文章目录 基本的使用方法内联JavaScript脚本标签外部脚本文件使用库和框架注意事项 几个进阶的主题和示例1. 操作DOM2. 响应用户输入3. AJAX请求4. 使用框架/库 综合实例HTML 结构JavaScript 逻辑功能解释CSS 样式 基本的使用方法 在HTML中使用JavaScript可以让网页变得更加动…

HarmonyOS开发之使用PhotoViewPicker(图库选择器)保存图片

一&#xff1a;效果图 二&#xff1a;添加依赖 import fs from ohos.file.fs;//文件管理 import picker from ohos.file.picker//选择器 三&#xff1a;下载&#xff0c;保存图片的实现 // 下载图片imgUrldownloadAndSaveImage(imgUrl: string) {http.createHttp().request(…

21世纪全球最具影响力的思想家颜廷利:当今世界公认三大哲学家

优秀&#xff0c;源自对知识的敬畏&#xff0c; 成功&#xff0c;孕育于对经历的感恩。 无私&#xff0c;是真我显现的舞台&#xff0c; 开悟&#xff0c;让心灵沐浴人间的清明。 和善&#xff0c;是通往高峰的稳健脚步&#xff0c; 互爱&#xff0c;让福气溢满整个世界……

51单片机应用开发---什么是单片机?为什么要学习单片机?

实现目标 1、熟悉单片机定义、特点、应用场景、发展历史等&#xff1b; 2、理解为什么要学习单片机&#xff1f;怎样学习单片机&#xff1f; 一、单片机是什么&#xff1f; 1、定义 单片机是集成在一块&#xff08;单&#xff09;芯片上的微型计算机。平时我们把 MCU&#x…

Basler 相机与LabVIEW进行集成

Basler 提供的相机驱动和 SDK (Software Development Kit) 允许用户通过 LabVIEW 对相机进行控制和图像采集。以下是 Basler 相机与 LabVIEW 集成的几种方式&#xff1a; 1. Baslers Pylon SDK Basler 提供的 Pylon SDK 是一套用于控制 Basler 相机的开发工具包&#xff0c;支…

给RAG开药方:亚马逊发布RAGChecker,专治AI回答不准

立即解决AI误差&#xff1a;亚马逊RAGChecker的创新之举 ©作者|Blaze 来源|神州问学 引言 在人工智能领域&#xff0c;RAG&#xff08;Retrieval-Augmented Generation&#xff09;模型以其强大的生成能力和灵活性赢得了广泛关注。它结合了信息检索和生成技术&#xff0…

Matlab2023a/b安装Cplex12.9(实测适配)

目录 1 Matlab2023a/b版本安装Yalmip2 下载Cplex12.92.1 登录官网2.2 搜索意向版本and下载 3 安装cplex4 matlab与cplex耦合&#xff01;&#xff01;&#xff01;5 测试 1 Matlab2023a/b版本安装Yalmip google一下后CSDN有很多安装说明&#xff0c;不再赘述&#xff0c;可见&…

功能这么全的excel导出,你确定不需要?

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 &#x1f38f;&#xff1a;你只管努力&#xff0c;剩下的交给时间 &#x1f3e0; &#xff1a;小破站 功能这么全的excel导出&#xff0c;你确定不需要&#xff1f; 前言Maven坐标HSSFWorkbook、SXSSF…

【音视频】使用movie、drawtext过滤器实现图片、文字水印(6-3)

本来准备从六月份开始研究使用ffmpeg的movie filter实现图片水印、drawtext filter实现文字水印的能力&#xff0c;但一直没时间&#xff0c;临近中秋终于有空&#xff0c;于是研究了下ffmpeg命令行&#xff08;这里不做展示&#xff0c;关注代码实现&#xff09;&#xff0c;从…

AI客服机器人开启企业客户服务新纪元

随着人工智能(AI)技术的迅猛发展&#xff0c;使得AI客服机器人走进了我们的视野&#xff0c;成为提高客户满意度和业务效率的不二法宝。这些智能机器人不仅能够处理海量信息&#xff0c;还能为客户提供个性化的服务体验。 一、AI客服机器人的基本原理 AI客服机器人是基于人工智…

Azure web app has no access to openai private endpoint in virtual network

题意&#xff1a;"Azure Web 应用无法访问虚拟网络中的 OpenAI 私有端点。" 问题背景&#xff1a; I am trying to host a web application similar to a private ChatGPT instance within a secluded virtual network, ensuring that theres no external internet …

​年化收益52%,最大回撤13%,卡玛比率3.77,ETF轮动系列大有可为(附策略代码和数据下载)。

原创内容第648篇&#xff0c;专注量化投资、个人成长与财富自由。 今天继续开发策略&#xff0c;先看结果&#xff1a; 年化52%&#xff0c;最大回撤13%&#xff0c;卡玛比率3.77。 策略逻辑&#xff1a; 买入规则&#xff1a; 5日均线大于20日均线 。 最近20个交易日的涨…

【Prompt Engineering:思维树 (ToT)、检索增强生成 (RAG)、自动推理并使用工具 (ART)】

思维树 (ToT) 对于需要探索或预判战略的复杂任务来说&#xff0c;传统或简单的提示技巧是不够的。最近&#xff0c;Yao et el. (2023)(opens in a new tab) 提出了思维树&#xff08;Tree of Thoughts&#xff0c;ToT&#xff09;框架&#xff0c;该框架基于思维链提示进行了总…

全球著名地标卫星影像收藏第5辑

世界那么大&#xff0c;一起去看看&#xff01; 我们在《全球著名地标卫星影像收藏第4辑》一文中&#xff0c;为大家分享了10全球著名地标高清卫星影像&#xff0c;现在继续为大家分享10个著名地标。 我们整理这些地标的KML文件分享大家&#xff0c;也可以打开相应URL链接即可…

tofixed和math.round什么区别

1、floor 返回不大于的最大整数&#xff08;向下取整&#xff09; 2、round 则是4舍5入的计算&#xff0c;入的时候是到大于它的整数&#xff08;当-1.5时可见&#xff0c;四舍五入后得到的结果不是我们期待的&#xff0c;解决办法是先对他取绝对值&#xff0c;然后在用round方…

全平台7合一自定义DIY小程序源码系统 数据库结构全新升级 带完整的安装代码包以及搭建部署教程

系统概述 随着小程序市场的日益成熟&#xff0c;越来越多的企业和个人开始意识到小程序在品牌推广、用户获取和服务提供方面的巨大潜力。然而&#xff0c;传统的小程序开发方式往往存在开发周期长、成本高、灵活性差等问题&#xff0c;难以满足快速变化的市场需求。因此&#…

如何做尘埃粒子计数器校准,多久一次?北京中邦兴业

尘埃粒子计数器的校准是确保其测量准确性和可靠性的重要环节。以下是关于尘埃粒子计数器校准的详细说明&#xff1a; 一、校准目的 尘埃粒子计数器作为评估和监控洁净室及其他控制环境中空气质量的关键仪器&#xff0c;其准确性和可靠性直接关系到数据的准确性和有效性。定期校…

从To B到AI:产品经理的转型攻略

经过几个月的AI学习之后&#xff0c;我已经对To B产品经理转型AI有了一些自己的理解。 个人认为&#xff0c;想要顺利转型&#xff0c;需要依次经历以下几个思考与学习过程&#xff1a; 认清AI能为产品经理带来的价值&#xff1b;确定AI技术的学习范围&#xff1b;学习AI技术…

关于项目中的内存问题、死锁问题如何定位?——Valgrind

valgrind是如何实现的&#xff1f; 基于仿真方式 在实际处理器的基础上仿真一个虚拟处理器&#xff0c;使应用程序运行于这个虚拟处理器之上&#xff0c;从而进行监视分析。 core dump内存问题定位&#xff1a; 1.无效指针&#xff08;野指针&#xff09; 2.内存泄漏(一般不…

Windows下SDL2创建最简单的一个窗口

先看运行效果 再上代码&#xff1a; #include <stdio.h> #include "SDL.h"int main(int argc, char* argv[]) {// 初始化SDL视频子系统if (SDL_Init(SDL_INIT_VIDEO) -1){printf("Error: %s\n", SDL_GetError());return -1;} // 创建一个窗口SDL_…