【从零开始的Java开发】2-10-2 Servlet入门:Servlet开发步骤、请求参数的发送与接收、Get和Post、注解

2023-11-04

概述

软件结构发展史

  1. 单机时代:桌面应用
  2. 联机时代:Client-Server模式
  3. 互联网时代:Broswer-Server模式

单机时代:桌面应用

桌面应用俗称单机应用,软件所有数据都保存在电脑本地硬盘中。
优点:易于使用,结构简单。
缺点:数据难以共享、安全性差、更新不及时。

联机时代:Client-Server模式

  • Client/Server结构(C/S结构)是指客户端和服务器结构
  • 优点:数据方便共享,安全性高
  • 缺点:必须安装客户端,升级与维护困难

典型应用:QQ,微信,支付宝。

互联网时代:Browser-Server模式

  • Browser-Server(B/S)模式即浏览器和服务器架构模式
  • 优点:开发简单,无需安装客户端,数据易于共享
  • 缺点:相对于C/S模式,执行速度与用户体验较弱

典型应用:百度,淘宝,京东

Tomcat与Servlet

B/S模式执行流程

用户写上网址baidu.com后,浏览器根据DNS服务器得知该网址对应的ip地址,然后通过http协议将其发送到远程的服务器主机,服务器主机的服务器程序动态地生成了html文档。

在这里插入图片描述
html文档会返回给浏览器。浏览器对html进行解析,用户就能看到他想看到的了。
在这里插入图片描述
请求与相应

  • 从浏览器发出送给服务器的数据包称为”请求Request“
  • 从服务器返回给浏览器的结果称为"响应Response"

请求和响应必须成对出现。

J2EE

  • J2EE(Java 2 Platform Enterprise Edition),Java2企业版
  • 开发BS(Web)应用程序就是J2EE最核心的功能
  • J2EE由13个功能模块组成

13个模块如下:
在这里插入图片描述
要重点学习的:

  • Servlet
  • JSP
  • JDBC

Apache Tomcat

一个Web应用服务器程序。

J2EE与Tomcat的关系

  • J2EE是一组技术规范与指南,具体实现由软件厂商规定
  • Tomcat是J2EE Web(Servlet与JSP)标准的实现者
  • J2SE是J2EE运行的基石,运行Tomcat离不开J2SE

Servlet

  • Servlet(Server Applet)服务器小程序,主要功能用于生成动态Web内容
  • 是J2EE最重要的组成部分

我们可以把Tomcat看成服务器主机,Servlet看成服务器程序。

Servlet

第一个Servlet

这是我们的第一个Servlet:

//一定要继承HttpServlet
public class FirstServlet extends HttpServlet{

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//接收请求发来的参数
		String name=request.getParameter("name");
		String html="<h1 style='color:red'>hi,"+name+"!</h1>";
		System.out.println("返回给浏览器的html为:");
		PrintWriter out=response.getWriter();
		//将html发送回浏览器
		out.println(html);
	}
}

要在工程的WEB-INF中配置web.xml:

这是我们添加的xml。

<!-- 配置Servlet -->
  <!-- 声明Servlet -->
  <servlet>
	  <!-- Servlet的别名:两个name要一致 -->
	  <servlet-name>first</servlet-name>
	  <servlet-class>com.servlet.FirstServlet</servlet-class>
  </servlet>
  
  <!-- 将Servlet与URL绑定 -->
  <servlet-mapping>
  	<servlet-name>first</servlet-name>
  	<url-pattern>/hi</url-pattern>
  </servlet-mapping>

然后点击debug,然后:
在这里插入图片描述
在浏览器中输入:localhost:8080——这是Tomcat;
输入:localhost:8080/FirstServlet/hi,这是我们刚刚写的:
在这里插入图片描述

可以打一个?表示参数:
在这里插入图片描述
图解执行流程

输入的是/hi,url-pattern为/hi对应的servlet-name为first,servlet-name为first对应的servlet-class为com.imooc.servlet.FirstServlet,这就是我们写java代码的地方。
在这里插入图片描述

JavaWeb工程结构

在这里插入图片描述
举个例子

我们刚刚发布了一个FirstServlet。

我们在Tomcat的文件夹中能发现:
在这里插入图片描述
点开FirstServlet会看到META-INF和WEB-INF。

在这里插入图片描述
WEB-INF下会有classes、lib、和web.xml:

