HttpServlet类中的servce方法和Servlet中的servce有什么不同?

如题如果可以百度消息联系或百度hi我... 如题

如果可以百度消息联系或百度hi我
展开
 我来答
百度网友ace2c31b4
推荐于2016-02-10 · TA获得超过656个赞
知道小有建树答主
回答量:164
采纳率:0%
帮助的人:152万
展开全部
Servlet是一种独立于平台和协议的服务器端的Java应用程序,可以生成动态的Web页面。 它担当Web浏览器或其他HTTP客户程序发出请求,与HTTP服务器上的数据库或应用程序之间的中间层。

Servlet是一个接口,它的service方法是每当用户发出请求,就会被调用。但是接口中是没有具体实现的。

HttpServlet是Servlet的一个具体实现。HTTP Servlet 使用一个 HTML 表格来发送和接收数据。要创建一个 HTTP Servlet,请扩展 HttpServlet 类,该类是用专门的方法来处理 HTML 表格的 GenericServlet 的一个子类。 HTML 表单是由 <FORM> 和 </FORM> 标记定义的。表单中典型地包含输入字段(如文本输入字段、复选框、单选按钮和选择列表)和用于提交数据的按钮。
每当一个客户请求一个HttpServlet 对象,该对象的service() 方法就要被调用,而且传递给这个方法一个"请求"(ServletRequest)对象和一个"响应"(ServletResponse)对象作为参数。在 HttpServlet 中已存在 service() 方法。缺省的服务功能是调用与 HTTP 请求的方法相应的 do 功能。例如, 如果 HTTP 请求方法为 GET,则缺省情况下就调用 doGet() 。Servlet 应该为 Servlet 支持的 HTTP 方法覆盖 do 功能。因为 HttpServlet.service() 方法会检查请求方法是否调用了适当的处理方法,不必要覆盖 service() 方法。只需覆盖相应的 do 方法就可以了。
百度网友346f570
2009-04-30
知道答主
回答量:7
采纳率:0%
帮助的人:4.8万
展开全部
我也是初学者,这个问题也困扰了我很长时间。反复对比了几本入门教材,把一点大概印象来交流一下。

要创建一个servlet,我们须要实现这个接口的5种方法。代码得这样写

public class Hello
{
public void destroy(){....}
public ServletConfig getServletConfig(){....}
public String getServletInfo(){....}
public void init(ServletConfig sc)throws ServletException{....}
public void service(ServletRequest req,ServletResponse resp)throws SevletException,IOException{....}
}

这对于一般应用者,或者我们这样的菜鸟来说太复杂而且无用,所以SUN很体贴的做好了一个GenericServlet类,实现了init()等4种方法。我们创建servlet时只需要继承他,再加上实现一个service()方法就行。省了不少力。

代码这样写就可以了
public class Hello extends GenericServlet
{
public void service(ServletRequest greq,ServletResponse gresp)throws....{....}
}

这里我把大家习惯写的引用名 req ,resp 特意加个g,表明是继承总的那个GenericServlet的。

——这里的两个引用,如greq,是引用的,由容器生产商(tomcat或weblogic等等)按照ServletRequest接口的定义,在容器中自动实例化生成的一个请求对象。这个对象能用该接口定义的15个方法进行操作。当然不同的生产商,实例化出来的对象都会有所不同,只不过我们不关心不同的那些部分,只关心共同的这15个操作方法(他还有什么别的方法我也不管)。

这个servlet要实现什么功能,就都写在这个service里了。这样做的最大好处是,可以编写不限于HTTP的其他应用,比如FTP,MAIL等等。

但是这对于一般应用者,或者我们这样的菜鸟来说仍然是太复杂而且无用。因为我们一般只需要做HTTP的,象什么购物网站处理表单之类。所以SUN公司又继续,非常体贴的,在GenericServlet类之下,又做了一个HttpServlet类。

(在javax包中,http包是放在servlet包之下的。表明这种继承关系。)

感谢SUN公司的体贴,我们大多数时候,只需要继承HttpServlet类就行了。当然这时候我们要写的代码就是

public class Hello extends HttpServlet
{
public void service(HttpServletRequest req,HttpServletResponse resp)throws ....{....}
}

——这里的引用req,就跟上面的greq不同了,上面引用的是符合ServletRequest接口定义的请求对象,这里是引用的符合HttpServletRequest接口定义的请求对象。就是说,我们相信,引用的这个对象,可以用HttpServletRequest接口定义的那些方法(20个,外加继承来的15个,共35个)进行操作。相比较GenericServlet类的service()参数引用的ServletRequest接口定义实例对象,现在我们有更多的、更符合我们需要的方法,可以在service()里对req对象进行操作,比如,getCookies(),getQueryString(),getSession()等。这20个方法在GenericServlet的service()方法里面并不能使用。

——反之,能在GenericServlet的service()方法里面使用的,对请求或响应对象的那15个操作方法,在HttpServlet的service()里面,都能用,比如最常见的getParameter()。

接下来,我就有点糊涂了。

似乎,HttpServlet自身,已经把service()给实现了。不象GenericServlet的,还等待我们来写这个service()。现在我们不需要写。另外,它还额外地提供了7种方法。当我们继承了HttpServlet,不需要再重写service(),我们要做的,只需根据需要重写这个HttpServlet类提供的doGet()这些方法中的某几个。

至于这7种方法,在HttpServlet类的内部,是如何与service方法互换或者说交流,这个就要高手来回答了。总之,我的理解就是,HttpServlet类把service的任务,分解给了7个方法来完成。

或者说,我们能够用HttpServlet的service方法做的事,不外乎就这7个方面。要想做更多,比如FTP,就应该到GenericServlet里面去。

当然,你想接着把HttpServlet的service()方法给覆盖掉,在这里面实现各种HTTP应用,那也是可以的——因为是从GenericSevlet来的,都是为了实现servlet接口的,所以对这个接口定义的5种方法,你高兴覆盖哪个都可以。只不过,那样做,除了显示你的水平高人一等外,费力又没有什么意义,因为,以你现阶段的水平,你能用到的,都在doGet()等7种方法里了。

一想到这个我就很悲哀。搞半天我们还是在金字塔的最低层上忙活……

当然,实际应用中,我们是常常要重写init()方法的,在初始化这个Sevlet实例的时候,设置一些如数据库连接语句,密码等等之类的东西。

初学心得,希望高手老师们指正。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
wsliyun321
2009-05-02
知道答主
回答量:11
采纳率:0%
帮助的人:7.9万
展开全部
service,不是servce,呵呵,没什么不同,不过是httpServlet和Servlet的2个相同功能的方法,关键是这2个类的功用不同
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式