Servlet:狂神实例源码分析

news2024/11/17 1:55:33

目录

  • servlet
  • 源码:servlet01
  • 启动测试
  • 总结

servlet

在这里插入图片描述

  • 上面就是一个web项目的典型目录,servlet处理request和response的逻辑
  • web.xml管理路由信息
  • index.jsp作为首页访问的页面,jsp是java server page可以认为用java和html混合写前端

源码:servlet01

web.xml

<?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"
         metadata-complete="false">
    <!--注册Servlet-->
    <servlet>
        <servlet-name>hello</servlet-name>
        <servlet-class>com.zty.servlet.HelloServlet</servlet-class>
    </servlet>
    <!--Servlet的请求路径-->
    <servlet-mapping>
        <servlet-name>hello</servlet-name>
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

    <!--404-->
    <servlet>
        <servlet-name>error</servlet-name>
        <servlet-class>com.zty.servlet.ErrorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>error</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>
</web-app>
  • 他的意思是除了hello页(输出hello),其他都是error页(输出404)
  • hello页会用HelloServlet做处理
  • error页会用ErrorServlet做处理
  • metadata-complete需要注意,如果是True则不支持@WebServlet注解,如果是false表示web.xml路由不完全,支持注解

ErrorServlet.java

package com.zty.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.IOException;
import java.io.PrintWriter;

public class ErrorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");
        PrintWriter writer = response.getWriter();
        writer.print("<h1>404</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}
  • get中设置了一下resp的输出类型,编码格式,来了一个PrintWriter把输出打印到html上,writer.print写的是html内容
  • doPost不处理先

HelloServlet.java

package com.zty.servlet;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.annotation.*;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(urlPatterns = "/helloanno")
public class HelloServlet extends HttpServlet {
    //由于get或者post只是请求实现的方式不同,可以相互调用,业务逻辑都一样!
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("进入了doGet方法!");
        //ServletOutputStream outputStream = response.getOutputStream();
        PrintWriter writer = response.getWriter();//响应流
        writer.println("Hello Servlet");
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request, response);
    }
}
  • sout在显示台输出,当然可以用log4j在文件记录,writer在前端输出
  • @WebServlet(urlPatterns = “/helloanno”)所以访问helloanno也是会跳到这个servlet

启动测试

  • helloano和hello下的输出都是Hello servlet
  • 其他都是404

tomcat启动:
在这里插入图片描述

  • 更新一下路由名为/s1简化一下

