Java:Servlet详解

目录

一、什么是Servlet

二、Servlet原理

Servlet的生命周期 

三、 Servlet注释

 @WebServlet


一、什么是Servlet

        Servlet是JavaWeb开发的一种技术,Servlet程序需要部署在Servlet容器(服务端)中才能运行,常见的Servlet容器有Tomcat,Jetty等。

        其主要功能在于交互式地浏览和修改数据,生成动态Web内容。这个过程包括以下4个阶段。

        (1)、Client向Server发送请求。

        (2)、Server将请求信息发送至Servlet。

        (3)、Servlet根据请求信息生成响应内容(包括静态或动态内容)并将其传给Server。

        (4)、Server将响应返回给Client。

二、Servlet原理

        从UML类图中我们可以看出Servlet是一个接口,定义了init初始化、service响应服务、destroy销毁等方法,而GennericServlet作为抽象类实现了Servlet接口,而HttpServlet抽象类继承了GennericServlet类,同时定义了doGet方法doPost方法来完成相应的Http处理。

        其中还可以发现HttpServletRequest和HttpServletResponse是接口,其具体的实现类是web服务器tomcat的两个类。也就是说Servlet必须运行在Servlet容器里

Servlet的生命周期 

1.初始化init(),仅在第一次加载Servlet时被调用。

2.执行服务,调用service()方法响应客户请求。

3.销毁调用destory()杀掉Servlet对象。

三、 Servlet注释

        我们平时使用部署描述符(web.xml文件)将应用程序部署到Web服务器中。tomcat7以上版本、Servlet API 3.0引入了一个名为javax.servlet.annotation的新程序包。它提供了可用于对Servlet类进行注释的注释类型。如果使用批注,则不需要部署描述符(web.xml)。

 @WebServlet

属性用处
String nameServlet的名称
urlPatterms过滤器的URL格式数组(支持使用通配符)
valueURL格式数组

使用valueurlPatterns属性中必须声明至少一个URL模式 ,但不能两者都声明(两者不能同时存在)。

实例:

编写了一个带有注释的servlet,url格式为:/Login,它会匹配的请求路径为/Time/Login,其中Time为Web项目名。 

package com.example.servlet;
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 javax.servlet.http.HttpSession;

import com.example.utils.JDBCUtils;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

@WebServlet(name = "LoginServlet",urlPatterns = "/Login")
public class LoginServlet extends HttpServlet {
  @Override
  protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
  //处理客户端的post请求  
    response.setContentType("text/html;charset=utf-8");   
    request.setCharacterEncoding("utf-8");
    response.setCharacterEncoding("utf-8");
    //解决乱码问题!设置内容都为utf-8格式
    PrintWriter out = response.getWriter();
    String username = request.getParameter("name");
    String password = request.getParameter("secret");
    HttpSession session=request.getSession();
    //创建一个会话对象!
    
    JDBCUtils.registerDriver();
    Connection connection=JDBCUtils.getConnection();
    PreparedStatement pStatement=null;
    try {
      ResultSet resultSet=JDBCUtils.checkExit(username, pStatement, connection);
      if(resultSet.next()){
        if(!password.equals(resultSet.getString("password"))){
          out.write("<script language='javascript'>alert('密码错误,请重新输入!');window.location.href='/Todoproject/login.html'</script>");
        }else{
          session.setAttribute("username", username);
          out.write("<script language='javascript'>alert('登录成功!');window.location.href='/Todoproject/menu.html'</script>");
        }
      }else{
        //如果没有找到!
        out.write("<script language='javascript'>alert('该用户不存在!');window.location.href='/Todoproject/login.html'</script>");
      }
    } catch (SQLException e) {
      e.printStackTrace();
      out.write("<script language='javascript'>alert('系统发生错误!');window.location.href='/Todoproject/login.html'</script>");
    }finally{
      JDBCUtils.closeConnection(connection);
    }
  }
}

 以下为表单发起的请求

<form method="post" action="/Time/Login"  id="Login" onsubmit="return checklogin()">
    用户名:<input  type="text" placeholder=" 账号" name="name" id="name"><br><br>
    密码:&emsp;<input  type="password" placeholder=" 密码" name="secret" id="secret">
    <button id="submit" type="submit" >登录</button>
    <button id="register" type="button" onclick="window.open('register.html') " >注册     </button>
