java开发必备的Tomcat-servlet-http和spring boot基础入门

tomcat


    介绍


        概念: Tomcat是一个开源免费的轻量级Web服务器,是Apache软件基金会的核心项目,支持Servlet/JSP少量JavaEE(JakartaEE)规范。

        JavaEE:Java Enterprise Edition,Java企业版。指Java企业级开发的技术规范总和。包含13项技术规范:JDBC、JNDI、EJB、RMI、JSP、Servlet、XML、JMS、Java IDL、JTS、JTA、JavaMail、JAF。

 tomcat官网:

          官网:https://tomcat.apache.org/

      

Tomcat 也被称为 Web容器、Servlet容器。Servlet程序需要依赖于Tomcat才能运行 。

 

    安装步骤:

  •         下载:官网下载地址:https://tomcat.apache.org/download-90.cgi
  •         安装:绿色版,直接解压即可
  •         卸载:直接删除目录即可
  •         启动:双击 bin/startup.bat
  •         关闭:

                    直接×掉运行窗口,强制关闭

                    bin/shutdown.bat正常关闭    

                     ctrl+c 正常关闭

  •         部署项目:将项目放置在webapps目录下,即部署完成
第一步:下载

第二步:解压

卸载方式

直接右击删除即可

第三步:启动

在bin目录里面,点击startup.bat 

测试

在启动tomcat之后,在浏览器输入:http://localhost:8080

出现这个页面代表tomcat安装成功

第四步:关闭

点击bin目录里面的shutdown.bat

或者 ctrl+c

或者 直接点×

    配置

        控制台日志编码配置:

       在tomcat目录下点击 conf

找到logging.properties 打开

找到里面的第51行,把最后面的UTF-8 换成GBK


     
        Tomcat运行端口号(默认8080):可以自己配置

                tomcat目录下点击,点击conf目录选择server.xml


       

找到这里,就可以修改端口号了

 BS架构:

介绍:

BS架构: Browser/Server,浏览器/服务器 架构模式。它的特点是:客户端只需要浏览器,应用程序的逻辑和数据都存储在服务器端。浏览器只需要请求服务器,获取Web资源,服务器把Web资源发送给浏览器即可 (便于升级维护)。

静态资源:

服务器上存储的不会改变的数据,通常不会根据用户的请求而变化。比如:HTML、CSS、JS、图片、视频等(负责页面展示)。

动态资源:

服务器端根据用户请求和其他数据实时生成的,内容可能会在每次请求时都发生变化。比如:Servlet、JSP等(负责逻辑处理)。

servlet



        什么是servlet?


            Servlet 是运行在Web服务器中的小型java程序,是Java提供的一门动态web资源开发技术。通常通过HTTP协议接收和响应来自于客户端的请求。

            Servlet 是JavaEE规范之一,其实就是一个接口(定义Servlet需实现Servlet接口 或 继承HttpServlet) ,并由web服务器运行Servlet。

        如何使用servlet:

  •             准备:创建maven项目(设置打包方式为war),导入servlet坐标(provided)
  •             开发:

                定义一个类,实现servlet接口(继承HttpServlet)

  •                 在servlet类上使用@webServlet注解,配置该servlet的访问路径。
  •                 部署:将开发好的servlet配置在外部的tomcat服务器中运行。
第一步:在maven中设置打包方式

第二步:导入servlet-api的坐标

第三步:基层HttpServlet类

        重写doGet方法

第四步:在idea里面配置tomcat

点开 edit  configurations

 

点击左上角的+号

 

找到这个Tomcat Server 下面的Local

 

第一次配置的话,需要执行下面的操作

1,configure 找到本地的tomcat

2,在出现的弹窗里面。点击Tomcat Home右侧的文件夹,找到自己的tomcat 然后点击ok

3,上面的Name 可以修改一下启动tomcat的名字

 

1,点击右边的Deployment

2,小加号,找到本项目的 war包,一般都是第一个

3,Application context 这一栏的访问本项目的路径。可以修改按需操作

 

在点击这个绿色的按钮就可以运行了

 
   

执行流程


        示例:http://localhost:8080/demo/hello?name=xiaoming


        servlet 对象是由谁创建的?

servlet对象由web服务器创建,servlet方法由web服务器调用。

  •         HttpServletRequest:用于封装所有的数据请求
  •         HttpServletResponse:用于封装所有的响应数据

