日期:2014-05-17  浏览次数:20801 次

关于Servlet容器和doGet/Post()的疑问
今天看书时看到一段话有一些疑问。

对于HttpServlet类的具体子类,一般会针对和护短的特定请求方式,来覆盖HttpServlet父类中的相应doXXX()方法。为了使doXXX()方法能被Servlet容器访问,应该把访问权限设为public

Servlet容器不会访问doGet/doPost吧?应该是容器直接访问service(),service方法去调用doXXX()这样的吧。

HttpServlet中的doGet/doPost是protected的,而我特意看了一下struts等的doGet/doPost确实为public。

到底为什么要把doGet/doPost改成public呢?
------解决方案--------------------
你说的那段话没有问题,先访问service方法,再通过service方法来判断使用doget或者dopost方法,但是我们自己写的servlet是继承了HttpServlet,重写了父类的doget和doPost,所以要用public才行。
------解决方案--------------------
其实你写成protected应该也是可以访问的(你可以写个小程序测试一下),但是由于是父类方法采用了protected,所以继承的方法的权限不能低于protected,不然重写的方法是不能被servlet容器访问到的,所以一般都是public。
------解决方案--------------------
public和protected应该都是可以的,只是一般继承的方法大都是权限>=父类的方法。你的理解是对的。