26-第一个Servlet项目

news2024/11/22 14:02:47

目录

1.Servlet是什么?

2.第一个Servlet项目

2.1.创建Maven项目

2.2.引入Servlet依赖(将Maven项目改为Servlet项目(尚不完整))

2.3.完善Servlet项目目录——源代码目录&单元测试目录(非必须)

2.4.编写代码

①继承HttpServlet

②设置url映射

③重写doGet / doPost...方法

2.5.打包项目

2.6.部署/发布项目到Tomcat中

2.7.启动Tomcat,访问网站

PS:更方便地运行Java Web项目

①安装Smart Tomcat插件

②配置Smart Tomcat插件

③运行项目

④调试项目:打断点,访问url,调试。

PS:访问出错怎么办?

①出现 404

②出现 405

③出现 500

④出现 "空白页面"

⑤出现 "无法访问此网站"

⑥中文乱码


1.Servlet是什么?

Servlet 是⼀款⽤来开发 Java Web 的框架。它是基于 Http 协议交换并且运⾏在 Tomcat ⾥的框架技术。

Servlet功能:

  1. 用户的url到程序的映射。(Servlet 允许程序猿注册⼀个类,在 Tomcat 收到某个特定的 HTTP 请求的时候,执⾏这个类中的⼀些代码。)
  2. 得到Request请求中的所有数据。(帮助程序猿解析 HTTP 请求,把 HTTP 请求从⼀个字符串解析成⼀个 HttpRequest 对象。)
  3. 将服务器端处理的结果返回给用户。(帮助程序猿构造 HTTP 响应。程序猿只要给指定的 HttpResponse 对象填写⼀些属性字段,Servlet 就会自动地按照 HTTP 协议的方式构造出⼀个 HTTP 响应字符串,并通过 Socket 写回给客户端。)

当然,Servlet 还⽀持⼀些其他的辅助功能,此处暂不介绍。

2.第一个Servlet项目

2.1.创建Maven项目

Servlet是基于Maven来创建的。

项目目录:

pom.xml文件:

项目打包类型:

  1. war包:web项目压缩包,包含了当前web项目的所有字节码,以及用到的一些前台文件。
  2. jar包:java项目的工具压缩包。

2.2.引入Servlet依赖(将Maven项目改为Servlet项目(尚不完整))

<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.1.0</version>
    <scope>provided</scope>
</dependency>

用3.1.0版本,与tomcat对应一致。

复制粘贴到pom.xml文件的<dependencies></dependencies>依赖中。点击重新导入按钮。

2.3.完善Servlet项目目录——源代码目录&单元测试目录(非必须)

2.4.编写代码

在 java 目录中创建⼀个类 HelloServlet(类名默认是:业务名+Servlet)

①继承HttpServlet

②设置url映射

