最近有人私信我说,我写的博客有些肤浅,没有深究,在此我统一回复一下,这些博客大多都是概念性东西,是用通俗的例子让你理解这个技术或者知识到底是怎么一样原理。
所以我在后面都加着适合新人,我们都是从新人走过来的,知道初学者的那种迷茫,只会代码,不懂原理和含义,就比如,注解,你不去学习理解,初学者根本就不知道那是个什么东西,为什么要使用注解。
如果是资深大牛,那就不要看了,还是那句话,适合新人。
1,Servlet是什么?
个人理解:
Servlet就是用Java语言来编写动态资源的开发技术;
官方回答:
Servlet是sun公司提供的一门用于开发动态web资源的技术。
Sun公司在其API中提供了一个servlet接口,用户若想用发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完成以下2个步骤:
1、编写一个Java类,实现servlet接口。 2、把开发好的Java类部署到web服务器中。
按照一种约定俗成的称呼习惯,通常我们也把实现了servlet接口的java程序,称之为Servlet
2,什么是动态资源,静态资源;
静态资源:源码不会发生改变
动态资源:源码随时会发生改变
3,Servlet的实现案例
Servlet是基于Web项目的的!主要功能在于交互式地浏览和生成数据,生成动态Web内容。
- 创建一个web项目,书写java代码
1.2 ServletDemo里面的代码
package com.aaa.Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* 项目名称:ServletDemo
* 类描述:(Servlet简单是实现)
* 创建人:莫参商
* 创建时间:2020-1-15 下午3:15:53
* 修改人:acer
* @version
*
*/
//继承HttpServlet
public class ServletDemo extends HttpServlet{
//重写doGet方法
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("hello");
resp.getWriter().write("hello AAA");
}
}
- 配置Web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<!-- servlet 自定义名称 可以理解为这里是创建了ServletDemo的Servlet -->
<servlet-name>ServletDemo</servlet-name>
<servlet-class>com.aaa.Servlet.ServletDemo</servlet-class>
</servlet>
<!-- 映射 可以理解为:使用Servlet-->
<servlet-mapping>
<servlet-name>ServletDemo</servlet-name>
<!-- 映射的路径 -->
<url-pattern>/ServletDemo</url-pattern>
</servlet-mapping>
</web-app>
- 然后使用tomcat启动,运行结果为;
总结这就是最基本的Servlet模型
4,Servlet的注解版本
首先这个注解版本是 Servlet3.0以上使用,注解自动映射@webServlet
从上面的代码我们可以看出来,每创建一个Servlet就需要在Web.xml文件里面配置,这样的话非常的麻烦,而注解版本出来后,直接使用注解,就不用配置Web.xml文件了。
直接看代码:
package com.aaa.Servlet;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* 项目名称:ServletDemo
* 类描述:("Servlet注解版本")
* 创建人:莫参商
* 创建时间:2020-1-15 下午3:58:00
* 修改人:acer
* @version
*
*/
@WebServlet("/ServletDemo01")
public class ServletDemo01 extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
System.out.println("hello");
resp.getWriter().write("hello AAA");
}
}
这样无需配置web.xml文件就能运行。
Servlet的运行流程
- tomcat 加载web.xml配置;
- 当请求发送过来的时候,比如:请求的是ServletDome就会找到ServletDome配置;
- 读取serclet配置,解析servlet-class;
- 通过java的反射机制调用class.forName class.newInestance();无参构造函数创建servlet对象;
- 先执行ServletDome的构造函数;
- 执行init();
- 执行servvice方法,判断是什么请求,最后执行具体的方法。
- 服务器被停止,走destroy()方法;
拓展:
现在使用Servlet的已经很少了,前几年非常火的SSH,里面用到了Servlet;
然后是SSM,SSM里面用了SpringMVC,可能许多人都以为Servlet被淘汰了,其实不然,SpringMVC其实就是以Servlet作为基石然后发展而来的,本质上的原理与Servlet相同,包括面试上基本都会问有关Servlet的问题。