序:

  众所周知JSP的基础也就是Servlet,如果单纯用Servlet类来响应用户的HTTP请求可以吗?答案是肯定的。JSP中的9个内置对象只是自动帮我们初始化的,没有他们一样可以实现web。只是工作量繁琐度的问题。

 4.1、第一个Servlet:

  首先:需要新建一个继承自HttpServlet的子类。并且重写public void service(ServletRequest request, ServletResponse response)方法。此方法用来接收所有方式的HTTP请求,doGet与doPost则分别为接收用户的GET请求与POST请求。

  其次:给此类添加注解,用指定处理那个URL发来的请求。

  最后:Response给用户响应HTML脚本。

 package Servlets;

 import java.io.IOException;
 import java.io.PrintStream;

 import javax.servlet.ServletException;
 import javax.servlet.ServletRequest;
 import javax.servlet.ServletResponse;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;

 // 此注解中的urlPatterns指定了处理请求的URL
 @WebServlet(name = "firstServlet", urlPatterns = "/firstServlet")
 public class FirstServlet extends HttpServlet {

     @Override
     public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException {
         // TODO Auto-generated method stub
         request.setCharacterEncoding("utf-8");
         response.setContentType("text/html;charSet=utf-8");

         PrintStream out = new PrintStream(response.getOutputStream());
         out.println("<html><head><title>First Servlet</title></head>");
         out.println("<body>");
         out.println("<h5>firstServlet</h5>");
         out.println("</body></html>");
     }
 }

  

  注:Servlet中没有内置对象,原来JSP中的内置对象都必须由程序显示创建。对于静态的HTML标签,Servlet都必须使用页面输出流逐行输出。

  

 4.2、Servlet的配置:

  为了让Servlet能响应用户请求,还必须将Servlet配置在Web应用中。配置Servlet时,需要修改web.xml文件。

  从Servlet3.0开始,配置Servlet有两种方式。

    (1)在Servlet类中使用@WebServlet注解进行配置。

    (2)通过在web.xml文件中进行配置。

  

  使用@WebServlet时可以置顶如下常用属性:

    属性            是否必须            说明

    asyncSupported      否               置顶该Servlet是否支持一步操作模式。

    displayName         否               置顶该Servlet的显示名

    initParams          否               用于为该Servlet配置参数

    loadOnStartup        否                用于将该Servlet配置成load-on-startup的Servlet

    name            否                置顶该Servlet的名称

    urlPatterns/value        否               这两个属性的作用完全相同。都制定该Servlet处理的URL

  

  注:如果打算使用注解来配置Servlet,首先不要在web.xml文件的根元素(web-app)中置顶metadata-complete="true"。其次不要在web.xml文件中配置该Servblet。如果打算使用web.xml文件来配置该Servlet,则需要配置如下两个部分。

    (1)配置Servlet的名字:对应web.xml文件中的<servlet/>元素

    (2)配置Servlet配置URL:对应web.xml文件中的<servlet-mapping/>元素。这一步是可选的。但如果没有为Servlet配置URL,则该Servlet不能响应用户请求。

 4.3、load-on-startup Servlet:

  创建Servlet实例有两个时机:用户请求之时或应用启动之时。应用启动就创建Servlet,通常是用于某些后台服务的Servlet,或者需要拦截很多请求的Servlet;这种Servlet通常作为应用的基础Servlet使用,提供中还要的后台服务。

  配置load-on-startup的Servlet有两种方式。

    (1)在web.xml文件中通过<servlet/>元素的<load-on-startup/>子元素进行配置。

    (2)通过@WebServlet注解的loadOnStartup属性指定。

  注:<load-on-startup/>元素或loadOnStartup属性都只接收一个整型值,这个整型值越小,Servlet就越优先实例化。

 package Servlets;

 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.util.Date;

 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.annotation.WebServlet;
 import javax.servlet.http.HttpServlet;
 import javax.swing.Timer;

 @WebServlet(loadOnStartup = 1, name = "timerServlet")
 public class ServiceServlet extends HttpServlet {

     @Override
     public void init(ServletConfig config) throws ServletException {
         // TODO Auto-generated method stub
         super.init(config);
         /* 定时器 */
         Timer t = new Timer(1000, new ActionListener() {

             @Override
             public void actionPerformed(ActionEvent e) {
                 // TODO Auto-generated method stub
                 System.out.println(new Date());
             }

         });
         t.start();
     }

 }
 <servlet>
     <servlet-name>timerServlet</servlet-name>
     <servlet-class>Servlets.ServiceServlet</servlet-class>
     <load-on-startup>1</load-on-startup>
 </servlet>

  注:不知什么原因在注解上添加loadOnStartup属性后Servlet没有启动,所以在web.xml加上了如上的Servlet配置信息。就可以看到当Tomcat启动后控制台就会每隔1s输出一次当前时间。

  

 尾:

  Servlet还可以访问配置文件,与config对象大同小异,就不再写了。今天就到这里,下次记录一下JSP的自定义标签。