③重写doGet / doPost...方法

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 java.io.IOException;

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //返回的类型
        resp.setContentType("text/html"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>Hello,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

2.5.打包项目

2.6.部署/发布项目到Tomcat中

2.7.启动Tomcat,访问网站

PS:更方便地运行Java Web项目

①安装Smart Tomcat插件

a.Idea搜索

应用市场是国外的,如果第一次搜索不到,更换网络,关闭再试。

若还是搜索不到,则是Idea版本不兼容。

b.网页搜索

Tomcat网页下载icon-default.png?t=N3I4https://plugins.jetbrains.com/plugin/9492-smart-tomcat

重启Idea。

②配置Smart Tomcat插件

 

 

 

③运行项目

若不成功,检查端口号是否被占用。

④调试项目:打断点,访问url,调试。

Idea是借助了外置的Tomcat来运行项目的。

运行时是运行Tomcat里的main方法的,在main方法里做了一个事件的监视,当有人访问网站时,进行拦截事件,根据url进行匹配,找到程序中对应的类,将请求直接映射到方法上。

PS:访问出错怎么办?

①出现 404

404 表示⽤户访问的资源不存在。

⼤概率是 URL 的路径写的不正确。

  • 错误实例1:少写了 Context Path

  • 错误实例2:少写了 Servlet Path 

  • 错误实例3:Servlet Path 写的和 URL 不匹配 

  • 错误实例4:web.xml(当前网站的配置文件)写错了 

②出现 405

405 表示对应的 HTTP 请求⽅法没有实现。

  • 错误实例:没有实现 doGet / doPost ⽅法。

如果写一个方法,会执行父类的 doGet / doPost 方法,浏览器啥都没有显示。

如果一个方法都没写,会出现 405。

 

③出现 500

往往是 Servlet 代码中抛出异常导致的。

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//        int num = 0;
//        int count = 10 / num;
        Object obj = null;
        System.out.println(obj.hashCode());
        //返回的类型
        resp.setContentType("text/html"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>Hello,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

④出现 "空白页面"

没有使用resp.getWritter().write() 操作来输出内容。

⑤出现 "无法访问此网站"

⼀般是 Tomcat 启动失败。

⑥中文乱码

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //返回的类型
        resp.setContentType("text/html"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>你好,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

解决:设置编码

@WebServlet("/hello") // http://ip:port/hello -> url映射到当前类
public class HelloServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //返回的类型和编码格式
        resp.setContentType("text/html; charset=utf-8"); //返回的不是html静态页面,返回的是html里的内容
        //返回的数据
        resp.getWriter().println("<h1>你好,Servlet.</h1>"); //打印器:打印数据给前端
    }
}

Servlet中每次改动代码只能自己手动重启Tomcat。

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

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

相关文章

4月24日作业

作业1 #include <iostream> using namespace std; template <typename T> class Node { private: T* p; //指针指向栈的首地址 int maxsize; //栈最大容量 int top-1; //栈顶 public: Node(){} //无参构造 Node(int max):maxsize(max)//有参构造 填最大容…

2022 ICPC Gran Premio de Mexico Repechaje 题解

目录 A. Average Walk&#xff08;签到&#xff09; 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; C. Company Layoffs&#xff08;签到&#xff09; 题意&#xff1a; 思路&#xff1a; 代码&#xff1a; D. Denji1&#xff08;模拟/二分&#xff09; 思路&am…

Bsah shell的操作环境

文章目录 Bsah shell的操作环境路径与命令查找顺序使用案例 bash的登录与欢迎信息&#xff1a;/etc/issue、/etc/motdbash的环境配置文件如下login与non-login shell/etc/profile(login shell 才会读)~/.bash_profile(login shell 才会读)source&#xff1a;读入环境配置文件的…

简单介绍一下什么是“工作内存”和“主内存”(JMM中的概念)

在学习Java多线程编程里&#xff0c; volatile 关键字保证内存可见性的要点时&#xff0c;看到网上有些资料是这么说的&#xff1a;线程修改一个变量&#xff0c;会把这个变量先从主内存读取到工作内存&#xff1b;然后修改工作内存中的值&#xff0c;最后再写回到主内存。 对…

【基于gcc】手把手教你移植RT-Thread到STM32

前言 网上大多数移植RT-Thread系统的教程都是基于Keil的&#xff0c;下面将带来基于gcc版本的移植教程&#xff0c;若你还没有基于gcc的环境&#xff0c;可以查看我的这篇文章&#xff1a;VSCode搭建STM32开发环境 1、下载RT-Thread源码 RT-Thread有好几个版本&#xff0c;我…

小程序路由跳转

小程序中的路由只是单纯页面地址的跳转&#xff0c;一般在页面中使用 navigator 组件来实现&#xff0c;也有很多场景需要在 js 中根据逻辑的执行结果跳转到某个页面&#xff0c;比如&#xff1a;如果检测到用户尚未登录就需要给他跳转到登录页面 1.1navigate navigate 跳转到…

软件工程开发文档写作教程(04)—开发文档的编制策略

本文原创作者&#xff1a;谷哥的小弟作者博客地址&#xff1a;http://blog.csdn.net/lfdfhl本文参考资料&#xff1a;电子工业出版社《软件文档写作教程》 马平&#xff0c;黄冬梅编著 开发文档编制策略 文档策略是由上级(资深)管理者制订的&#xff0c;对下级开发单位或开发人…

银河麒麟 Server V10 离线源建立+部署

前言 这国产操作系统真神奇&#xff0c;docker CentOS7&#xff0c; MySQL CentOS8 简直了&#xff0c;这缝合技术真是绝了&#xff01; docker CentOS7 能装最新版 23 很顺利的&#xff01; MySQL CentOS8 也是最新版8.0.33的&#xff0c;也很顺利&#xff01; 系统版本 …

权威解析,软件测试的当下分析现状

Parasoft是一家专门提供软件测试解决方案的公司&#xff0c;Parasoft通过其经过市场验证的自动化软件测试工具集成套件&#xff0c;帮助企业持续交付高质量的软件。Parasoft的技术支持嵌入式、企业和物联网市场&#xff0c;通过将静态代码分析和单元测试、Web UI和API测试等所有…

详解树与二叉树的概念,结构,及实现(下篇)

目录 一&#xff0c; 二叉树链式实现 1. 前置说明 2. 二叉树遍历&#xff08;主打的就是一个分治思想&#xff09; 2. 1 前序遍历 2. 2 中序遍历 2. 3 后序遍历 2. 4 层序遍历 3. 二叉树结点个数及高度 3. 1 二叉树节点个数 3. 2 二叉树叶子节点个数 3. 3 二叉树第…

数字信号处理技术(三)自适应噪声完备集合经验模态分解(CEEMDAN)-Python代码

本文仅对自适应噪声完备集合经验模态分解&#xff08;CEEMDAN&#xff09;的原理简单介绍和重点介绍模型的应用。 1. CEEMDAN原理 CEEMDAN&#xff08;Complete Ensemble Empirical Mode Decomposition with Adaptive Noise&#xff09;的中文名称是自适应噪声完备集合经验模…

一文全解经典机器学习算法之支持向量机SVM(关键词:SVM,对偶、间隔、支持向量、核函数、特征空间、分类)

文章目录 一&#xff1a;概述二&#xff1a;间隔与支持向量三&#xff1a;对偶问题&#xff08;1&#xff09;什么是对偶问题&#xff08;2&#xff09;SVM对偶问题&#xff08;3&#xff09;SMO算法 四&#xff1a;核函数&#xff08;1&#xff09;核函数的概述和作用&#xf…

车载应用生态:小程序容器技术成为保障安全的有力措施

随着智能交通和车联网技术的快速发展&#xff0c;越来越多的车载应用程序&#xff08;APP&#xff09;进入人们的视野&#xff0c;从而推动了车载业务生态的不断发展。然而&#xff0c;车载应用程序的安全问题也引起了人们的广泛关注。为此&#xff0c;小程序容器技术作为一种有…

4.24每日一练

题目 给定两个大小分别为 m 和 n 的正序&#xff08;从小到大&#xff09;数组 nums1 和 nums2。请你找出并返回这两个正序数组的 中位数 。 算法的时间复杂度应该为 O(log (mn)) 。 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcod…

毕业设计 医学图像阅读器 DICOM CT MRI 阅读器 三维重建 可视化编程技术及应用

一、 概述 此系统实现了常见 VTK 四视图&#xff0c;实现了很好的 DICOM 图像显示&#xff0c;可用于 DICOM 超声 X线 CT MR 三维重建 拾取像素值 窗宽 窗位 像素&#xff0c;距离测量&#xff0c;角度测量&#xff0c;提供源码&#xff1b; 并且通过三维重建实现可视化。使用…

客快物流大数据项目(一百一十七):网关 Spring Cloud Gateway

文章目录 网关 Spring Cloud Gateway 一、简介 1、功能特性

OSCP-Exfiltrated(Subrion、exiftool提权)

目录 扫描 WEB 提权 其他方法 扫描 WEB 添加 host信息 访问了该网站,并立即注意到该网站上制作的CMS(Subrion CMS)。

机器学习笔记之密度聚类——DBSCAN方法

机器学习笔记之密度聚类——DBSCAN方法 引言基本思想概念介绍算法过程完整算法描述 DBSCAN \text{DBSCAN} DBSCAN的优点和缺陷 引言 本节将介绍密度聚类—— DBSCAN \text{DBSCAN} DBSCAN方法。 对于其他聚类任务的笔记&#xff1a; K-Means \text{K-Means} K-Means聚类算法&…

PXE高效批量网络装机

PXE 定义 PXE(预启动执行环境&#xff0c;在操作系统之前运行)是由Intel公司开发的网络引导技术&#xff0c;工作在client /server模式&#xff0c;允许客户机通过网络从远程服务器下载引导镜像&#xff0c;并加载安装文件或者整个操作系统。 具备以下三个优点 1 规模化: 同时…

高通 Android 12 framework添加自定义按键上报应用层

Android下添加新的自定义键值和按键处理流程 首先分析下Android下怎么添加新的自定义键值。在Android的原生系统中键值默认情况下是92个&#xff0c;从0-91&#xff1b;一般情况下&#xff0c;这些键值是够用的&#xff0c;但是如果想扩充的话&#xff0c;还是需要添加新的键值…