Servlet的学习(三)
本篇接上一篇《Servlet的学习(二)》 ,主要讲诉如何使用MyEclipse来开发Servlet,和导入Servlet所需要的源代码。
现在我们来创建一个web应用,就叫【myservlet】好了,如下图所示:
可以从项目窗口中看出,只要创建web工程,就会自动帮我们创建【WEB-INF】目录,并在其下创建【lib】目录和web.xml文件。我们顺便来看一下刚创建的web.xml文件内容:
Web.xml文件中只有设置主页而已,为什么先看这个,稍后会说到。
我们当然可以按照《Servlet的学习(一)》中的方法来建立Servlet,即创建一个类来继承Servlet的实现类GenericServelet,复写service()方法,并在web.xml文件中配置这个Servlet。
但是!!!我们并不使用继承GenericServelet类的方式,而是去继承GenericServelet类的子类HttpServlet类。这么做有什么好处呢?HttpServlet是指能够处理HTTP请求的Servlet,它在原有Servlet的接口上添加了一些HTTP协议处理方法,比Servlet接口的功能更加强大,所以我们只需要继承HttpServlet类就可以了。如果你在MyEclipse中对web工程建立Servlet也是可以看到MyEclipse是默认将你创建的Servlet继承HttpServlet的,如下图所示:
选择【Servlet】,弹出,写好包名和我要创建的Servlet名:SecondServlet,如下图:
可以看到MyEclipse自动将你要创建的Servlet的父类选择为HttpServlet。
当我们选择了HttpServlet类作为要继承的Servlet父类,那么就该知道HttpServlet类已经复写了service()方法,这个方法内的代码会自动判断用户的请求方式,如果为GET请求,则调用HttpServlet的doGet()方法;如果为POST请求,则调用doPost()方法,因此我们开发的时候,只需要复写doGet()方法或doPost()方法,无需再去复写service()方法。具体可以看Servlet的API文档中有关HttpServlet的详细内容。
我们勾选doGet方法和doPost方法,其他方法根据实际情况添加。接着点击【Next】,会看到另一个设置窗口:
【Generate/Map web.xml file】:将创建好的Servlet映射到web.xml文件中,这样能省我们很多事,当我们选择将Servlet映射进web.xml文件中时,就可以根据下面几个指定来设置映射到web.xml文件中哪些内容。
【Servlet/JSP Class Name】:这是作为在web.xml文件中<servlet-class>标签中的内容。
【Servlet/JSP Name】:设置在web.xml文件中<servlet-name>标签中的内容。
【Servlet/JSP Mapping URL】:设置web.xml文件中<servlet-mapping>标签下<url-pattern>标签的内容,也就是设置该Servlet的对外访问路径。
【File Path of web.xml】:该web.xml的路径,一般不用设置。
点击完成之后,我们再来看看web.xml文件,是的,刚才设置的Servlet到web.xml文件的映射都已经被MyEclipse在web.xml文件中添加好了,为我们省事了不少。如下图所示:
我们来看看Servlet中的内容:
是的,有点乱,这是因为MyEclipse在创建Servlet时是按模板生成的,这里我们可以将这些不需要的代码先去除,最后的部分我们再来讲解如何修改MyEclipse中的Servlet模板。
在这种继承HttpServlet的Servlet开发中,我们只关心doGet方法和doPost方法,对于不知何时http请求是GET方式何时是POST方式来说,可以使用以下“小聪明”的方式来满足在一个方法中同时处理GET请求或POST请求:
刚才说到在HttpServlet中的service()方法已经复写了其父类GenericServlet的service()方法,那我们就来看一下HttpServlet中的service()方法,将光标点击HttpServlet,然后按下键盘“F3”键,会发现:
多么熟悉的场景,这个问题曾在《Eclipse中导入第三方源码的问题和备用解决方案》中提到过,对,缺少Servlet的jar包源码,这里我们有两种解决方式:
一,到sun官网或oracle官网下载Servlet源码;
二,到Apache-Tomcat官网下载Tomcat的源码,这里我选择这种方式:
选择zip格式就可以(貌似tar.gz是给Linux用的)。
下载解压后,目录后面是带有“src”字样:
那么我们就可以在MyEclipse中点击“Attach Source”,因为是导入整个目录,所以选择“External Folder”即可,导入之后我们就可以看到HttpServlet的源码了,看到其service()方法,代码较长,这里就不附出,但思想就是先获取请求对象HttpServletRequest的请求方式,然后用if判断来针对各个请求调用不同的方法,如doGet方法或doPost方法。
接下来我们就可以安心回到刚刚创建的Servlet,在doGet方法中编写代码,我们就写个简单的返回客户端一点数据好了,跟在《Servlet的学习(一)》一样:
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { OutputStream out = response.getOutputStream();
out.write("Hello servlet again !".getBytes()); }
接着启动服务器,并将这个写好的Servlet发布,具体请看《Servlet的学习(二)》
最后,我们就能在浏览器查看:
记住,在地址栏中输入完主机地址和端口(如果有)后,如果web.xml没有另外设置的话,跟的是web项目名称和你在web.xml文件中为该Servlet设置的对外访问路径。
最后谈一谈,在MyEclipse中创建Servlet时自带模板的问题,这个问题可以看看一篇非常好的博客,同时讲到了修改MyEclipse自带的Servlet模板和JSP模板:《修改MyEclipse默认的Servlet和jsp代码模板》
同时建议,在修改模板之前,最好备份一份原来的文件。
Servlet的学习(三)的更多相关文章
- Servlet的学习之Filter过滤器技术(1)
本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...
- Servlet的学习(四)
在本篇的Servlet的学习中,主要来学习由使用MyEclipse来开发Servlet的一些小细节. 细节一:在web.xml中可以对同一个Servlet配置多个对外访问路径,并如果在web.xml中 ...
- Servlet的学习之Response响应对象(1)
在之前学习了Servlet中的主体结构,包括Servlet的生命周期方法,和非生命周期方法能获取的一些非常重要的对象如ServletConfig.ServletContext对象等,而从这篇开始我们将 ...
- Servlet的学习(二)
本篇接上一篇<Servlet的学习(一)>,讲述如何利用MyEclipse来创建web工程, 同时讲述如何在MyEclipse中配置Tomcat服务器. 在MyEclipse中,新建“We ...
- [转]Servlet的学习之Filter过滤器技术
本篇将讲诉Servlet中一项非常重要的技术,Filter过滤器技术.通过过滤器,可以对来自客户端的请求进行拦截,进行预处理或者对最终响应给客户端的数据进行处理后再输出. 要想使用Filter过滤器, ...
- Servlet+JSP(三):第一个Web程序
Servlet+JSP(三):第一个Web程序在学习了服务器并成功安装后,我们知道当浏览器发送请求给服务器后,服务器会调用并执行对应的逻辑代码进行请求处理.逻辑代 码是由程序员自己编写然后放进服务器进 ...
- Servlet还有学习的必要吗?(手工搭建Servlet)
前言 在初学Java web的时候,就曾听到过这样一种说法: java Web的演变过程大概可以分为4个阶段: jsp + Servlet + jdbc spring + struts2+ hiber ...
- Java开发学习(三十七)----SpringBoot多环境配置及配置文件分类
一.多环境配置 在工作中,对于开发环境.测试环境.生产环境的配置肯定都不相同,比如我们开发阶段会在自己的电脑上安装 mysql ,连接自己电脑上的 mysql 即可,但是项目开发完毕后要上线就需要该配 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
随机推荐
- java数组中的三种排序方法中的冒泡排序方法
我记得我大学学java的时候,怎么就是搞不明白这三种排序方法,也一直不会,现在我有发过来学习下这三种方法并记录下来. 首先说说冒泡排序方法:冒泡排序方法就是把数组中的每一个元素进行比较,如果第i个元素 ...
- POJ 3047 Fibonacci
DEBUG很辛苦,且行, 且珍惜 原代码: ans[0][0] = (ans[0][0] * a[flag][0][0] + ans[0][1] * a[flag][1][0]) % 10000; a ...
- oschina应用工具
应用工具 22思维导图软件 9博客客户端 15加密/解密/破解 120浏览器 78邮件工具 327文档/文本编辑 31杀毒软件 177终端/远程登录 195IM/聊天/语音工具 74下载工具 64文件 ...
- 利用MySQL 的GROUP_CONCAT函数实现聚合乘法
MySQL 聚合函数里面提供了加,平均数.最小,最大等,可是没有提供乘法,我们这里来利用MYSQL现有的GROUP_CONCAT函数实现聚合乘法. 先创建一张演示样例表: CREATE TABLE ` ...
- Sort List 分类: leetcode 算法 2015-07-10 15:35 1人阅读 评论(0) 收藏
对链表进行排序,要求时间复杂度为O(n log n) ,不使用额外的空间. 我一开始的想法是借助quicksort的思想,代码如下: # time O(nlog(n)) # Definition fo ...
- 80端口的烦恼:[3]清除NT Kernel占用80端口
链接地址:http://jingyan.baidu.com/article/f96699bbca15a1894e3c1bc4.html 当一台电脑安装了vs又安装了xampp时,可以能发生80端口号冲 ...
- 高级UIKit-04(NSUserDefaults、NSKeyedArchiver、对象归档方法)
[day05_1_UserDefault]:判断应用程序是否是第一次运行 NSUserDefaults:用来保存应用程序的配置信息如:程序运行次数,用户登陆信息等. // 使用系统提供的NSUserD ...
- Cloud Engine
Cloud Engine:大杀器如何炼成 郑昀 创建于2016/6/18 最后更新于2016/6/19 点击查看我的<如何从零搭建一个技术平台>,这是一个系列.转载时请注明“转载自旁观 ...
- HEVC码率控制浅析——HM代码阅读之一
HM的码率控制提案主要参考如下三篇:K0103,M0036,M0257.本文及后续文章将基于HM12.0进行讨论,且首先仅讨论K0103对应的代码,之后再陆续补充M0036,M0257对应的代码分析, ...
- Struts2+Spring+Hibernate step by step 03 整合Spring之中的一个(在DAO层验证username和password)
注:该系列文章部分内容来自王健老师编写SSH整合开发教程 目的:通过Spring创建数据库的连接,并通过Spring进行事务管理. 第一步:将Spring的包拷贝至当前项目的lib文件夹下,例如以下图 ...