【JSP】JSP基础学习记录(四)—— Servlet的更多相关文章

  1. MVC+Ext.net零基础学习记录(四)

    在上一篇文章[MVC+Ext.net零基础学习记录(三)]中提到了利用MVC的Area可以做到项目分离,但是实际操作起来还是有很多问题的.比如,对于物理资源的访问,会报:没有相关资源 开始的时候,我在 ...

  2. MVC+Ext.net零基础学习记录(五)

    继MVC+Ext.net零基础学习记录(四),在后面我在既有的项目上又添加了一个子项目,还用前面提到的方法,进行主项目中引用DLL,然后子项目中生成事件中使用mkdir 进行拷贝 发现一个下午就总是报 ...

  3. JavaScript 基础 学习 (四)

    JavaScript 基础 学习 (四) 解绑事件 dom级 事件解绑 ​ 元素.on事件类型 = null ​ 因为赋值的关系,所以给事件赋值为 null 的时候 ​ 事件触发的时候,就没有事件处理 ...

  4. leveldb 学习记录(四)Log文件

    前文记录 leveldb 学习记录(一) skiplistleveldb 学习记录(二) Sliceleveldb 学习记录(三) MemTable 与 Immutable Memtablelevel ...

  5. JavaScript学习记录四

    title: JavaScript学习记录四 toc: true date: 2018-09-16 20:31:22 --<JavaScript高级程序设计(第2版)>学习笔记 要多查阅M ...

  6. 4.VUE前端框架学习记录四:Vue组件化编码2

    VUE前端框架学习记录四:Vue组件化编码2文字信息没办法描述清楚,主要看编码Demo里面,有附带完整的代码下载地址,有需要的同学到脑图里面自取.脑图地址http://naotu.baidu.com/ ...

  7. 【JSP】JSP基础学习记录(二)—— JSP的7个动作指令

    2.JSP的7个动作指令: 动作指令与编译指令不同,编译指令是通知Servlet引擎的处理消息,而动作指令只是运行时的动作.编译指令在将JSP编译成Servlet时起作用:而处理指令通常可替换成JSP ...

  8. 【JSP】JSP基础学习记录(一)—— 基础介绍以及3个编译指令

    序: 从实现到现在一直是以.net为主,但偶尔也会参与一些其他语言的项目.最近需要对一个Java Web项目进行二次开发,一直没学习过JSP所以买了几本书自学试试.参考资料为<轻量级Java E ...

  9. leveldb 学习记录(四) skiplist补与变长数字

    在leveldb 学习记录(一) skiplist 已经将skiplist的插入 查找等操作流程用图示说明 这里在介绍 下skiplist的代码 里面有几个模块 template<typenam ...

随机推荐

  1. UML类图画法及其之间关系

    1.泛化又名继承(Generalization),带空心箭头的实线表示,箭头指向父类 2.实现(Realization),带空心的虚线表示 3.关联(Association),类与类之间的关联,它使一 ...

  2. mysql数据过滤

    WHERE子句 在我们使用数据库时,通常只会根据特定条件提取表数据的子集.只检索所需数据需要指定搜索条件(search criteria),搜索条件也称为过滤条件(filtercondition). ...

  3. C# Winform反序列化复杂json字符串

    最近接的私单是一个CS项目,里面所有的操作都是通过调用API接口来进行的. 接口详细说明 协议:https  请求方式:post  https://xx.xxx.net/app/clients 提交j ...

  4. MODIS批量处理软件MRT的安装说明

    最近在处理遥感影像的时候遇见了MODIS影像数据,从中MOD13中提取NDVI是相当的重要.在一番的百度之中找到了处理modis影像的神器------MRT 接下来我来说明一下MRT的具体安装,如果之 ...

  5. C# yield

    C#中的yield可以应用在一个可迭代的方法中,我们必须真正理解此关键词,才能将它正确的应用到实际生产中.为了说明yield会出现让我们迷惑的结果,下面先定义一个MyObject类: class My ...

  6. bootstrap源码分析之scrollspy(滚动侦听)

    源码文件: Scrollspy.js 实现功能 1.当滚动区域内设置的hashkey距离顶点到有效位置时,就关联设置其导航上的指定项2.导航必须是 .nav > li > a 结构,并且a ...

  7. Wrangle – 响应式的,触摸友好的多选插件

    Wrangle 是一个响应式,触摸友好的选择插件,支持 jQuery 以及 Zepto.Wrangle 为多项选择提供了一个独特的方法:通过画一条贯穿项目的线条来选择项目.它给你的应用程序的一种新的方 ...

  8. [js开源组件开发]network异步请求ajax的扩展

    network异步请求ajax的扩展 在日常的应用中,你可能直接调用$.ajax是会有些问题的,比如说用户的重复点击,比如说我只希望它成功提交一次后就不能再提交,比如说我希望有个正在提交的loadin ...

  9. CSS3滚动条-webkit-scrollbar

    webkit现在支持拥有overflow属性的区域,列表框,下拉菜单,textarea的滚动条自定义样式. 如果你想跳过介绍,直接看demo的话,请点击demo 滚动条是一个伪元素,可以自定义样式.这 ...

  10. sharepoint2010如何本地化WebPart的Category、WebDisplayName 和 WebDescription 属性

    在项目中经常需要实现多语言其中包括webpart的属性也需要.那么如何实现呢? 首先需要资源文件,利用资源文件实现语言的翻译,如下图: 创建好资源后,下面我们来实现webpart属性的多语言.方法代码 ...