Servlet(Server Applet 的拼写词)是 Java Servlet 的简称,它是用 Java 编写的服务器端程序,主要功能在于交互式地浏览和生成数据,为客户端生成动态 Web 内容。JSP
(Java Server Pages,Java 服务器页面)是由 Sun 公司创造的一种动态网页技术标准。JSP 以 Java语言作为脚本语言,响应客户端发送的请求,并根据请求内容动态地成
HTML、XML 或其他格式文档的 Web 网页,然后返回给请求者。通俗的解释,Servlet 就是在服务器端写HTML 页面,而 JSP 是在 HTML 页面中写 Java 代码。
Servlet的执行原理和生命周期
Servlet可以被理解成一种容器,通过容器就可以实现通过url访问获取后台数据的功能。当创建一个Servlet后第一步就是配置Servlet的配置信息,如何配置呢其方法就在web.xml中。
首先创建一个FirstServlet让其实现Servlet接口,创建完成之后打开web.xml文件,配置Servlet。Servlet配置需要两个标签,一个是servlet一个是servlet-mapping,配置格式如下:
<servlet>
<servlet-name>FirstServlet</servlet-name>
<servlet-class>com.example.UseForStudyServletProject.servlet.FirstServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>FirstServlet</servlet-name>
<url-pattern>/FirstServlet</url-pattern>
</servlet-mapping>
其中servlet-name表示servlet标签的名字,servlet-class为servlet文件的全限定类名。servlet-mapping为servlet的映射,url-pattern为servlet的url地址。完成配置!
这个配置有什么用呢?其作用就是:首先tomcat通过反射的方式将Class.forname()将全限定类名加载进内存。
那么Servlet的执行过程是什么样子的呢?
- 当服务器接受到客户端的请求时,会解析URL路径,访问指定的Servlet资源
- 查找web.xml中是否有
<url-pattern>
标签体内容。 - 如果有找到对应
<servlet-class>
的全限定类名 - tomcat会将字节码文件加载进内存,并创建其对象
- 最后调用其方法
Servlet生命周期
在本例中自定义的Servlet类,FirstServlet实现了Servlet接口,Servlet接口里包含五个方法,分别为:
- inti方法:
- inti方法在方法中及执行一次,标志着程序的开始,进行一些初始化操作。标志着Servlet是单例模式存在线程访问安全问题!
- 通过
<load-on-startup>
标签可以控制其初始化的时间,当值为-1时表示在程序启动时初始化,当值为正数时表示当Tomcat连接成功时进行初始化。
- service方法:
- service方法为Servlet的主方法,它是Servlet的主要内容,可以被多次访问,没访问一次Servlet就被调用一次。
- getServletConfig方法
- 获取Servlet配置信息
- getServletInfo方法
- 获取Servlet信息,比如作者啊,创作日期等
- destroy方法:
- 摧毁Servlet方法,当Tomcat正确关闭的时候调用destroy方法
Servlet注解配置
在Servlet3.0以后提供了注解配置,其可以省略XML中的复杂的标签配置,这个注解就是@WebServlet
,其中包含以下属性。
其中value在注解中表示最重要的数据,那么最重要的数据是什么呢,自然就是urlPatterns表示URL地址,所以说当只有一个属性为urlPatterns时,可以省略value直接表示为@WebServlet("/FirstServlet")
,其中loadOnStartup表示inti启动时机。
配置信息时可以有多种配置方式,比如说如果表示多个路径都可以访问此servlet则为:{"/dd","/ddd"}
可以表示为二层路径:"/user/dd"
Servlet体系结构
Servlet是一个接口,它有两个抽象类, GenericServlet 和 HttpServlet ,HttpServlet也继承了GenericServlet
GenericServlet对其他方法做了默认处理,仅需要重写service方法即可,减少了代码冗余,更进了一步。
HttpServlet则是对GenericServlet更进一步的封装,其中对HTTP返回类型进行细分的处理,只需要创建doGet或者doPost方法就能接收到相应返回值类型的数据。
其中,第一句话的意思是提供了一个抽象类来创建子类去实现创建一个适应网站的HTTP servlet,其中下列方法必须实现下列方法其中之一。
感谢您的阅读,如果本篇文章对您有帮助,欢迎点赞,关注,您的阅读是我莫大的鼓励!
欢迎继续阅读下一篇文章:大话Request和Response对象—— 从此转发重定向不再迷茫