web前端的路径和Servlet注解开发

news2025/1/13 15:32:38

目录

在web前端的两种路径

绝对路径的两种写法

相对路径 

 相对路径进阶

使用注解开发Servlet

使用注解开发Servlet的注意事项

使用idea创建servlet模板


在web前端的两种路径

绝对路径的两种写法

1.带网络三要素   http://ip地址:端口号/资源路径

2.不带网络三要素

 /资源路径 这里/不能省略 ,要求访问的资源必须在同一个服务器上

前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>

  <a href="http://localhost:8080/path1">带网络三要素绝对路径访问Servlet</a>
  <a href="/path1">不带网络三要素绝对路径访问Servlet</a>
</body>
</html>

servlet类

public class path01Servlet extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet");
    }
}

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">

    <servlet>
        <servlet-name>path01Servlet</servlet-name>
        <servlet-class>com.hhh.servlet.path01Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>path01Servlet</servlet-name>
        <url-pattern>/path1</url-pattern>
    </servlet-mapping>

</web-app>

浏览器访问

相对路径 

相对的不是当前项目,而是相对于URL地址栏 

写法

1.  "./path2"

2.  省略./    "path2"

public class path2Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet2...get");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

前端页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <a href="./path2">相对路径</a>
    <br>
    <a href="path">相对路径</a>
</body>
</html>

web.xml文件

<servlet>
        <servlet-name>path2Servlet</servlet-name>
        <servlet-class>com.hhh.servlet.path2Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>path2Servlet</servlet-name>
        <url-pattern>/path2</url-pattern>
    </servlet-mapping>

浏览器页面

点击相对路径后,/demo2.html,会替换成path2

 相对路径进阶

 

可以替换是因为WEB-INF(包含web.xml)和demo2.html在同一个目录下,所以可以使用相对路径进行替换

如果html文件和 WEB-INF不在同一个目录呢

web.xml


        <servlet-name>path3Servlet</servlet-name>
        <servlet-class>com.hhh.servlet.path3Servlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>path3Servlet</servlet-name>
        <url-pattern>/path3</url-pattern>
    </servlet-mapping>

servlet类

public class path3Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("servlet3...get");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        super.doPost(req, resp);
    }
}

前端

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--    直接使用绝对路径-->
    <a href="http://localhost:8080/path3">path3绝对路径</a>
    <br>
    <a href="/path3">path3绝对路径</a>
    <br>
<!--    使用相对路径
        访问当前路径的上一级目录下的/path3
-->
    <a href="../path3">path3相对路径</a>
</body>
</html>

浏览器访问,要加上/a才能访问

点击相对路径

路径会变成/path3

使用注解开发Servlet

@WebServlet("/annDemo1")
public class annDemo1Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("anno Servlet");
    }
}

这样一来就不用在web.xml文件中书写映射关系

结果:

anno Servlet

使用注解开发Servlet的注意事项

1.注解开发使用的是@webServlet
2.@webServlet注解常见的属性是:
    1)String name() default "";相当于web.xml的 <servlet-name>t</servlet-name>可以不写
    2)String[] urlPatterns() default {};相当于web.xml的 <url-pattern></url-pattern>
    使用注解的时候,如果注解的属性是数组,那么我们使用的时候只给属性一个值,那么可以省略{}

     String[] value() default {};该属性等价于urlPatterns属性,好处是可以省略代码
     在使用注解的时候关于属性名是value是可以省略的
        1.如果注解的属性只有一个value,可以省略
        2.如果注解有多个属性,并且每个属性都有默认值,此时给value赋值时可以省略value,如果除了给value赋值还有
        其他属性赋值,这样就不可以省略value.
/*
    1.注解开发使用的是@webServlet
    2.@webServlet注解常见的属性是:
        1)String name() default "";相当于web.xml的 <servlet-name>t</servlet-name>可以不写
        2)String[] urlPatterns() default {};相当于web.xml的 <url-pattern></url-pattern>
        使用注解的时候,如果注解的属性是数组,那么我们使用的时候只给属性一个值,那么可以省略{}

         String[] value() default {};该属性等价于urlPatterns属性,好处是可以省略代码
         在使用注解的时候关于属性名是value是可以省略的
            1.如果注解的属性只有一个value,可以省略
            2.如果注解有多个属性,并且每个属性都有默认值,此时给value赋值时可以省略value,如果除了给value赋值还有
            其他属性赋值,这样就不可以省略value.
 */
