tomcat和Servlet开发小案例

在上篇文章中,我已经正确安装了tomcat和利用servlet写了个基础的hello world程序,明白了这两个东西到底是啥玩意.
接下来,需要写个登录的小案例来进一步熟悉下基于servlet开发的流程.

一,新建项目

在这里插入图片描述
我们新建的maven项目其实里面是空的。所以我们需要给他变成一个servlet项目。

二,添加web模块

新建一个空项目之后,我们给他增加一个Web模块。
请添加图片描述

三,引入servlet

在编辑器的pom.xml直接写,编辑器会帮助我们自动下载.

    <dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version></dependency></dependencies>

在这里插入图片描述

四,编写自己的MyServlet类

基本上就是以自己的需求来重写http请求和响应:

init(): 这个方法在Servlet初始化时被调用
doGet(): 这个方法用于处理HTTP GET请求
doPost(): 这个方法用于处理HTTP POST请求
doPut(): 这个方法用于处理HTTP PUT请求
service(): 这个方法根据HTTP请求的方法类型,调用对应的doXXX()方法。
destroy(): 这个方法在Servlet被销毁前被调用

如下:

package com.masiyi.servlet;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;
@WebServlet("/MyServlet")
public class MyServlet extends HttpServlet {public MyServlet() {super();}@Overridepublic void init() throws ServletException {super.init();}@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.doGet(req, resp);}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {resp.setContentType("text/html;charset=UTF-8");req.setCharacterEncoding("utf-8");resp.setCharacterEncoding("utf-8");String username = req.getParameter("username");String pwd = req.getParameter("pwd");System.out.println("用户名:" + username + ":密码:" + pwd);PrintWriter writer = resp.getWriter();writer.print("用户名:" + username);writer.print("密码:" + pwd);writer.close();super.doPost(req, resp);}@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {super.service(req, resp);}@Overridepublic void destroy() {super.destroy();}
}

五,配置自定义servlet类的访问路径

主要是在web.xml中定义:

	<servlet><servlet-name>myServlet</servlet-name><servlet-class>com.masiyi.servlet.MyServlet</servlet-class></servlet><servlet-mapping><servlet-name>myServlet</servlet-name><url-pattern>/myServlet</url-pattern></servlet-mapping>

这段XML配置代码用于将Servlet类com.masiyi.servlet.MyServlet映射到URL模式/myServlet上。

标签用于配置一个Servlet,其中:

指定了Servlet的名称为myServlet。
指定了Servlet类的完整路径为com.masiyi.servlet.MyServlet。

通过这样的配置,当用户请求的URL匹配/myServlet时,容器将会调用com.masiyi.servlet.MyServlet来处理该请求。
或者一个更简便的方式是在MyServle这个类前面使用注解:

@WebServlet("/MyServlet")

六,编写页面

在web根目录创建index.jsp文件

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head><title>向Servlet发送请求</title>
</head>
<body>
<%--注意:action的值 是 :web.xml 文件中的 url-pattern 的值。
--%>
<form action="/MyServlet" method="post">用户名: <input type="text" name="username"> <br>密码: <input type="password" name="pwd"> <br><input type="submit" value="提交">
</form>
</body>
</html>

七,运行项目

使用上篇文章讲的使用idea的tomcath插件部署项目
请添加图片描述

八,运行后的结果

在这里插入图片描述
也就是说,当我们运行部署项目后,浏览器访问localhost:8080,就是访问的index.jsp文件,浏览器解析这个文件,渲染出了这个页面.
而当我们点击提交时,浏览器的url变成localhost:8080/MyServlet,发起了一个新的post请求.
又因为@WebServlet("/MyServlet")这个注解,将该路径映射到MyServlet这个类上,于是开始执行这个类.
又因为它是servlet的实例,支持htt请求和响应的处理,所以能够返回新的数据给浏览器.
也就是说:Servlet是Java中用于处理Web请求的一种技术,它封装了HTTP请求和响应的处理逻辑。通过继承Servlet类并重写其中的方法,我们可以创建自定义的Servlet类,用来拦截和处理HTTP请求,从而完成业务代码逻辑。
具体来说,当客户端发送HTTP请求时,Servlet容器会根据Servlet的映射关系找到对应的Servlet类,并调用其相应的方法(如doGet、doPost等)来处理请求。在自定义的Servlet类中,我们可以编写业务逻辑代码,包括数据处理、页面渲染、数据库操作等,以实现特定的功能。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Netty对Channel事件的处理以及空轮询Bug的解决