web.xml就是我们刚刚配置xml的文件。
在这里插入图片描述
把classes一直往下点,会看到FirstServlet.class,就是我们刚刚写java的地方。

在这里插入图片描述
lib保存的是第三方的jar包,不过现在还没有。

Eclipse会和Tomcat整合在一起。

默认首页
在webapp下创建一个index.html:

在这里插入图片描述
这就是我们FirstServlet的默认首页:在浏览器中输入:localhost:8080/FirstServlet/

在这里插入图片描述

Servlet开发步骤

  • 创建Servlet类,继承HttpServlet
  • 重写service方法,编写程序代码
  • 配置web.xml,绑定URL

举个例子

前两步:

//创建Servlet类,继承HttpServlet
public class SampleServlet extends HttpServlet {
	// 重写service方法,编写程序代码
	public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
		// 向浏览器输出的数据流
		PrintWriter out = response.getWriter();// 这里有一个异常,我们这里抛出
		out.println("<a href='https://blog.csdn.net/karshey'>My Blog</a>");

	}
}

第三步:

<servlet>
	<servlet-name>sample</servlet-name>
	<servlet-class>com.servlet.SampleServlet</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>sample</servlet-name>
	<url-pattern>/sample</url-pattern>
</servlet-mapping>

Servlet访问方法

  • 远程访问使用IP地址:http://IP地址:端口/context-path/url-mapping
  • 本地访问用localhost(127.0.0.1)
  • context-path称为"上下文路径",默认为工程名

按照上面提过的方法把工程添加到Server中,点击debug,然后在浏览器中输入http://localhost:8080/FirstServlet/sample

在这里插入图片描述
点进去后就是我的博客了。

请求参数的发送与接收

  • 请求参数是指浏览器通过请求向Tomcat提交的数据
  • 请求参数通常是用户输入的数据,待Servlet进行处理
  • 格式:参数名1=值1&参数名2=值2&...,可以用&连接多个参数

举个例子

我们在webapp下新增一个html文件:

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生信息登记表</title>
</head>
<body>
	<h1>学生信息登记表</h1>
	<!-- action表示表单提交以后发送的地址是 -->
	<form action="http://localhost:8080/FirstServlet/sample">
		姓名:<input name="name" /> <br/> 
		电话:<input name="mobile" /> <br/> 
		性别: 
		<select name="sex" style="width: 100px; padding: 5px;">
			<option value="male"></option>
			<option value="female"></option>
		</select>
		
		特长:
		<input type="checkbox" name="spec" value="English"/>英语
		<input type="checkbox" name="spec" value="Program"/>编程
		<input type="checkbox" name="spec" value="Speech"/>演讲
		<input type="checkbox" name="spec" value="Swimming"/>游泳
		<br/> 
		
		<input type="submit" value="提交">
		<br/>
	</form>
</body>
</html>

我们这样填写:
在这里插入图片描述
点击提交后,页面跳转到:“http://localhost:8080/FirstServlet/sample”
在这里插入图片描述
我们可以看到它的参数是:name=Tom&mobile=12345678&sex=male&spec=English&spec=Program

就是我们填的参数,且键与值用=连接,键值对之间用&连接。
这就是请求参数

实际上:

<form action="http://localhost:8080/FirstServlet/sample">

可以简化成如下,因为http://localhost:8080是默认地址。

<form action="/FirstServlet/sample">

Servlet接收请求参数

  • request.getParameter() - 接受单个参数(一般用这个)
  • request.getParameterValues() - 接收多个同名参数(复选框可以用这个)
public class SampleServlet extends HttpServlet {
	// 重写service方法,编写程序代码
	public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
		//获取单个请求参数
		String name=request.getParameter("name");
		// 向浏览器输出的数据流
		PrintWriter out = response.getWriter();// 这里有一个异常,我们这里抛出
		out.println("<h1>name:"+name+"</h1>");
	}
}

我们在表单中填入姓名Tom。
在这里插入图片描述
则:
在这里插入图片描述
举一反三,把其他信息全部输出:

//创建servlet类,继承HttpServlet
public class SampleServlet extends HttpServlet {
	// 重写service方法,编写程序代码
	public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
		// 获取单个请求参数
		String name = request.getParameter("name");
		String mobile = request.getParameter("mobile");
		String sex = request.getParameter("sex");
		String[] specs = request.getParameterValues("spec");
		// 向浏览器输出的数据流
		PrintWriter out = response.getWriter();// 这里有一个异常,我们这里抛出
		out.println("<h1>name:" + name + "</h1>");
		out.println("<h1>mobile:" + mobile + "</h1>");
		out.println("<h1>sex:" + sex + "</h1>");
		out.println("specs:");
		for (int i = 0; i < specs.length; i++) {
			out.print(specs[i] + " ");
		}

	}
}