http


        概述:


            Hyper Text Transfer Protocol,超文本传输协议,规定了浏览器和服务器之间数据传输的规则。

        特点:


            1,基于TCP协议:面向连接,安全

            2,基于请求-响应模型的:一次请求对应一次响应

            3,HTTP协议是无状态的协议:对于事务处理没有记忆能力。每次请求-响应都是独立的。

                缺点
                    多次请求间不共享数据
                优点
                    速度快


    http-请求协议

        请求数据

                


            请求行:


                请求数据第一行(请求方式,资源路径,协议)


            请求头:


                第二行开始,格式 key:value都是,到下面的空行结束。

  •                     Host:请求的主机名

                    User-Agent:览器版本,例如Chrome浏览器的标识类似Mozilla/5.0 ... Chrome/79,IE浏览器的标识类似Mozilla/5.0 (Windows NT ...) like Gecko

  •                     Accept:表示浏览器能接收的资源类型,如text/*,image/*或者*/*表示所有;
  •                     Accept-Language:表示浏览器偏好的语言,服务器可以据此返回不同语言的网页;
  •                     Accept-Encoding:表示浏览器可以支持的压缩类型,例如gzip, deflate等。
  •                     Content-Type:请求主体的数据类型。
  •                     Content-Length:请求主体的大小(单位:字节)。
请求体


                一般是在最后,空行下面的数据。
        请求数据获取

  •             getMethod() 获取请求方法
  •             getRequestURL() 获取请求路径
  •             getScheme() 获取请求协议
  •             getQueryString() 获取查询字符行
  •             getParameter() 获取请求参数
  •             getHeader() 获取请求头
  •             getInputStream() 获取输入流

代码示例:

package com.sde;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 java.io.IOException;
import java.io.PrintWriter;@WebServlet("/request")
public class RequestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {req.setCharacterEncoding("UTF-8");resp.setContentType("text/html;charset=UTF-8");PrintWriter writer = resp.getWriter();// 获取请求方式String method = req.getMethod();System.out.println("请求方式:"+method);writer.println("请求方式:"+method);// 获取请求路径StringBuffer url = req.getRequestURL();System.out.println("请求的url:"+url);String uri = req.getRequestURI();System.out.println("请求的uri:"+uri);writer.println("请求的url:"+url);writer.println("请求的uri:"+uri);// 获取请求的参数String name = req.getParameter("name");String age = req.getParameter("age");System.out.println("请求的参数:"+name+"--"+age);writer.println("请求的参数:"+name+"--"+age);// 获取请求的协议String scheme = req.getScheme();System.out.println("请求的协议:"+scheme);writer.println("请求的协议:"+scheme);//获取请求头中的某些信息String accept = req.getHeader("Accept");System.out.println("请求头中的Accept项::"+accept);writer.println("请求头中的Accept项::"+accept);}
}

控制台效果:

浏览器效果:


    http-响应协议



            响应行:

响应数据的第一行(协议,状态码,描述)


            响应头:

第二行开始,格式key:vakue,一直到后面的空行。


            响应体:

最后一部分,存放响应数据。


        响应数据设置

  •                 Web服务器对HTTP协议的响应数据进行了封装(HttpServletResponse),并在调用Servlet方法的时候传递给了Servlet。这样,就使得程序员不必直接对协议进行操作,让Web开发更加便捷。

                    

  •                 响应状态码 和 响应头如果没有特殊要求的话,通常不手动设定。服务器会根据请求处理的逻辑,自动设置响应状态码和响应头。

                    

代码示例: 

package com.sde;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 java.io.IOException;@WebServlet("/response")
public class ResponseServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//设置响应状态码resp.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);//设置响应头resp.setHeader("name","daoen");resp.setHeader("content-type","text/html;charset=UTF-8");//设置响应数据resp.getWriter().write("我是里白我nb"+"<h1>cool</h1>");}
}

效果:

 

常见的响应状态码

开发中常见的:

200  客户端请求成功

404  请求资源不存在,一般是url输入有误,或者网站资源被删除了

500   服务器发生不可预期的错误。

springboot快速入门

spring boot可以帮助我们快速的的构建应用程序,简化开发,提高开发效率。 

