
展开全部
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 方法就可以了。
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 方法就可以了。
展开全部
我也是初学者,这个问题也困扰了我很长时间。反复对比了几本入门教材,把一点大概印象来交流一下。
要创建一个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实例的时候,设置一些如数据库连接语句,密码等等之类的东西。
初学心得,希望高手老师们指正。
要创建一个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实例的时候,设置一些如数据库连接语句,密码等等之类的东西。
初学心得,希望高手老师们指正。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
service,不是servce,呵呵,没什么不同,不过是httpServlet和Servlet的2个相同功能的方法,关键是这2个类的功用不同
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询