把所有都填上:
在这里插入图片描述
则:
在这里插入图片描述
且网址如下:
http://localhost:8080/FirstServlet/sample?name=Tom&mobile=123456789&sex=male&spec=English&spec=Program&spec=Speech&spec=Swimming

也可以通过地址栏传递参数:
在这里插入图片描述

Get和Post请求方法

Get方式是将数据通过在URL附加数据显性向服务器发送数据。
如:http://localhost:8080/FirstServlet/sample ?name=Tom

Post方式会将数据存放在"请求体"中隐性向服务器发送数据。
如:
http://localhost:8080/FirstServlet/sample
请求体:name=Tom

表单提交默认是get方法,我们可以用post方法:

<form action="/FirstServlet/sample" method="post">

在这里插入图片描述
在这里插入图片描述
URL后没有参数了。

在浏览器F12:点击NetWork,点击sample,点击Response,可以看到:
在这里插入图片描述

Get和Post传递的数据格式完全相同(都是键=值&键=值),只是存放的地址不同。

与service方法的关系

  • service()是请求处理的核心方法,无论是get还是post都会被service()方法处理
  • 可以用request.getMethod()方法得知是用get方法还是post方法

用于专门处理get和post——get和post是可以分别进行处理的

  • 专门处理get的:doGet()
  • 专门处理post的:doPost()

代码:我们让get方法写绿色,post方法写红色。

public class RequestMethodServlet extends HttpServlet{
	//处理get请求
	public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
		String name=request.getParameter("name");
		response.getWriter().println("<h1 style='color:green'>"+name+"</h1>");
	}
	
	//处理post请求
	public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException {
		String name=request.getParameter("name");
		response.getWriter().println("<h1 style='color:red'>"+name+"</h1>");
	}
}

配置xml:一般url中都小写,单词间用_连接

<!-- 配置doGet和doPost -->
<servlet>
	<servlet-name>requestMethod</servlet-name>
	<servlet-class>com.servlet.RequestMethodServlet</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>requestMethod</servlet-name>
	<url-pattern>/request_method</url-pattern>
</servlet-mapping>

get时:

<form action="/FirstServlet/request_method" method="get">

看url,很明显这是get:
在这里插入图片描述
post时:
在这里插入图片描述
Get和Post处理方式小总结

  • 所有请求:service()
  • Get请求-doGet()
  • Post请求-doPost()

如果没有将service重写,那么它就相当于get和post的分发器:若这是一个get,它就把它交给doGet处理,反之亦然。

应用场景:

  • Get常用于不包含敏感信息的查询功能
  • Post用于安全性要求较高的功能或服务器的“写”操作,如:用户登录、用户注册、更新公司账目

Servlet生命周期

  • 装载-web.xml
  • 创建-构造函数
  • 初始化-init()
  • 提供服务-service()
  • 销毁-destroy()

用代码演示一下:

public class FirstServlet extends HttpServlet {

	public FirstServlet() {
		System.out.println("正在  创建  Servlet对象");
	}

	@Override
	public void init(ServletConfig config) throws ServletException {
		System.out.println("正在  初始化  Servlet对象");
	}

	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		// 接收请求发来的参数
		String name = request.getParameter("name");
		String html = "<h1 style='color:red'>hi," + name + "!</h1>";
		System.out.println("返回给浏览器的html为:");
		PrintWriter out = response.getWriter();
		// 将html发送回浏览器
		out.println(html);
	}

	@Override
	public void destroy() {
		System.out.println("正在  销毁  Servlet对象");
	}

}

启动Servlet,访问网址:http://localhost:8080/FirstServlet/hi

则控制台:

正在  创建  Servlet对象
正在  初始化  Servlet对象
返回给浏览器的html为:

随便修改一下代码内容再保存,则就销毁:

PS:我刷新了几次页面,所以返回给浏览器的html为:不止一个。
在这里插入图片描述
因为我们保存以后Tomcat会自动销毁对象,然后重新加载一个新的对象。此时如果再刷新,就会再创建一个新的对象。

对于每一个Servlet来说,在运行时有且只有一个Servlet对象在服务。