创建spring boot工程:

1,在自己的工程下,右击 出现下面这个小页面

2,选择spring initializr 右侧的name就是本项目名。Language选择java,Type选maven。Group就是组织名,Artifact:也表示本项目名,然后点击next,jdk 根据自己情况选择,打包方式选jar包。

3,根据自己情况选择spring boot版本。和依赖。

 

 起步依赖:
  • spring-boot-starter-web:包含了web应用开发所需要的常见依赖。
  • spring-boot-starter-test:包含了单元测试所需要的常见依赖。
  • 官方提供的starter:https://docs.spring.io/spring-boot/docs/3.1.3/reference/htmlsingle/#using.build-systems.starter

 

检查依赖:

创建一个HelloController

package com.sde;import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class HelloController {@GetMapping("/hello")public String hello(String name){System.out.println(name);return "你好" +name +"~";}@PostMapping("/hello2")public String hello2(String name){System.out.println(name);return "你好" +name +"~";}}

启动spring boot 在浏览器访问:

在浏览器访问:

控制台输出:

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

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

相关文章

Testlink 1.9.20+phpstudy_pro安装遇到的问题

phpstudy_pro启动了Apache2.4.39和Mysql5.7.26,php的版本是7.3.4zai。 安装Testlink 1.9.19时没有数据库的问题&#xff0c;安装Testlink 1.9.20时遇到了数据库问题&#xff0c;如下图所示&#xff1a; 网上搜索“Failed!Mysql Database cannnot be used”&#xff0c;给出的…

STM32开发学习(地址映射)

LED灯代码&#xff1a; #define PERIPH_BASE ((unsigned int)0x40000000)#define AHB1PERIPH_BASE (PERIPH_BASE 0x00020000)#define GPIOF_BASE (AHB1PERIPH_BASE 0x1400)#define GPIOF_MODER *(unsigned int*)(GPIOF_BASE0x00) #define GPIOF_BSRR *(uns…

Linux下Docker 离线安装详细步骤,亲测成功

1.离线原因&#xff1a;公司新创不能使用开元linux&#xff0c;使用了一个变种centOS&#xff0c;致使yum被禁 2.步骤&#xff1a; 2.1 下载docker tar包&#xff0c;下载地址&#xff1a;Index of linux/https://download.docker.com/linux/ 2.2 新建自己的软件目录&am…

大数据之HBase

HBase介绍 Apache的三篇论文&#xff0c;GFS谷歌文件系统->HDFS&#xff1b;MR -> MR ; BigTable ->HBase;HBase是hadoop数据库&#xff0c;一种分布式、可扩展的大数据NoSQL数据库之一。适合对于大量数据进行随机、实时的读写操作 HBase数据模型 Bigtable是一个稀…

【傻瓜级JS-DLL-WINCC-PLC交互】8.DLL读写WINCC连接的PLC数据

思路 JS-DLL-WINCC-PLC之间进行交互&#xff0c;思路&#xff0c;先用Visual Studio创建一个C#的DLL控件&#xff0c;然后这个控件里面嵌入浏览器组件&#xff0c;实现JS与DLL通信&#xff0c;然后DLL放入到WINCC里面的图形编辑器中&#xff0c;实现DLL与WINCC的通信。然后PLC与…

Vue实现可拖拽边界布局

Vue实现可拖拽边界布局 在前端开发中&#xff0c;有时需要实现一种可拖拽边界的布局&#xff0c;通过拖动分隔线来调整不同区域大小。例如&#xff0c;下图是一个典型的可拖拽边界布局&#xff0c;它由左右两个区域组成&#xff0c;左边是一个树形菜单&#xff0c;右边是一个上…

ANN人工神经网络:从基础认知到现实理解

什么是神经网络&#xff1f; 神经网络的再认知 前面我们了解过&#xff0c;人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09;是人类为了模仿人大脑的神经网络结构创建出来的一种计算机系统结构。但如果仔细深入到神经网络当中&#xff0c;会慢…

排序算法基本原理及实现1

&#x1f4d1;打牌 &#xff1a; da pai ge的个人主页 &#x1f324;️个人专栏 &#xff1a; da pai ge的博客专栏 ☁️宝剑锋从磨砺出&#xff0c;梅花香自苦寒来 &#x1f4d1;插入排序 &#x1f4…

