JavaWeb|在IDEA中创建基于Maven的Web项目| Servlet依赖|这一篇就够了(超详细)

news2024/12/23 0:47:40

🙈作者简介:练习时长两年半的Java up主
🙉个人主页:老茶icon
🙊 ps:点赞👍是免费的,却可以让写博客的作者开兴好久好久😎
📚系列专栏:Java全栈,计算机系列(火速更新中)
💭 格言:种一棵树最好的时间是十年前,其次是现在
🏡动动小手,点个关注不迷路,感谢宝子们一键三连

目录

  • 课程名:JavaWeb
    • 内容/作用:知识点/设计/实验/作业/练习
    • 学习:在IDEA中创建基于Maven的Web项目
  • 在IDEA中创建基于Maven的Web项目
    • 1.新建webapp模板
    • 2.在src目录下新建文件夹,之后在此创建java文件
    • 3.修改项目中web.xml版本为4.0
    • 4.配置tomcat服务器
    • 5.将项目部署在tomcat中
    • 6.启动项目
    • web资源目录结构
      • 项目上下文路径
  • 修改项目编译时的jdk版本
  • 解决tomcat控制台中文乱码
  • Servlet
    • 编写Servlet的步骤
      • 1.在项目中导入Servlet所需依赖
      • 2.在项目的java目录下,新建一个类,继承HttpServlet,重写doGet和doPost方法
      • 3.在web.xml文件下,配置Servlet
  • 解决tomcat控制台中输出中文时的乱码
  • 三层架构
  • 访问服务器某个URL的方式
  • 页面向服务器端提交数据的方式
  • 服务器端获取前端提交的数据
  • 解决请求和响应时的中文乱码
  • 总结

课程名:JavaWeb

内容/作用:知识点/设计/实验/作业/练习

学习:在IDEA中创建基于Maven的Web项目

在IDEA中创建基于Maven的Web项目

1.新建webapp模板

在这里插入图片描述

2.在src目录下新建文件夹,之后在此创建java文件

在这里插入图片描述

选择main\java

在这里插入图片描述

3.修改项目中web.xml版本为4.0

打开项目结构
在这里插入图片描述

移除默认2.3版本的web.xml文件,移除后一定要apply应用

重新添加web.xml文件,选择4.0版本

在这里插入图片描述

4.配置tomcat服务器

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

5.将项目部署在tomcat中

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

6.启动项目

启动tomcat

在这里插入图片描述

默认启动成功后会自动打开浏览器访问项目,也可以通过"localhost:8080/项目名"访问。

这里看到的页面,是web项目中自带的index.jsp文件
在这里插入图片描述

web资源目录结构

webapp下如果有index文件,访问项目后会自动访问index文件,如果没有名为index的文件,就会出现404,表示index页面不存在

项目上下文路径

域名+端口+项目名 称为项目上下文路径

如localhost:8080/web01就是项目上下文路径,可以理解为项目根目录

webapp目录直接通过项目上下文路径访问,无需显式写出

在这里插入图片描述

更新了项目中的内容后,根据需要选择重启还是重新部署

在这里插入图片描述

修改项目编译时的jdk版本

修改web模块的jdk版本

在这里插入图片描述

修改当前项目的jdk版本

在这里插入图片描述

解决tomcat控制台中文乱码

在这里插入图片描述

在这里插入图片描述

重启IDEA

Servlet

Servlet表示Server+Applet,意味运行在服务器上的程序。是一个被动运行程序,每次请求都要执行。

BS结构客户端访问服务器端的流程

在这里插入图片描述

编写Servlet的步骤

1.在项目中导入Servlet所需依赖

在这里插入图片描述

<!-- servlet所需依赖 -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>4.0.0</version>
    <scope>provided</scope>
</dependency>

粘贴在pom.xml文件中的dependencies标签下

2.在项目的java目录下,新建一个类,继承HttpServlet,重写doGet和doPost方法

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

/*
 * 编写Servlet的步骤
 * 1.导入依赖
 * 2.创建一个类,继承HttpServlet,重写doGet和doPost方法
 * 3.在web.xml中设置访问该类的url映射
 * */