启动测试:
在这里插入图片描述

  • index.jsp被error覆盖了,因为是/*
    在这里插入图片描述
    在这里插入图片描述
  • 通过web.xml和注解都可以写好路由
  • web.xml中是按照先后顺序的,因为先写了hello,所以不会被/*覆盖,至于为什么helloanno也不会被覆盖emmm,我觉得或许是因为注解的优先级更高?我猜的

总结

  • servlet初使用
  • 首先定义每个页面绑定会去到哪个servlet
  • 每个servlet的处理逻辑是啥等
  • 后面还有不同servlet之间的交互,以及resp的多种形式,jsp的具体编写等,好像听说是SpringMVC的基础哦!

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

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

相关文章

汽车电子之功能安全产品设计过程

汽车电子之功能安全产品设计过程 内容来自 驱动视界 学习为主。 1.概念阶段 2.系统阶段 3.硬件层面 4.软件层面 5.3“V” 6.大追溯关系 随着电动化、智能化的发展&#xff0c;越来越多的汽车配备了电子电气系统&#xff0c;如电传动系统、助力转向系统、自动驾驶系统等&…

数据库日常实操优质文章分享(含Oracle、MySQL等) | 11月刊

墨天轮社区正持续举办【聊聊故障处理那些事儿】DBA专题征文活动中&#xff0c;每月进行评优发奖&#xff0c;鼓励大家记录工作中遇到的数据库故障处理过程&#xff0c;不仅用于自我复盘与分析&#xff0c;同时也能帮助其他的同仁们避坑。 这里为大家整理出了11月的13篇优质文章…

Spring Cloud OpenFeign

RestTemplate 是springweb组建 作为Spring Cloud的子项目之一&#xff0c;Spring Cloud OpenFeign 是一种声明式、模板化的 HTTP 客户端&#xff0c;在 Spring Cloud 中使用 OpenFeign&#xff0c;可以做到使用 HTTP请求远程服务时能与调用本地方法一样的编码体验&#xff0c;开…

java自封装加密摘要工具类

首先 可以去看这篇文章 Java md5加密 - 酷盖的小机灵 - 博客园 MessageDigest&#xff08;加密&#xff09;_禅悟刂的博客-CSDN博客_messagedigest 在实际开发中&#xff0c;需要将用户的密码这种敏感字段加密后存储到数据库中&#xff0c;千万不可以用明文存储。 加密原理 为…

[旭日X3派] 初识篇 - 02

开局先给整个详细产品参数~ 处理器地平线旭日 X3M 芯片CPU四核 ARM Cortex-A531.2GHzBPU双核 1GHz&#xff0c;等效算力 5 TOPS内存2G/4G Byte LPDDR4存储器外置TF卡摄像头MIPI CSI 2lane 2显示接口HDMI 1 (up to 1920 1080); MIPI-DSI 1 (up to 1920 1080);USB HostUSB …

[Android移动安全渗透基础教程] 工具篇

也许每个人出生的时候都以为这世界都是为他一个人而存在的&#xff0c;当他发现自己错的时候&#xff0c;他便开始长大 少走了弯路&#xff0c;也就错过了风景&#xff0c;无论如何&#xff0c;感谢经历 0x01 从 Play Store中提取 .apk 文件 1.1 问题的来源 当想要从 Play S…

ComponentOne Studio WPF部署功能完全兼容

ComponentOne Studio WPF部署功能完全兼容 ComponentOne WPF Edition是一组易于使用的WPF组件&#xff0c;包括.NET应用程序的高级网格、图表、报告和调度控件。ComponentOne WPF控件使用XAML构建&#xff0c;以促进团队协作&#xff0c;并与Windows Presentation Foundation的…

ChatGPT ,能替代程序员吗?

最近朋友圈都在聊一个ai&#xff0c;知乎甚至一度上了热榜&#xff0c;现在已经有540个回答了 好嘛&#xff0c;既然咱也是个程序员&#xff0c;这不得体验一波&#xff1f; 当我火急火燎的点开时 乳化&#xff0c;赤裸裸的乳化&#xff01; 体验 问题不大&#xff0c;还有闲…

Nacos的服务心跳

nacos的实例分为临时实例和永久实例两种,相应的不同的实例会用有不同的心跳机制. 临时实例基于心跳方式做健康检测,永久实例是有Nacos主动探测实例状态. 可以通过在yaml文件配置. spring:application:name: order-servicecloud:nacos:discovery:ephemeral: false # 设置实例为…

举个栗子~Minitab 技巧(6):使用 T 检验 分析产品质量

在企业生产过程中&#xff0c;我们往往需要对产品质量负责。最常见的场景是&#xff0c;如何判断生产线中的产品&#xff0c;是否满足质量标准&#xff1f;比如&#xff0c;某工厂现有一批产品&#xff0c;目标生产重量是 20g&#xff0c;通过随机抽取不同的产品&#xff0c;如…

springsecurity

目录 一、权限管理简介 1、什么是权限管理 2、认证 2、基于资源的访问控制 三、Spring Security概述 1&#xff0c;Spring Security简介 2、Spring Security快速入门 2.1、引入依赖 2.2、创建一个控制器 2.3、启动项目 四、Spring Security 认证配置 1、WebSecurity…

公司自研组件库打包之后chunk.css文件25W行代码

项目场景&#xff1a; 基于Antd开发的UI组件库&#xff0c;主要分为两部分。 一部分是基础组件&#xff0c;直接在Antd的基础上包了一层&#xff0c;然后根据自身需求拓展了新的功能。如&#xff1a; input的状态除了本身支持的error和warning两种&#xff0c;额外增加了成功的…

手写JS—深拷贝

什么是深拷贝 一个引用对象一般来说由两个部分组成&#xff1a;一个具名的Handle&#xff0c;也就是我们所说的声明&#xff08;如变量&#xff09;和一个内部&#xff08;不具名&#xff09;的对象&#xff0c;也就是具名Handle的内部对象。它在Manged Heap&#xff08;托管堆…

Real diff算法是怎么运作的?

React 的 Reconciliation 算法原理 React 的渲染机制 Reconciliation 过程 React 采用的是虚拟 DOM (即 VDOM )&#xff0c;每次属性 (props) 和状态 (state) 发生变化的时候&#xff0c;render 函数返回不同的元素树&#xff0c;React 会检测当前返回的元素树和上次渲染的元素…

论文阅读笔记 | 三维目标检测——PV-RCNN算法

如有错误&#xff0c;恳请指出。 文章目录1. 背景2. 网络结构2.1 Feature Encoder and Proposal Generation2.2 voxel-to-keypoint scene encoding2.3 Keypoint-to-grid RoI Feature Abstraction3. 实验部分paper&#xff1a;《PV-RCNN: Point-Voxel Feature Set Abstraction f…

JavaScript -- DOM事件总结

文章目录事件1 事件对象简介2 Event对象3 冒泡4 事件的委派5 事件的捕获事件 1 事件对象简介 事件对象是由浏览器在事件触发时所创建的对象&#xff0c;这个对象中封装了事件相关的各种信息通过事件对象可以获取到事件的详细信息比如&#xff1a;鼠标的坐标、键盘的按键…浏览…

单频信号的相位谱计算与误差修正-附Matlab代码

一、问题描述 我们在实际处理时经常遇到只有一个正弦信号的情况&#xff0c;其频率为 f0{{f}_{0}}f0​&#xff0c;在谱分析以后&#xff0c;除了在频率为 f0{{f}_{0}}f0​处有相位数值外&#xff0c;其他频率处都有相位数值&#xff0c;分析其他频谱出现相位值的原因。 例如…

外部tomcat资源整合

Spring Boot应用默认是以jar包方式运行的&#xff0c;Springboot默认有内置的tomcat&#xff0c;在启动的时候会自动的将项目发布&#xff0c;这样各有利弊。 优点&#xff1a;简单&#xff0c;便携 缺点&#xff1a;不支持jsp, 定制优化比较麻烦&#xff0c;需要自己编写ser…

如何开发一个婚恋交友系统?开发功能特点有什么?

婚恋平台为年轻人开启了一个交流恋爱的方式&#xff0c;一方面为的是适龄的年轻单身人士&#xff0c;另一方面为一部分大龄单身人士&#xff0c;解决单很多身人 士的需求&#xff0c;婚恋平台的开发&#xff0c;跟随着互联网的发展&#xff0c;抢占了小程序的热门市场&#xf…

Java线程实现

内容引用自《深入理解Java虚拟机&#xff1a;JVM高级特性与最佳实践&#xff08;第3版&#xff09;周志明》 线程的实现 我们知道&#xff0c;线程是比进程更轻量级的调度执行单位&#xff0c;线程的引入&#xff0c;可以把一个进程的资源分配和 执行调度分开&#xff0c;各个…