使用注解简化配置

  • Servlet 3.x 之后引入了"注解Annotation"特性
  • 注解用于简化Web应用程序的配置过程
  • Servlet核心注解:@WebServlet

举个例子

//注解,参数是绑定的url-pattern
@WebServlet("/anno")
public class AnnotationServlet extends HttpServlet {

	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		resp.getWriter().print("I am annotation servlet!");
	}

}

则:
在这里插入图片描述

启动时加载Servlet

  • web.xml使用<load-on-startup>设置启动时加载
  • <load-on-startup>0~9999</load-on-startup>
  • 0优先级最高
  • 启动时加载在工作中常用于系统的预处理

举个例子
假设现在我们开发一个系统,在系统启动的时候要自动完成初始化数据库、导入数据、统计分析这三个工作。
我们希望CreateServlet负责创建数据库,在程序启动的时候自动完成这个工作。

java:

public class CreateServlet extends HttpServlet{
	
	//要重写init
	@Override
	public void init() throws ServletException{
		System.out.println("正在创建数据库");
	}
}

web.xml配置:

<!-- 配置 -->
<servlet>
	<servlet-name>create</servlet-name>
	<servlet-class>com.servlet.CreateServlet</servlet-class>
	<!-- 启动时加载 若数字为0说明它会在启动时最先被加载-->
	<load-on-startup>0</load-on-startup>
</servlet>

控制台:
在这里插入图片描述
我们再创建一个ImportServlet,用来自动导入数据。代码与上面相似,只是xml的<load-on-startup>1</load-on-startup>是1.

控制台:
在这里插入图片描述
再创建一个分析结果的:用注解的时候一定要绑定一个url。

@WebServlet(urlPatterns="/unused",loadOnStartup=2)
public class AnalysisServlet extends HttpServlet{
	
	//要重写init
	@Override
	public void init() throws ServletException{
		System.out.println("正在分析结果");
	}
}