</form>

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

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

相关文章

【C++】环境搭建CentOS Clion报错Unsupported git Version 1.8.3.1

【C】环境搭建Clion-Unsupported git Version 1.8.3.1 Git升级步骤1.卸载旧版本2.安装依赖3.下载git最新版本包4.解压git文件包5.编译文件5.将git加入环境变量6.验证git版本 如上图所示&#xff0c;报错Unsupported git Version 1.8.3.1 At least 2.17.0 is required 报错意思…

windows驱动开发-inf文件(一)

驱动总是和inf文件相关&#xff0c;在WinDDK的时候&#xff0c;许多inf文件都需要开发工程师手动编写&#xff0c;不过&#xff0c;现在已经可以使用inx文件来生成inf文件了&#xff0c;它经常用于驱动的安装和卸载&#xff1b;不过&#xff0c;并不是所有的驱动都需要使用inf文…

小白修复msvcp140.dll丢失的解决方法,一键修复丢失的dll文件

在我们使用电脑时&#xff0c;常常会碰到各种烦人的状况。比方说&#xff0c;当我们期待畅玩游戏时&#xff0c;可能会突然遭遇一则令人沮丧的提示&#xff1a;“打开游戏缺少msvcp140.dll文件”。这个问题会给我们带来困扰和不愉快&#xff0c;但庆幸的是&#xff0c;有多种解…

UE4_Water插件_Buoyancy组件使用

water插件提供了一个浮力Actor蓝图类。 需要注意的几个问题&#xff1a; 1、StaticMesh需要替换根组件。 2、需要模拟物理设置质量。 3、需要添加浮力组件&#xff0c;设置浮力点&#xff0c;应用水中牵引力。 4、最重要的是需要激活——自动启用。 5、调水波长的地方 双击图片…

【JavaScript】内置对象 - Date 日期对象 ④ ( 制作倒计时页面 )

文章目录 一、倒计时页面实现1、需求分析2、计算秒数3、计算倒计时时间的 天 / 时 / 分 / 秒4、页面中显示倒计时时间 二、完整代码示例1、完整代码2、执行结果 Date 日期对象参考文档 : https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Da…

北京大学肖臻老师《区块链技术与应用》P16(状态树)和P17(交易树和收据树)

