Service 和 doGet 和 doPost 方法的区别:
1.Service 方法:
不管是 get 方式还是 post 方式的请求,如果 Servlet 类中有
service 方法,则优先调用 Service 方法。
2.doGet 方法:
在没有 service 方法的情况下如果是 get 方式的请求所调用
的处理请求的方法
3.doPost 方法:
在没有 service 方法的情况下如果是 post 方式的请求所调
用的处理请求的方法
4.源码分析:
我们看到,MyServlet最终实现的是Servlet接口,而Servlet接口只有5个抽象方法。
因此,Tomcat调用servlet时,除了一开始的init(),当创建线程时,调用的是service(),而不是什么doGet()doPost()!
所以如果 一个Servlet 类中有service 方法,则优先调用 Service 方法。并且,如果子类没有service(),则会call抽象父类——HttpServlet类的service()。
我们看到,抽象父类——HttpServlet的service方法会调用doget方法、doPost方法、doHead方法等等。
如果子类MyServlet有重写doGet方法、doPost方法,则会调用子类重写的方法,如果没有,就掉用本类的doGet方法、doPos方法。
不过,本类的doGet、doPost方法,都是用来报错的。
详情参见源码:
Servlet 的常见错误总结:
* Servlet的常见错误:
* 404错误:资源未找到
* 原因一:在请求地址中的servlet的别名书写错误。
* 原因二:虚拟项目名称拼写错误(也有可能是虚拟项目被删除)
* 500错误:内部服务器错误
*原因一:java.lang.ClassNotFoundException; com.bjsxt.servlet.ServletMothod
* 解决:在web.xml中校验servlet类的全限定路径是否拼写错误。
* 原因二:因为我们编写的servlet类中的service方法体中的业务逻辑处理代码有问题,导致执行错误。
* 解决:根据错误提示对service方法体中的代码进行错误更改。
* 405错误:请求方式不支持
* 原因:请求方式和servlet中的方法不匹配所造成的。
* 解决: 尽量使用 本类的service 方法进行请求处理,并且不要在 service 方法中调用父类的service——super.service(req,rep)。