JAVAEE---多线程线程安全

根本原因&#xff1a;随机调度&#xff0c;抢占式执行 多个线程同时修改同一个变量 修改操作不是原子的 内存可见性 指令重排序 上面这段代码可以正常打印出hello&#xff0c;按照我们前面所学&#xff0c;第一次加锁之后&#xff0c;第二次加锁应该有所冲突啊。这里是因为…

c++ day2

自己封装一个矩形类(Rect)&#xff0c;拥有私有属性:宽度(width)、高度(height)&#xff0c; 定义公有成员函数: 初始化函数:void init(int w, int h) 更改宽度的函数:set_w(int w) 更改高度的函数:set_h(int h) 输出该矩形的周长和面积函数:void show() #ifndef RECT_H …

量子力学应用:探索科技前沿的奇幻之旅

量子力学应用:探索科技前沿的奇幻之旅 引言 量子力学,这门探讨微观世界规律的学科,自其诞生以来就充满了神秘与奇幻。随着科学技术的不断进步,量子力学已经从纯理论研究走向了实际应用领域,为我们打开了一个全新的科技世界。在本文中,我们将深入探讨量子力学的应用方面,…

JS 绘制半径不一致的环形图进度条

HTML部分: <canvas id"mycanvas" width"100" height"100"></canvas>JS部分&#xff1a; const option {element: "mycanvas", // 元素count: 26, // 高亮数据totalCount: 129, // 总数据progressColor: #3266FB, // 进…

一文详解Python中常用数据类型

文章目录 Python 中常用的数据类型包括&#xff1a;Python 中布尔类型(bool)Python 中的数字类型概述Pyhon中的字符串概述Python 中的List概述Python 中的元组类型(tuple)Python中的字典&#xff08;Dictionary&#xff09;Python中的集合&#xff08;Set&#xff09;Python中的…

你了解vue的diff算法吗?

​&#x1f308;个人主页&#xff1a;前端青山 &#x1f525;系列专栏&#xff1a;Vue篇 &#x1f516;人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue中的diff算法 目录 一、是什么 二、比较方式 三、原理分析 小结 一、是什么 diff 算法是一…

【蓝桥杯选拔赛真题69】Scratch洗牌发牌 少儿编程scratch图形化编程 蓝桥杯创意编程选拔赛真题解析

目录 scratch洗牌发牌 一、题目要求 编程实现 二、案例分析 1、角色分析

(C++)字符串相乘

个人主页&#xff1a;Lei宝啊 愿所有美好如期而遇 题目链接如下&#xff1a; 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台备战技术面试&#xff1f;力扣提供海量技术面试资源&#xff0c;帮助你高效提升编程技能&#xff0c;轻松拿下世界 IT 名…

【c语言:常用字符串函数与内存函数的使用与实现】

文章目录 1. strlen函数1.1使用1.2模拟实现 2.strcmp函数2.1使用2.2模拟实现 3.strncmp函数3.1使用3.2模拟实现 4.strcpy函数4.1 使用4.2模拟实现 5.strcncpy5.1使用5.2模拟实现 6.strcat函数6.1使用6.2模拟实现 7.strncat函数7.1使用7.2模拟实现 8.strstr函数8.1使用8.2模拟实…

1 NLP分类之:FastText

0 数据 https://download.csdn.net/download/qq_28611929/88580520?spm1001.2014.3001.5503 数据集合&#xff1a;0 NLP: 数据获取与EDA-CSDN博客 词嵌入向量文件&#xff1a; embedding_SougouNews.npz 词典文件&#xff1a;vocab.pkl 1 模型 基于fastText做词向量嵌入…

vue3+vite+ts项目打包时出错

项目中引入了element-plus国家化的配置&#xff0c;然后进行项目打包&#xff0c;报下面的错误 解决方法&#xff1a; 在main.ts中添加 // ts-ignore

【存储】blotdb的原理及实现(2)

【存储】etcd的存储是如何实现的(3)-blotdb 在etcd系列中&#xff0c;我们对作为etcd底层kv存储的boltdb进行了比较全面的介绍。但是还有两个点没有涉及。 第一点是boltdb如何和磁盘文件交互。 持久化存储和我们一般业务应用程序的最大区别就是其强依赖磁盘文件。一方面文件数…