public class FirstServlet extends HttpServlet {
    //普通的控制台项目,需要主动运行main方法执行程序
    //web项目中的java程序,需要被动运行,在用户通过浏览器访问某个程序的url映射时执行

    /*
     * 当浏览器发送的是get类型的请求,执行这个方法
     * */
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("get请求");
    }

    /*
     * 当浏览器发送的是post类型的请求,执行这个方法
     * */
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) {
        System.out.println("post请求");
    }
}

3.在web.xml文件下,配置Servlet

<?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">

    <!--xml是一个配置文件,属于一种标记语言,通过标签定义内容-->
    <!--声明Servlet-->
    <servlet>
        <!--servlet命名-->
        <servlet-name>firstServlet</servlet-name>
        <!--servlet类的全限定名(路径+文件名)-->
        <servlet-class>FirstServlet</servlet-class>
    </servlet>
    <!--定义Servlet的请求映射-->
    <servlet-mapping>
        <!--要映射的servlet名,与上方定义的servlet-name一致-->
        <servlet-name>firstServlet</servlet-name>
        <!--请求映射url,必须以/开头-->
        <!--之后通过项目上下文路径+该路径,就能访问FirstServlet类-->
        <url-pattern>/first</url-pattern>
    </servlet-mapping>
</web-app>

复制资源的相对路径
在这里插入图片描述

在这里插入图片描述

启动tomcat,访问"localhost:8080/项目路径/first"即可访问自定义servlet类中的doGet方法

解决tomcat控制台中输出中文时的乱码

在这里插入图片描述

三层架构

在这里插入图片描述

在软件开发中,并不是将所有的功能集成到一个类或文件中实现,而是要将其分层处理。从而达到"高内聚,低耦合"的目的。

低耦合是指降低各个模块之间的关联程度,便于开发和维护,各个模块各司其职。

高内聚指各个模块的功能不开再分。

通常所说的三层架构中的三层,指"数据访问层业务逻辑层视图表现层"

  • 数据访问层:用于连接操作数据库的类。对数据进行增删改查。
  • 业务逻辑层:用于处理业务逻辑,在适当的情况下访问数据访问层中的内容。
  • 视图表现层:用于展示和提供用户输入的渠道,在适当的情况下访问业务逻辑层中的内容

访问服务器某个URL的方式

  • 在浏览器的地址栏中输入对应URL,属于get请求
  • 使用a标签,在href中定义对应的URL,属于get请求
  • 使用form表单,在action中定义对应的URL,根据method属性的值控制get或post请求

页面向服务器端提交数据的方式

  • 使用form表单的name属性显式提交

    <form action="http://localhost:8080/web01/getOne" >
        <input type="text" name="id">
        <input type="submit">
    </form>
    

    提交的数据会暴露在浏览器的地址栏中

  • 使用form表单的name属性隐式提交

    <form action="http://localhost:8080/web01/getOne" method="post" >
        <input type="text" name="id">
        <input type="submit">
    </form>
    

    提交的数据不会暴露在浏览器的地址栏中

  • 通过"?参数1=值&参数2=值"方式显示提交

    • 在浏览器的地址栏中输入

      http://localhost:8080/web01/getOne?id=23
      
    • 使用a标签

      <a href="http://localhost:8080/web01/login?username=admin&password=123123">登录</a>
      

    提交的数据会暴露在浏览器的地址栏中

服务器端获取前端提交的数据

前端页面传递数据

<a href="URL?id=123">访问</a>

<form action="URL">
    <input name="id">
    <input type="submit">
</form>

在Servlet的doGet或doPost方法中,

通过**request.getParameter(“name值或?后的参数”)**获取数据,返回值为String

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
	//获取页面提交的名为id的参数,返回值为String
    String id = req.getParameter("id");
    
    if (service.delete(Integer.parseInt(id))) {
        //跳转至另一个URL
        resp.sendRedirect("http://localhost:8080/Web01/queryEmps");
    } else {
        resp.getWriter().print("删除失败");
    }
}