1️⃣ 参考 北京大学肖臻老师《区块链技术与应用》 P16 - ETH状态树篇P17 - ETH交易树和收据树篇 部分文字和图片 北京大学肖臻老师《区块链技术与应用》公开课笔记18——ETH数据结构篇2(状态树2)北京大学肖臻老师《区块链技术与应用》公开课笔记19——ETH数据结构篇3(交易树和…

入门视频剪辑:视频合并不再难,批量嵌套合并的简单步骤

在数字媒体时代&#xff0c;视频剪辑已成为一项基本技能。无论是制作家庭电影、公司宣传片还是在线教育内容&#xff0c;视频剪辑都扮演着重要角色。对于初学者来说&#xff0c;视频剪辑可能看起来有些复杂&#xff0c;但掌握了正确的步骤和技巧后&#xff0c;你会发现它其实并…

Angular中的路由

Angular中的路由 文章目录 Angular中的路由前言一、创建路由二、创建多个组件路由三、创建子路由四、创建多个组件子路由 前言 在Angular中&#xff0c;路由是用于在不同的视图和组件之间导航的机制。Angular提供了一种强大的路由机制来管理单页应用&#xff08;SPA&#xff0…

十九、分布式数据库MyCat

目录 一、概述 1、MyCat是什么&#xff1f; 2、原理&#xff1a; 3、能干什么 1、读写分离 2、数据分片 3、多数据源整合 4、Mycat监控 4、安装部署 1、环境准备 2、安装 3、Mycat配置详解 1、server.xml user 标签 2、schema.xml schema标签&#xff1a; table标签&…

实践遥感卫星场景海洋船只检测,基于YOLOv8全系列【n/s/m/l/x】参数模型开发构建卫星遥感场景下海洋海面船只检测识别系统

遥感相关的实践在我们前面的系列博文中也有相关的一些实践&#xff0c;胡药师基于MASTAR数据集开发构建对应的目标检测系统在前文也有一些介绍&#xff0c;感兴趣的话可以自行移步阅读即可&#xff1a; 《基于YOLOv7开发构建MSTAR雷达影像目标检测系统》 《基于yolov5n的轻量…

多角度解析动态住宅IP的多元化应用

动态住宅IP指的是在住宅网络中使用的、能够随时间或用户需求配置的IP地址&#xff0c;能够根据网络状况自动调整&#xff0c;为用户提供更加灵活、高效的上网体验。这种IP地址不是固定不变的&#xff0c;而是会定期自动更换&#xff0c;这种IP地址也让使用者的安全得以保障。 作…

【牛客】【模板】前缀和

原题链接&#xff1a;登录—专业IT笔试面试备考平台_牛客网 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 前缀和模板题。 前缀和中数组下标为1~n。 前缀和&#xff1a;pre[i]pre[i-1]a[i]; 某段区间 [l,r]的和&#xff1a;pre[r]-pre[l-1] 3.…

247 基于matlab的梁的振型仿真

基于matlab的梁的振型仿真。利用有限元理论&#xff0c;求二维梁的固有频率和振型。短边固定&#xff0c;给定长度、横截面积&#xff0c;弹性模量及材料密度已知。并对比理论计算结果进行分析。各参数自己设定。程序已调通&#xff0c;可直接运行。 247 梁的振型仿真 固有频率…

顶级SCI优化!24年新算法冠豪猪算法CPO优化无人机集群三维路径规划!先用先发!

声明&#xff1a;文章是从本人公众号中复制而来&#xff0c;因此&#xff0c;想最新最快了解各类智能优化算法及其改进的朋友&#xff0c;可关注我的公众号&#xff1a;强盛机器学习&#xff0c;不定期会有很多免费代码分享~ 目录 结果展示 原理讲解 一、路径长度成本 F1 …

【Linux】Linux——Centos7安装RabbitMQ

目录 安装包准备socaterlang 安装rabbitmq安装命令启动rabbitmq&#xff0c;两种方式查看rabbitmq 启动后的情况配置并开启网页插件关闭防火墙或开放端口测试登录问题配置web端访问账号密码和权限添加用户&#xff0c;后面两个参数分别是用户名和密码.添加权限修改用户角色再次…

ifconfig命令找不到 command not found

问题 今天解决虚拟机的网络问题后&#xff0c;使用ifconfig发现报错命令未找到 解决方案 输入yum install ifconfi的程序安装包 yum install ifconfig 如果显示没有可用软件包 ifconfig&#xff0c;错误&#xff1a;。 就输入yum search ifconfig匹配安装包程序 yum searc…

windows环境下 postgresql v12 绿色版+postgis 3.4.1版本配置,空间数据库迁移

windows环境下 postgresql v12 绿色版+postgis 3.4.1版本配置,空间数据库迁移 一、软件环境 操作系统:windows 11 pg免安装版数据库:postgresql-12.17-1-windows-x64-binaries.zip 下载地址:https://get.enterprisedb.com/postgresql/postgresql-12.18-1-windows-x64-bina…

《构建高效审批系统:架构设计与实践》

在现代企业管理中&#xff0c;审批系统扮演着至关重要的角色&#xff0c;它不仅能够规范业务流程&#xff0c;提高工作效率&#xff0c;还能够增强企业的管理控制力和信息化水平。本文将探讨如何设计和构建一套高效的审批系统架构&#xff0c;以满足企业日常审批需求&#xff0…

Vue3基础(API风格、监听、生命周期、toRefs、组件通信、插槽、axios,Promise)

Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09; 目录 Vue3基础&#xff08;API风格、监听、生命周期、toRefs、组件通信、插槽、axios&#xff0c;Promise&#xff09;API 风格选项式API组合式API混合式 事件监听…

并发问题系统学习(更新中)

进程、线程 进程&#xff1a;进程是代码在数据集合上的一次运行活动&#xff0c;是系统进行资源分配和调度的基本单位。可以理解为一个java应用。 线程&#xff1a;线程是进程的一个执行路径&#xff0c;一个进程中至少有一个线程&#xff0c;进程中的多个线程共享进程的资源。…