//@WebServlet("/annDemo1")
@WebServlet({"/annoDemo1","/annoDemo2"})
public class annDemo1Servlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("anno Servlet");
    }
}

使用idea创建servlet模板

 在servlet中书写

#if (${PACKAGE_NAME} && ${PACKAGE_NAME} != "")package ${PACKAGE_NAME};#end
#parse("File Header.java")

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

@WebServlet("/${Class_Name}")
public class ${Class_Name} extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        
    }

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }
}

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

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

相关文章

Java开发大厂面试第17讲:MySQL 的优化方案有哪些?数据库设计、查询优化、索引优化、硬件和配置优化等

性能优化&#xff08;Optimize&#xff09;指的是在保证系统正确性的前提下&#xff0c;能够更快速响应请求的一种手段。而且有些性能问题&#xff0c;比如慢查询等&#xff0c;如果积累到一定的程度或者是遇到急速上升的并发请求之后&#xff0c;会导致严重的后果&#xff0c;…

Springboot开发 -- Postman 调试类型详解

引言 在 Spring Boot 应用开发过程中&#xff0c;接口测试是必不可少的一环。Postman 作为一款强大的 API 开发和测试工具&#xff0c;可以帮助开发者轻松构建、测试和管理 HTTP 请求。本文将为大家介绍如何在 Spring Boot 开发中使用 Postman 进行接口测试。 一、准备工作 安…

Three.js点与材质(Points)

球几何体 // 创建球几何体 const sphereGeometry new THREE.SphereGeometry(3, 20, 20) const material new THREE.MeshBasicMaterial({color: 0xff0000,wireframe: true // 以线框的形式显示顶点 }) const mesh new THREE.Mesh(sphereGeometry, material) scene.add(mesh)点…

淘宝订单系统ERP中如何接入平台订单信息?(订单API)

淘宝开放平台中有交易API&#xff0c;里面有各种关于交易的API接口。但是申报应用权限的审核流程严格又漫长。不少公司费时费力的申请后&#xff0c;结果还是没有审批下来。 调用淘宝自定义接口custom&#xff0c;可以实现淘宝开放平台API的调用。技术人员会根据您需要的接口做…

力扣第141题和142题-环形链表,是否有环,环的入口节点

因这2道题均不改变链表结构&#xff0c;所以可以不创建新的临时头结点 /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ bool hasCycle(struct ListNode *head) {if(headNULL||head->nextNULL)//若只有一个数…

恶劣天候鲁棒三维目标检测论文整理

恶劣天候鲁棒三维目标检测论文整理 Sunshine to Rainstorm: Cross-Weather Knowledge Distillation for Robust 3D Object DetectionRobo3D: Towards Robust and Reliable 3D Perception against CorruptionsLossDistillNet: 3D Object Detection in Point Cloud Under Harsh W…

2024目前网上最火短剧机器人做法,自动搜索发剧 自动更新资源 自动分享资源

目前整个项目圈子很多的短剧机器人&#xff0c;我写的&#xff0c;自动搜索发剧&#xff0c;自动更新资源&#xff0c;自动分享资源&#xff0c;前段时间大部分做短剧的都是做的短剧分成&#xff0c;我的一个学员做的30W播放量才200块收益&#xff0c;备受启发&#xff0c;我就…

迷你手持小风扇到底哪个牌子最好?揭秘迷你手持手持小风扇排行榜

在炎炎夏日&#xff0c;迷你手持小风扇成为了我们不可或缺的清凉伴侣。然而&#xff0c;面对市场上琳琅满目的品牌&#xff0c;迷你手持小风扇到底哪个牌子最好&#xff1f;今天&#xff0c;我将揭秘迷你手持小风扇排行榜&#xff0c;带大家一探各大品牌的魅力&#xff0c;让你…

交叉编译程序,提示 incomplete type “struct sigaction“ is not allowed

问题描述 incomplete type "struct sigaction" is not allowed解决办法 在代码的最顶端添加如下代码即可 #define _XOPEN_SOURCE此定义不是简单的宏定义&#xff0c;是使程序符合系统环境的不可缺少的部分 _XOPEN_SOURCE为了实现XPG&#xff1a;The X/Open Porta…