解决请求和响应时的中文乱码

public class MServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //解决请求时的乱码
        req.setCharacterEncoding("utf-8");
		//解决响应时的乱码
        resp.setContextType("text/html;charset=utf-8");
    }

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

总结

   好好学习,天天向上。

往期专栏
Java全栈开发
数据结构与算法
计算机组成原理
操作系统
数据库系统
物联网控制原理与技术

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

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

相关文章

【c语言】详解c语言#预处理期过程 | 宏定义前言

c语言系列专栏&#xff1a; c语言之路重点知识整合 创作不易&#xff0c;本篇文章如果帮助到了你&#xff0c;还请点赞支持一下♡>&#x16966;<)!! 主页专栏有更多知识&#xff0c;如有疑问欢迎大家指正讨论&#xff0c;共同进步&#xff01; 给大家跳段街舞感谢支持…

微信小程序php+python+nodejs+vue大学生心理健康测试职位推荐系统

心理测试开发使系统能够更加方便学生捷&#xff0c;同时也促使心理测试变的更加系统化、有序化。系统界面较友好&#xff0c;易于操作。具体在系统设计上&#xff0c;客户端使用微信开发者&#xff0c;后台也使用php技术在动态页面上进行了设计&#xff0c;Mysql数据库&#xf…

算法 DAY44 动态规划6 完全背包 518. 零钱兑换 II 377. 组合总和 Ⅳ

完全背包 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff0c;求解将哪些物品装入背包里物品价值总和最大。 完全背包和01背包问题唯一不同…

Java每日一练(20230427)

目录 1. 螺旋矩阵 2. LRU 缓存机制 3. 解数独 &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 螺旋矩阵 给你一个 m 行 n 列的矩阵 matrix &#xff0c;请按照 顺时针螺旋顺序 &#…

Leetcode——495. 提莫攻击

&#x1f4af;&#x1f4af;欢迎来到的热爱编程的小K的Leetcode的刷题专栏 文章目录 1、题目2、题目分析3、题解代码 1、题目 题目链接&#xff1a;Leetcode——495. 提莫攻击 在《英雄联盟》的世界中&#xff0c;有一个叫 “提莫” 的英雄。他的攻击可以让敌方英雄艾希&…

国民技术N32G430开发笔记(1)-macos开发环境搭建

macos开发环境搭建 1、安装arm-none-eabi- 工具链 brew tap ArmMbed/homebrew-formulae brew install arm-none-eabi-gcc如果没有安装brew&#xff0c;请先安装brew。 2、安装vscode 3、安装pyocd a、python官网下载最新版的python b、pip3 install -U pyocd 我的开发板为N3…

Hadoop 1:Apache Hadoop、HDFS

Hadoop核心组件 Hadoop HDFS&#xff08;分布式文件存储系统&#xff09;&#xff1a;解决海量数据存储 Hadoop YARN&#xff08;集群资源管理和任务调度框架&#xff09;&#xff1a;解决资源任务调度 Hadoop MapReduce&#xff08;分布式计算框架&#xff09;&#xff1a;解决…

MyBatis的代理开发方式、动态sql语句和typeHandlers和plugins标签实战

文章目录 Mybatis的Dao层实现传统开发方式编写UserDao接口编写UserDaoImpl实现mapper文件测试传统方式 代理开发方式代理开发方式介绍编写UserMapper接口测试代理方式 MyBatis映射文件深入动态sql语句动态sql语句概述动态 SQL 之<if>动态 SQL 之<foreach>SQL片段抽…

信号处理的本质是什么?

信号处理的宗旨是“将信号中蕴涵的信息变得显然”&#xff0c;从数学角度分析, 信号即是某个物理量x的函数f(x), 信号所蕴含的信息需要通过此类函数予以揭示. 自然地可将f(x)投影到其所在空间中的一组基函数上, 由投影系数或加权系数来构成函数f(x)在变换域上的表示。在一定条件…

Nginx基本配置

