首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

关于Servlet器皿和doGet/Post()的疑问

2012-12-17 
关于Servlet容器和doGet/Post()的疑问今天看书时看到一段话有一些疑问。对于HttpServlet类的具体子类,一般

关于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呢?
[最优解释]
其实你写成protected应该也是可以访问的(你可以写个小程序测试一下),但是由于是父类方法采用了protected,所以继承的方法的权限不能低于protected,不然重写的方法是不能被servlet容器访问到的,所以一般都是public。
[其他解释]
你说的那段话没有问题,先访问service方法,再通过service方法来判断使用doget或者dopost方法,但是我们自己写的servlet是继承了HttpServlet,重写了父类的doget和doPost,所以要用public才行。
[其他解释]
public和protected应该都是可以的,只是一般继承的方法大都是权限>=父类的方法。你的理解是对的。
[其他解释]
求帮忙...有都是分 - -!
[其他解释]
终于有人鸟我了.... 多谢楼上!

但是HttpServlet中的doGet和doPost方法是protected,我们重写时为什么要搞成public?
[其他解释]
首先是继承HttpServlet,所以子类方法的访问权限要比父类大,那么只能是protected、public,
然后protected在包外是没有访问权限的,也就是说如果你自己定义的servlet的doXXX方法是protected的,提交到servlet处理时,访问不到子类doXXX方法了,只能是父类默认的doXXX方法了。
[其他解释]
试了用子类用protected重写doGet(),是可以调用的.
[其他解释]

引用:
终于有人鸟我了.... 多谢楼上!

但是HttpServlet中的doGet和doPost方法是protected,我们重写时为什么要搞成public?

继承的权限问题;
子类大于>父类
而且如果你一旦protected了,那么你程序的扩展性就不好了
建议好好理解下继承权限问题!!!
[其他解释]
通过继承得来,可以是public,也可以和父类相同的,但是不能缩小父类的访问权限,protect应该也可以
[其他解释]
楼上都正解,LZ你的理解 protect,public,private,还一个叫友好的修饰的作用域,不过貌似我自己有点忘记了,一起学习下啊,呵呵!
[其他解释]
该回复于2012-12-04 13:15:45被管理员删除

热点排行