当前位置:  技术问答>java相关

关于在 servlet 中,service 以及 doGet、doPost应用的问题?!------------请进:)

    来源: 互联网  发布时间:2015-05-07

    本文导语:  各位大虾帮帮忙!     在servlet中,常常看到service的方法,还有doGet和doPost;对此一直很迷惑:     1、service一定要用吗?作用是什么?是不是在程序开始运行时,自动装载执行的系统方法(类似于main)?请介绍一...

各位大虾帮帮忙!  
 
在servlet中,常常看到service的方法,还有doGet和doPost;对此一直很迷惑:  
 
1、service一定要用吗?作用是什么?是不是在程序开始运行时,自动装载执行的系统方法(类似于main)?请介绍一下它的基本情况及用途。  
 
2、doGet和doPost方法的具体应用?即在什么时候程序调用doGet方法,什么时候程序执行doPost方法;  
 
3、doGet、doPost方法和service方法有何关系,他们在程序中的执行顺序是怎样的?  
 
谢谢了!!  
 

|
问题一:
Service是类GenericServlet中最重要的方法,每次客户向服务器发出请求时,服务器就会调用这个方法。程序员如果想对客户的请求进行响应的话就必须覆盖这个方法,并在这个方法中加入自己的代码来实现对客户的响应。Service有两个参数(ServletRequest和ServletResponse),ServletRequest保存了客户向服务器发送的请求,而ServletResponse用来设置如何对客户进行响应。有一个问题我们应当注意:就是init()方法(Servlet的两个生命周期函数之一,另一个是destroy())和service()方法的区别,当我们改变源程序而重新生成一个新的.class文件的时候,此时如果再次执行该Servlet,会发现执行的结果跟没做更改的时候一样,原因就是因为相同的Servlet的init只执行一次,所以当我们在调试Servlet的时候要不断改变文件名和类名,或者重新启动服务(Tomcat或者JWS等)。就是说,init()方法仅在服务器装载Servlet时才由服务器执行一次,而每次客户向服务器发请求时,服务器就会调用Service()方法。

问题二、三:
HttpServlet是从GenericServlet继承而来,因此HttpServlet也有init和destroy这两个生命周期函数以及Service方法,只是HttpServlet还有两个重要的doPost方法和doGet方法,并用他们来支持Http的post和get方法,就是说如果要支持Http的get方法,就要覆盖doGet方法,如果要支持Http的post方法,就要覆盖doPost方法。而get方法和post方法的主要区别在于:
post方法的数据传递方式比较安全,不会将传递的信息显示在浏览器的网址后,而get方法则会将传递的信息显示在浏览器的网址后,例如用post方法的浏览器网址:http://127.0.0.1:8080/Response.jsp?name=myself;而用get方法则为:http://127.0.0.1:8080/Response.jsp;这种区别当用在密码传输时就显的更为重要。

以上只是我个人的一些看法,不见得全对,但应该能够说明一定的问题,希望大家继续探讨!

|
当编写一个Servlet时,必须直接或间接实现Servlet接口,最可能实现的方法就是扩展javax.servlet.GenericServlet或javax.servlet.http.HttpServlet当实现javax.servlet.Servlet接口时必须实现5个方法

init(ServletConfig config)
service(ServletRequest req,ServletResponse resp)
destroy()
getServletConfig()
getServletInfo()
别的方法就不说了
service是执行应用逻辑的入口点,包容器调用此方法来响应进来得请求,只是在servlet被成功初始化后才能调用它
其实servlet和applet差不多,当一个servlet被实例化后,包容器自动去调用固定的方法首先是init(),然后是service().....
所以service必须有.

GenericServlet类提供了Servlet接口的基本实现,所以他的子类都必须实现service()方法
HttpServlet类扩展了GenericServlet并且提供了Servlet接口中具体于HTTP的实现它更 象一个其他所有的servlet都要扩展的类,其中他定义了两种形式的service方法:

service(Servirequest req,Servletresponse resp)
此方法是GenericServlet的service()方法的实现,他把resquest,response对象分别转化为HttpServletRequest和HttpServletResponse并且调用下面重载的service()方法,所以不应当重载上面的service()方法:

protect void service(HttpServirequest req,HttpServletresponse resp)
他用HTTP的request,response对象作为参数,并且由上面的方法调用,HttpServlet实现这个方法后就成为一个HTTP请求的分发者,他把请求代理给doGet(),doPost().....等doXXXX()方法,因此不应当重载他.
当包容器为一个servlet收到一个请求时,包容器调用公共的service方法在把参数转换为HttpServirequest,HttpServletresponse 后,这个公共的方法调用保护的service根据HTTP请求方法的类型,保护的service方法调用doXXXX()方法之一.
doGet()方法是当得到一个GET类型的请求时调用
doPost()方法是当得到一个POST类型的请求时调用

以上是个人观点,希望各位同僚指正

|
service 方法判断客户段所使用的http方法,然后选择调用doget还是dopost.
浏览器默认的方法是doget,但他有很大的局限性,因为是把内容放在url上传输,所以最多只能传输240个字节。而dopost是提交表单,所以理论上其提交内容的长度可以无限。

|
service由Servlet引擎运行。当有http请求来的时候,Servlet引擎会将请求包装成HttpServletRequest并以其为参数调用相应servlet的service方法。在servlet的父类HttpServlet中实现了service方法,对不同的http请求(get/post/put...)调用不同的do方法,所以一般情况下程序员不需要实现service方法。

|
service我不清楚
doGet:servlet在接受get方法表单提交请求时做处理的方法
doPost:servlet在接受Post方法表单提交请求时做处理的方法

|
楼上的对!
url的参数也在Doget里面处理!
sevice方法是servlet的标准方法!
可以看看javadoc

|
习惯上的用法是:
删除service()方法
将处理方法写在doGet()方法中
在doPost()方法中调用doGet()方法
这样,即可以处理doGet又可以处理doPost()

|
1. If you just want to implement the standard HTTP methods, you needn't override serveice(). Because your servlet's base class, HttpServlet, has dispatch all standard HTTP methods to some protected methods, such as doGet, doPost...  If you need implement some extending method, for example, implement WebDAV servlet, you need override the service() which dispatch the request with new method key word to your new methods. 

2. If you don't know the difference between doPost and doGet, I think you should learn HTTP first.

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_context定义参考
  • 请问各位大虾,我在编译SERVLET时,总是找不到javax.servlet.*或者javax.servlet.http.*,需要怎么配一下。
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_response定义参考
  • 关于servlet 的编译问题,怎样设置classpth,把那些java servlet类包含到classpath?而且无法调用servlet!谢谢!
  • java命名空间javax.xml.ws.handler接口messagecontext成员方法: servlet_request定义参考
  • 写了一个servlet程序,但用javac编译时,发现javax.servlet.*,javax.servlet.http.*不存在,为什么?怎样解决?
  • java Servlet获取和设置cookie实例代码
  • 为什么我在jsp页面用 "/servlet/goto.servlet?setname=中文",如果就这样传过去,在servlet里面得到的将是setname=null,如果传其他则可
  • java Servlet实现Session创建存取以及url重写代码示例
  • 我想apple传object给servlet同时也打开servlet页,显示servlet的内容
  • import javax.servlet.http.*;后,怎么提示package javax.servlet.http does not exist?我的classpath中已添加了tomcat/lib/servlet.jar!
  • 请问为什么我的servlet程序,在编译时总是会出现包javax.servlert和包javax.servlet.http不存在的错误,我在环境变量classpath种已经登记了servlet.jar的位置了。如何解决?
  • 编译 servlet 时,老提示 .....javax.servlet 不存在,为何 ???
  • jsp/servlet配置的小问题,如何添加servlet包
  • 包 javax.servlet ,javax.servlet.http 不存在,原因?解决办法?谢了!
  • 移动开发 iis7站长之家
  • 当多个请求同一个servlet时,servlet的生命周期是怎样的?
  • 一个Servlet如何在调用另一个Servlet时将自身的HttpServletRequest传递进去?
  • 急等用,现给分!servlet和servlet之间的通讯如何实现,最好有源代码,谢谢
  • 遍了一个简单的servlet,编译时提示:package javax.servlet does not exist!
  • 谁能解释一下如何使用javax.servlet.Filter 和javax.servlet.FilterChain!


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3