Vitis HLS 学习笔记--抽象并行编程模型-控制驱动与数据驱动

目录 1. 简介 2. Takeaways 3. Data-driven Task-level Parallelism 3.1 simple_data_driven 示例 3.2 分析 hls::task 类 3.3 分析通道(Channel) 3.4 注意死锁 4. Control-driven Task-level Parallelism 4.1 理解控制驱动的 TLP 4.2 simple_control_driven 示例 4…

59 多次 mmap 虚拟地址的关系

前言 这是来自于网友的一篇帖子 然后 我们这里来探究一下这个问题 主要是 多次连续的 mmap 获取到的 虚拟地址区域 是否连续 以及 衍生出的一些其他的问题 从 mmap 的实现 我们可以知道, mmap 的空间是 自顶向下 分配的, 因此 两块空间应该是连续的, 第一块在上面, 第二块…

二百三十七、Hive——DWS层生成每个清洗字段的异常情况记录

一、目的 在Hive中对每种业务数据的清洗字段的异常数据进行记录 例如这张图&#xff0c;上面是原始数据&#xff0c;下面是每台雷达每天的异常字段的记录 二、实施步骤 &#xff08;一&#xff09;建表 create table if not exists dws_data_clean_record_queue(data_ty…

Go团队:Go是什么

2024年的Google I/O大会[1]如期而至。 这届大会的核心主旨毫无疑问是坚定不移的以AI为中心&#xff1a;Google先是发布了上下文长度将达到惊人的200万token的Gemini 1.5 Pro[2]&#xff0c;然后面对OpenAI GPT-4o的挑衅&#xff0c;谷歌在大会上直接甩出大杀器Project Astra[3]…

关于pytest中用例名称使用中文乱码的解决

场景&#xff1a;使用pytest.mark.parametrize装饰器为用例自定义名称时&#xff0c;运行显示乱码。如下图所示&#xff1a; 解决方案&#xff1a; 1.在根目录 pytest.ini中增加一行代码 [pytest] disable_test_id_escaping_and_forfeit_all_rights_to_community_supportTrue…

学习使用博客记录生活

学习使用博客记录生活 新的改变 今天新的开始&#xff0c;让我用图片开始记录吧 看这个背景图片怎么样

微信小程序实现容器图片流式布局功能,配合小程序原生框架使用。

小程序实现容器图片流式布局功能&#xff0c;因为目前论坛上也有很多博主出过类似的文章&#xff0c;这里我就以一个小白角度去讲一下如何实现的吧。给作者一点点鼓励&#xff0c;先点个赞赞吧&#x1f44d;&#xff0c;蟹蟹&#xff01;&#xff01; 目标 实现下方效果图 技术…

基金/证券项目如何进行非交易日数据补全(实战)

一些大数据开发的项目&#xff0c;特别是基金/证券公司的项目&#xff0c;都经常会涉及到交易日与非交易日的概念。 如果要让你对一张交易日跑批的主表&#xff0c;怎么去补全非交易日的数据呢&#xff1f; 在遇到这种情况的时候&#xff0c;我们要去怎么处理&#xff1f;来&…

模板编译之入口分析

Vue 是一个渐进式 JavaScript 框架&#xff0c;提供了简单易用的模板语法&#xff0c;帮助开发者以声明式的方式构建用户界面。Vue 的模板编译原理是其核心之一&#xff0c;它将模板字符串编译成渲染函数&#xff0c;并在运行时高效地更新 DOM。本文将深入探讨 Vue 模板编译的原…

图片分类模型训练及Web端可视化预测(下)——Web端实现可视化预测

Web端实现可视化预测 基于Flask搭建Web框架&#xff0c;实现HTML登录页面&#xff0c;编写图片上传并预测展示页面。后端实现上一篇文章所训练好的模型&#xff0c;进行前后端交互&#xff0c;选择一张图片&#xff0c;并将预测结果展示到页面上。 文章目录 Web端实现可视化预测…

前端基于word模板导出word文档

项目环境 vue2 js vue-cli等 依赖包都可以在npm官网找到对应文档 npm官网(英文) 1、依赖 安装依赖 docxtemplater npm i docxtemplaterfile-saver npm i file-saverjszip-utils npm i jszip-utilsjszip npm i jszip在对应页面或模块中引入依赖 import Docxtemplater …