继续上一篇Netty文章&#xff0c;这篇文章主要分析Netty对Channel事件的处理以及空轮询Bug的解决 当Netty中采用循环处理事件和提交的任务时 由于此时我在客户端建立连接&#xff0c;此时服务端没有提交任何任务 此时select方法让Selector进入无休止的阻塞等待 此时selectCnt进…

天途又获证书:甲级互联网地图服务企业、一级软件开发服务企业、一级信息技术服务运行维护服务企业。

10月24日&#xff0c;天途收到了三项重量级证书&#xff0c;甲级互联网地图服务企业资质证书、一级软件开发服务企业资质证书、一级信息技术服务运行维护服务企业证书。 互联网地图&#xff0c;是指登载在互联网上或者通过互联网发送的基于服务器地理信息数据库形成的具有实时…

【一种基于改进A*算法和CSA-APF算法的混合路径规划方法】—— 论文阅读

论文题目&#xff1a;A Hybrid Path Planning Method Based on Improved A∗ and CSA-APF Algorithms 1 摘要 大问题&#xff1a;复杂动态环境下全局路径规划难以避开动态障碍物&#xff0c;且局部路径容易陷入局部最优的问题 问题1&#xff1a;针对A*算法产生冗余路径节点和…

在 Windows 11 上安装 MongoDB

MongoDB 是一个流行的 NoSQL 数据库&#xff0c;它提供了灵活的数据存储方案&#xff0c;而 MongoDB Compass 则是一个可视化管理工具&#xff0c;可以更轻松地与 MongoDB 数据库交互和管理。在本文中&#xff0c;我们将介绍如何在 Windows 11 上安装 MongoDB&#xff0c;并配置…

冒泡排序(六大排序)

冒泡排序 冒泡排序的特性总结&#xff1a; 1. 冒泡排序是一种非常容易理解的排序 2. 时间复杂度&#xff1a;O(N^2) 3. 空间复杂度&#xff1a;O(1) 4. 稳定性&#xff1a;稳定 动图分析&#xff1a; 代码实现&#xff1a; Swap(int*p1,int*p2) {int tmp *p1;*p1*p2…

2.11 Python关键字(保留字)

Python关键字&#xff08;保留字&#xff09;一览表 保留字是Python 语言中一些已经被赋予特定意义的单词&#xff0c;这就要求开发者在开发程序时&#xff0c;不能用这些保留字作为标识符给变量、函数、类、模板以及其他对象命名。 Python 包含的保留字可以执行如下命令进行…

SQL-CRUD-2数据库实验

目录 第一关任务描述 相关知识 插入完整内容的行 插入选定内容的行 编程要求 测试说明 第一关代码 第二关任务描述 相关知识 删除表中的指定行 删除表中的所有行 编程要求 测试说明 第二关代码 第三关任务描述 相关知识 更新表中的指定行 编程要求 测试说明…

计算机专业在找工作时的注意事项

目录 说在前面关于我一些忠告关于简历关于银行写在最后 说在前面 满满的求生欲。我不是什么大佬&#xff0c;更没有能力教大家什么。只是看到有不少学弟学妹&#xff0c;还在为找一份工作焦头烂额&#xff0c;却没有努力的方向。所以这里斗胆给计算机相关专业的学弟学妹们的一…

php 快速入门(七)

一、操作数据库 1.1 操作MySQL的步骤 第一步&#xff1a;登录MySQL服务器 第二步&#xff1a;选择当前数据库 第三步&#xff1a;设置请求数据的字符集 第四步&#xff1a;执行SQL语句 1.2 连接MySQL 函数1&#xff1a;mysql_connect() 功能&#xff1a;连接&#xff08;登录…

【分类评估指标,精确率,召回率,】from sklearn.metrics import classification_report

from&#xff1a; https://zhuanlan.zhihu.com/p/368196647 多分类 from sklearn.metrics import classification_report y_true [0, 1, 2, 2, 2] y_pred [0, 0, 2, 2, 1] target_names [class 0, class 1, class 2] # print(classification_report(y_true, y_pred, targe…

AJAX-项目优化(目录、基地址、token、请求拦截器)

目录管理 基地址存储 在utils/request.js配置axios请求基地址 作用&#xff1a;提取公共前缀地址&#xff0c;配置后axios请求时都会baseURLurl 填写API的公共前缀后&#xff0c;将js文件导入到html文件中 <script src"../../utils/request.js"></script&…

黑群晖基于docker配置frp内网穿透

前言 我的黑群晖需要设置一下内网穿透来外地访问&#xff0c;虽然zerotier的p2p组网已经很不错了&#xff0c;但是这个毕竟有一定的局限性&#xff0c;比如我是ios的国区id就下载不了zerotier的app&#xff0c;组网不了 1.下载镜像 选择第一个镜像 2.映射文件 配置frpc.ini&a…