Servlet基本概念及其部署
什么servlet?
Servlet架构,在软件里面位置如下:

Tomcat:
很多人用过Tomcat,但是不甚其解,市场上有许多 Web 服务器支持 Servlet,Tomcat是其中应用得较多的一款,
Apache Tomcat 是一款 Java Servlet 和 JavaServer Pages 技术的开源软件实现,可以作为测试 Servlet 的独立服务器,而且可以集成到 Apache Web 服务器。
这里不做赘述,关于Tomcat具体可见:http://www.runoob.com/servlet/servlet-environment-setup.html
生命周期:


( 右图来自http://www.runoob.com/servlet/servlet-life-cycle.html,侵删)
方法说明:
init():
一开始创建,只创建一次,可以简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。
public void init() throws ServletException {
// 初始化代码...
}
service() :这一层不用管,只需要重写doGet和doPost方法
service() 方法检查 HTTP 请求类型(GET、POST、PUT、DELETE 等),并在适当的时候调用 doGet、doPost、doPut,doDelete 等方法。
下面是doGet方法和doPost方法的代码:
//全部根据传入的参数来执行响应操作,一般是get接受服务器请求,post对请求发出响应
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
} public void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代码
}
destroy() :
destroy() 方法和init()方法一样,被调用一次,在 Servlet 生命周期结束时被调用。destroy() 方法可以让您的 Servlet 关闭数据库连接、停止后台线程、把 Cookie 列表或点击计数器写入到磁盘,并执行其他类似的清理活动。在调用 destroy() 方法之后,servlet 对象被标记为垃圾回收。
Servlet 部署:
这里是很关键的位置,因为你每写完一个Servlet都需要在配置文件里面部署一下,记住过程当然简单,但是还是弄清楚为什么是这样还是很有必要!
下面以一个案例为例:

如图,写了一个CoreServlet实例。在里面实现了doGet()和Post()方法。现在要将其部署在web.xml当中,下面是没有写入的。(这个是动态web工程,可以在Eclipse里面直接生成)
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>WeixinDFF</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
现在要写入内容:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>WeixinDFF</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>coreServlet</servlet-name>
<servlet-class>com.dff.weixin.servlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>coreServlet</servlet-name>
<url-pattern>/coreServlet</url-pattern>
</servlet-mapping>
</web-app>
ServletConfig获取配置参数的方法和ServletContext获取配置参数的方法完全一样,只是ServletConfig是取得当前Servlet的配置参数,而ServletContext是获取整个Web应用的配置参数。使用<init-param>子元素将初始化参数名和参数值传递给Servlet,访问Servlet配置参数通过ServletConfig对象来完成。
参数说明:
1.<servlet>必须含有<servlet-name>和<servlet-class>,或者<servlet-name>和<jsp-file>。
<servlet-name>用来定义servlet的名称,该名称在整个应用中必须是惟一的
<servlet-class>用来指定servlet的完全限定的名称。这里就是指包名。
<jsp-file>用来指定应用中JSP文件的完整路径。这个完整路径必须由/开始。
2.<servlet-mapping>要含有<servlet-name>和<url-pattern>
<url-pattern>:指定相对于Servlet的URL的路径。该路径相对于web应用程序上下文的根路径。<servlet-mapping>将URL模式映射到某个Servlet,即该Servlet处理的URL。
其余参数:
加载过程:
容器的Context对象对请求路径(URL)做出处理,去掉请求URL的上下文路径后,按路径映射规则和Servlet映射路径(<url- pattern>)做匹配,如果匹配成功,则调用这个Servlet处理请求。
扩展:DispatcherServlet在web.xml中的配置:
<!-- Spring view分发器 对所有的请求都由business对应的类来控制转发 -->
<servlet>
<servlet-name>business</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>publishContext</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<load-on-startup>
如果load-on-startup元素存在,而且也指定了jsp-file元素,则JSP文件会被重新编译成Servlet,同时产生的Servlet也被载入内存。<load-on-startup>的内容可以为空,或者是一个整数。这个值表示由Web容器载入内存的顺序。
例如:如果有两个Servlet元素都含有<load-on-startup>子元素,则<load-on-startup>子元素值较小的Servlet将先被加载。如果<load-on-startup>子元素值为空或负值,则由Web容器决定什么时候加载Servlet。如果两个Servlet的<load-on-startup>子元素值相同,则由Web容器决定先加载哪一个Servlet。<load-on-startup>1</load-on-startup>表示启动容器时,初始化Servlet。
里面有很多部分用到了web.xml,关于他的步骤,这篇博客里面有写【http://blog.csdn.net/believejava/article/details/43229361】,我自己也有总结,感兴趣可以去我的博客里面看看。
Servlet基本概念及其部署的更多相关文章
- servlet有关概念
关于servlet的概念 URL.URN与URi HTTP GET请求,POST请求(区别.适用) 编码 动态网页(GCI.PHP.ASP.JSP等)与静态网页 Model2 静态网页:指的是请求服务 ...
- 15.Servlet程序结构与部署
1.JavaEE应用程序结构 组成:Servlet JSP 工具类 第三方jar包,HTML页面(图片.Flash) 部署结构: JavaEE应用根目录下的资源都是允许客户端访问的(WEB-IN ...
- k8s重要概念及部署k8s集群(一)--技术流ken
重要概念 1. cluster cluster是 计算.存储和网络资源的集合,k8s利用这些资源运行各种基于容器的应用. 2.master master是cluster的大脑,他的主要职责是调度,即决 ...
- servlet(一):Servlet的概念和运行流程
概念: 狭义的 Servlet 是指 Java 语言实现的一个接口,广义的 Servlet 是指 任何实现了这个 Servlet 接口的类,一般情况下,人们将 Servlet 理解为后者. Servl ...
- Servlet简单概念和开发小总结
一.Servlet概念 安装了tomcat了解到其实tomcat是一个容器,可以处理用户发送的请求(Request),之后会为请求做出一个响应(Response),此时用户只能请求一些现成的资源,容器 ...
- IDEA community + Gradle + Gretty 调试 servlet 应用 + war包部署到tomcat
参考:https://guides.gradle.org/building-java-web-applications 1.运行和调试 IDEA创建gradle项目,项目结构如下 各个文件: buil ...
- Servlet的概念与用法
Servlet: Servlet(Servlet+Applet) Servlet是一种独立于平台和协议的服务器端Java应用程序,通用Servlet 可以生成动态Web页面.Servlet还 ...
- 入门级实操教程!从概念到部署,全方位了解K8S Ingress!
Kubernetes Ingress用于添加规则,以将流量从外部路由到Kubernetes集群的服务中.在本文中你将了解ingress 的概念,以及用于路由外部流量到Kubernetes deploy ...
- redis解决方案之三种集群模式的概念与部署
上篇文章为大家总结了redis命令并讲述了持久化,今天我们来看一下redis的三种集群模式:主从复制,哨兵集群,Cluster集群 本篇文章先介绍redis-cluster集群模式,然后再依次介绍它的 ...
随机推荐
- Day4-T1
原题目 Hades 与 Dionysus 在狂饮后玩起了多米诺骨牌的小游戏. 现在桌上有 N 块多米诺骨牌,每块多米诺骨牌上半部分和下半部分上都有一个整数.每次翻转可让 一块多米诺骨牌上下翻转,即上下 ...
- 留学Essay写作关键:Intensive Reading
留学生的日常除了写写写还是写写写,有时候还是要换换口味.在自己没有作业压力的时候可以尝试去读一些相关书籍或者一些优秀的essay.当然了,这里的阅读可不是走马观花,囫囵吞枣的读,而是用心去“精读”.那 ...
- 想要写好Synthesis Essay,学会审题很重要
很多留学生都不太愿意写synthesis essay,因为它的难度要比其他类型的essay要大得多.写一篇synthesis essay需要有能力消化相关的信息,通过语言组织之后再呈现.虽然这种写作技 ...
- JAVA程序中常用概念介绍
一.关键字.引用.直接量.变量.长量概念 1.关键字 java内部定义的java语言专用的单词,这些单词具有特殊含义,开发人员在定义自己声明的名称时,应该避开这些专用的单词.这些专用的单词也就称之为j ...
- [ACTF2020 新生赛]Exec
0x00 知识点 命令执行 这里见了太多了..以前也写过: https://www.cnblogs.com/wangtanzhi/p/12246386.html 命令执行的方法大抵是加上管道符或者分号 ...
- HDU - 5898 odd-even number (数位dp)
题意:求一个区间内,满足连续的奇数长度是偶数,连续的偶数长度是奇数的数的个数. #include<cstdio> #include<cstring> #include<c ...
- 【LeetCode】分发糖果
[问题]老师想给孩子们分发糖果,有 N 个孩子站成了一条直线,老师会根据每个孩子的表现,预先给他们评分. 你需要按照以下要求,帮助老师给这些孩子分发糖果: 每个孩子至少分配到 1 个糖果.相邻的孩子中 ...
- 在div中注入html代码
直接开始: <div id="content"class="modal-body"> </div> 在angularjs中使用如下代码, ...
- gogs 小团队使用 2
gogs 团队使用第二种方法如下, 前面办法参考前面的方法: 由 root 用户新建 organization, 比如说建立 hardware,然后把团队的 技术负责人拉到 owners 这个 tea ...
- 每天一点点之vue框架开发 - 数据渲染-for循环中动态设置页面背景色
实现方式很简单,在属性前加:,表示绑定 :style="{'background':item.bgColor} 代码样例: <li v-for="item in laber_ ...