文章目录 准备环境安装NginxNginx配置初始配置信息配置详解1. 全局块2. events 块3. http 块3.1 http 全局块3.2 server 块3.2.1 全局 server 块3.2.2 location 块 启动Nginx 参考资料 本教程讲述Nginx的基本配置和操作。首先需要安装 Nginx&#xff0c;关关于具体的安装方式&a…

输入网址url到网页显示,期间发生了什么?

当我们在浏览器输入一个网址后&#xff0c;知道网页显示在我们眼前&#xff0c;这一期间是如何发生的&#xff0c;接下来就将详细介绍在这期间发生的过程及使用的协议栈 1、浏览器解析URL并生产HTTP请求消息 URL是我们输入的网址信息&#xff0c;比如 https://www.taobao.com …

JavaScript 知识总结下篇(更新版)

91.实现一个 promise 参考链接&#xff1a;实现一个完美符合Promise/A规范的Promise Issue #4 forthealllight/blog GitHub function myPromise(constructor) {let self this;self.status "pending" // 定义状态改变前的初始状态self.value undefined;// 定义状…

c++调用java方法详解

当我们使用 Java程序调用C程序时&#xff0c;我们可以使用JAVA_HOME类来访问 Java虚拟机中的类&#xff0c;并使用其提供的方法来调用 Java方法。 使用JAVA_HOME类调用 Java方法时&#xff0c;可以在 JVM中直接操作 Java虚拟机。这个方法称为“直接访问”&#xff08;Direct Ac…

华为交换机配置telnet登录图文教程

一、配置交换机管理vlan和地址&#xff0c;配置交换机接口 1.关闭多余的信息提示&#xff1a; [Huawei]undo in en Info: Information center is disabled. [Huawei] 2.交换机配置 在工作中通过Telnet方式登录交换机进行设备登录管理能更加便利&#xff0c;不需要到机房里…

7.参数校验

在controller和service进行前端传参校验&#xff0c;保证存到数据库的数据是正确的 1.引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-validation</artifactId></dependency>这里无需…

科技云报道:生成式AI大模型,或将撼动云服务市场格局

科技云报道原创。 随着ChatGPT、GPT-4、BARD等生成式AI大模型的爆火&#xff0c;云服务商围绕生成式AI的竞争日趋激烈。 微软将Azure的企业级功能与OpenAI的生成式AI模型功能相结合&#xff0c;发布了Azure OpenAI服务&#xff1b; 紧随其后&#xff0c;谷歌开放了AI大模型Pa…

File类知识梳理(包含输入输出流的使用)

前言 学习的思维导图 目录 1. File类是什么? 2. 关于文件系统的操作 3. 关于文件内容的操作 3.1 文本文件 3.2 二进制文件 4. 案例实现练习 5.拓展:try with resources 操作 1. File类是什么? ● 概念 它的实例化对象是对硬盘上文件或目录的抽象表示.文件存储在硬盘…

【Java实战篇】Day15.在线教育网课平台--持续集成

文章目录 一、Devops1、什么是Devops2、什么是CI/CD3、Devops方案参考 二、人工部署1、项目打jar包2、生成镜像、创建容器 三、自动化部署1、代码提交到git2、修改pom.xml文件3、前端部署 一、Devops 1、什么是Devops 一个软件的生命周期包括&#xff1a;需求分析阶、设计、开…

如何利用AI技术提升拍卖小程序开发的用户体验

作为一名拍卖小程序开发者&#xff0c;提供一个优质的用户体验&#xff0c;以吸引更多的用户是我们的目标。然而&#xff0c;如何实现这一目标呢&#xff1f;在本文中&#xff0c;我们将介绍如何利用AI技术来提升拍卖小程序开发的用户体验。 了解用户需求 在开始开发拍卖小程…

centos测试主机网络极限速度

在CentOS主机上测试极限带宽&#xff0c;可以使用iperf工具进行测试,需要两台同一网络的主机 1.安装iperf工具 yum -y install iperf 2.启动iperf服务器 iperf -s 3.启动iperf客户端 iperf -c 10.1.60.118 通过以上输出可以看到 TCP window size&#xff1a;表示TCP窗口大…