运行后控制台:
在这里插入图片描述

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【从零开始的Java开发】2-10-2 Servlet入门:Servlet开发步骤、请求参数的发送与接收、Get和Post、注解 的相关文章

  • 使用 JPA/ORM 生成数据库模式是一个坏主意吗?

    Salve Part of 另一个问题 答案 https stackoverflow com questions 7595578关于 SO 以及其他声称相同的声明 如果您通过 JPA 更新数据库架构 但通常不是一个好的做法 您是否真的不应该
  • Grizzly 和 Servlet 容器上下文

    我试图在我编写的 在 Grizzly 上运行的 Servlet 中获取一些注入的上下文 例如 Session 或 HttpServletRequest 但我所做的似乎都不起作用 整个过程似乎过早地停止了 并出现以下错误 SEVERE Mis
  • 光学标记阅读器的开源库[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想要一个用于光学标记读取 OMR 的开源库 有这样的库吗 我想在我的 java 应用程序中使用这个库 zxing 可能对你有用 http
  • 检索和设置 IntelliJ IDEA 插件开发的拆分窗口设置

    我正在编写一个 IntelliJ IDEA 插件 用于保存打开选项卡的会话 称为选项卡会话 https github com alp82 idea tabsession 这个问题是后续问题IntelliJ IDEA 插件开发 保存选项卡组
  • Spring Rest-API - 403 禁止错误响应

    我是 Spring 新手 我正在编写 REST API 我收到 403 删除 放置禁止错误 以下是我正在处理的示例 RequestMapping value noteId method RequestMethod PUT public Re
  • Java 的 System.arraycopy() 对于小数组有效吗?

    是Java的System arraycopy 对于小数组来说是高效的 或者它是本机方法这一事实是否使其可能比简单的循环和函数调用效率低得多 本机方法是否会因跨越某种 Java 系统桥梁而产生额外的性能开销 稍微扩展一下 Sid 所写的内容
  • Infinispan 复制缓存不复制对象以供读取

    我们正在尝试在 Openshift 内的 Wildfly 11 上运行的两个 infinispan 节点上安装复制缓存 当我们在一个节点上写入一个对象时 它不会显示在另一节点上进行读取 启动时 节点在集群中连接 并且可以看到彼此 如日志中所
  • 寻找 WebElements,最佳实践

    在我们当前的自动化 使用 Selenium WebDriver Java 中 我们使用 FindBy very广泛地 例如 FindBy css a name bcrumb protected List
  • 如何在JUnit测试中将MockWebServer端口设置为WebClient?

    我在用着spring boot with WebClient 它被自动装配为一个 bean 问题 写一个junit集成测试 我必须使用okhttpMockWebServer 该模拟始终在随机端口上启动 例如localhost 14321 N
  • 如何使用java避免Mysql数据库中的“数据因列被截断”?

    在我的 Java 程序中 Hibernate Bean 类定义一列 例如 TimtableVO java Column name REPEAT DAYS private WeekdayType repeatDays hear Weekday
  • 嵌套枚举是静态的吗?

    读书时这个问题 https stackoverflow com questions 25011061 why can enum implementations not access private fields in the enum cl
  • JavaPreparedStatementUTF-8字符问题

    我有一份准备好的声明 PreparedStatement st 在我的代码中 我尝试使用 st setString 方法 st setString 1 userName userName 的值为 ak a setString 方法将 ak
  • java中main的返回类型

    我想知道为什么java中main方法只有void返回类型 public static void main String args 为什么main方法除了void之外没有其他返回类型 Thanks 简短的回答是 因为这就是语言规范 http
  • 在 Java 中查询 XML 的最简单方法

    我有带有 XML 的小字符串 例如 String myxml
  • Jar Manifest 文件的使用混乱

    我正在阅读使用 jar 工具打包 java 应用程序 我注意到 META INF 目录下创建了一个清单文件 对于一个简单的应用程序来说 感觉它没有任何作用 我在 stackoverflow 上搜索以了解 Manifest 文件的用法 我碰到
  • Java中如何限制文件大小

    我正在我的应用程序中创建一个文件 并继续向该文件中写入一些内容 但是当我的文件达到一定大小 比如说 100 行 后 我想删除第一行并将新行写入底部 要求是我的文件应该受到限制 但它应该保留我写入文件的最新内容 请告诉我在Java中是否可行
  • Web服务连接超时和请求超时之间的区别

    WebClientTestService service new WebClientTestService int connectionTimeOutInMs 5000 Map
  • JTable中动态加载大量数据

    这是我的问题 我目前有一个 JTable 其中包含 5 000 到超过 200 000 行 你知道我要说什么了 数据已经加载到内存中了 这不是问题 但是如何 我可以创建一个高效的 JTable 以便它只加载以下行 是可见的 并且任何事件仅作
  • servlet 如何获取 servlet 之外的文件的绝对路径?

    我们一直在使用 System getProperties user dir 来获取属性文件的位置 现在它已经部署在 Tomcat 上 通过 servlet 系统调用将位置指定为 tomcat 而不是属性文件所在的位置 我们如何动态调用属性文
  • Java Calendar.set(Calendar.DAY_OF_WEEK, Calendar.SUNDAY),它会向后滚动、向前滚动还是未知?

    假设以下代码在 2009 年 8 月 22 日 星期六 执行 Calendar c Calendar getInstance c set Calendar DAY OF WEEK Calendar SUNDAY c get Calendar

随机推荐

  • 笔试题2:如何用八进制和十六进制来表示整型数据

    八进制的含义在于每位数字的进位大小为8 也就是0 8的9个数字 十六进制的进位大小为16 除了0 9的10个数字 还包括a b c d e f来表示10 11 12 13 14 15 答案 Java的八进制采用0开头 十六进制采用0x开头
  • iOS宏定义的黑魔法 - 宏菜鸟起飞手册

    转自 OneV s Den的博客 宏定义在C系开发中可以说占有举足轻重的作用 底层框架自不必说 为了编译优化和方便 以及跨平台能力 宏被大量使用 可以说底层开发离开define将寸步难行 而在更高层级进行开发时 我们会将更多的重心放在业务逻
  • 计算机虚拟化+网络

    计算机虚拟化 网络 cookie 什么是 Cookie cookie的生命周期 cookie Cookie 用于存储 web 页面的用户信息 什么是 Cookie Cookie 是一些数据 存储于你电脑上的文本文件中 当 web 服务器向浏
  • C++像素游戏

    我的作品 鼠标板 黑科技之橡素 代码 include
  • Verilog语言实现FPGA上的计数器

    Verilog语言实现FPGA上的计数器 计数器是数字电路中经常使用的基本元素之一 它用于生成指定脉冲数量或者指定计数范围内的计数信号 在现代数字电路设计中 FPGA Field Programmable Gate Array 作为一种可编
  • QT+Opencv 时报错Failed to load module “canberra-gtk-module“

    解决方案 sudo apt get install libcanberra gtk module
  • 二维数组作为参数,传入函数(最好用的)

    二维数组作为参数 传入函数 最好用的 很多时候我都是直接通过传入一个 固定的数字来传递一个二维数组 比如这样子定义函数 int fun int a 3 int n 调用函数是 fun a n 这样子调用的二维数组只能是固定已经知道的 不够灵
  • 使用Kettle实现数据排序

    一 Kettle的安装 1 下载Kettle的安装包文件 在Windows系统中打开浏览器 访问Kettle官网 https sourceforge net projects pentaho 下载Kettle安装文件pdi ce 9 1 0
  • 最大公约数、最小公倍数、辗转相除法的求解和证明

    两个正整数的最大公约数 Greatest Common Divisor GCD 在计算机中通常使用辗转相除法计算 最小公倍数 Least Common Multiple LCM 可以使用GCD来计算 下面首先介绍GCD和LCM 然后介绍辗转
  • node.js解析xml(xmlreader)

    博客搬家 由于各种原因 我现在的博客将首发于blog mojijs com 可以百度搜索 姜哥的墨迹技术博客 或者 点击这里 本文地址 http blog mojijs com post 19 html xml作为一种重要的数据交换格式 我
  • 图书库毕业设计网页增删改查源码

    介绍 使用HTML VUE PHP MYSQL写的一个简单图书库 实现了简单的数据库增删改查 以及数据列表的展示 源码里包含了前端文件 和api文件 还有数据库表文件 搭建好环境 导入数据库 配置好数据库链接即可直接运行 学习资料地址 ht
  • javaswing基本使用

    package exam test1 import javax swing import java awt import java awt event ActionEvent import java awt event ActionList
  • 三态门——概念,作用,原理

    介绍一下三态门的概念 作用 原理 目录 三态门的概念 三态门的作用 实现总线结构 实现双向数据传输 三态门的原理 三态门的概念 三态门是指逻辑门的输出有三种状态 高电平状态 低电平状态 高阻状态 其中 高阻状态相当于隔离状态 因为高阻状态电
  • linux x64 asm 参数传递,x64 ASM 常用汇编指令

    语法习惯 立即数 开头 寄存器 开头 取地址里面的值 偏移量 寄存器 除了 lea 取地址指令 外 lea就是取地址 load effecive address 整形操作通用后缀 后缀 b w l q 1 2 4 8 byte word l
  • spring源码之@Autowired属性注入

    注入现象 当我们在属性上面加上 Autowired的时候 spring就要根据Type来注入实例了 那么到底会找哪个实例的如果有多个怎么办 今天就来实验一下 多接口注入 当注入的属性接口下有多个实现 这个时候运行的话是 public cla
  • npm link实操详细指南

    准备 首先我们需要有两个npm包 一个作为依赖包 一个作为应用包 依赖包 deps 应用包 app 然后仔仔细细的看一下依赖包的包名和输出路径 如main 好几次用法不对都是因为main字段配置的路径有问题 如我的依赖包package js
  • 多线程(Threading)和多进程(Multiprocessing)

    多线程和多进程 线程和进程是什么 进程间通信方式 线程间通信方式 死锁 Python多线程 Threading 什么是多线程 基本方法函数 join Queue 继承使用线程 同步 GIL锁 锁 Python多进程 多核 Multiproc
  • java.lang.ClassCastException的java类型转换异常解决方案

    在项目中 需要使用XStream将xml string转成相应的对象 却报出了java lang ClassCastException com model test cannot be cast to com model test的错误 原
  • 钟汉良日记:什么副业最好?可以持续带来复利效应的技能,写作!

    2022年9月3日 周六 大晴天 看到一些人做抖音 做自媒体发财了 你是不是也挺羡慕的 可是真要你也去拍摄短视频 做直播真人出镜 大多数人又做不到 怎么办 我觉得 大家还是要认识到一点 打铁还需自身硬 你如果没有足够的对应的能力 只能做一个
  • 【从零开始的Java开发】2-10-2 Servlet入门:Servlet开发步骤、请求参数的发送与接收、Get和Post、注解

    文章目录 概述 软件结构发展史 Tomcat与Servlet Servlet 第一个Servlet JavaWeb工程结构 Servlet开发步骤 请求参数的发送与接收 Get和Post请求方法 Servlet生命周期 使用注解简化配置 启