1、从JSP的”P”说起,一个可以执行的page?不可能!它肯定会是一个对象,即jsp是一个对象,但谁把它new出来;它的类又是什么呢?
第一个问题:tomcat是new的当事人,没错,jsp是要符合一定的书写规范的,这是讨好tomcat的,或者说tomcat是jsp的容器。
第二个问题:<%=this instanceof HttpServlet %>是可以找到答案的.
2、“True”是第二问题的答案,说明JSP是一个HttpServlet子类的对象,它是简化版。现在我们需要自定一个类来完成和JSP相同的工作:
class MyServlet extends HttpServlet{
public void deGet(HttpServletRequest req,HttpServletResponse resp){
//jsp中的java代码放在这(思考:那些对象在哪里呢?)
}
}
3、如何运行?
如果我们自己运行,必需这样:
HttpServlet ms=new Myservlet();
ms..doGet(req,resp);
但其中的两个对象(实参)如何传递呢?
我们希望它象jsp一样的运行,即应该满足以下四点(简称四件事):
1)每次访问自动执行
2)自动实例化
3)方法自动调用,且方法传递的实参也被实例化。
4)应该有唯一的url 来保证其可以访问。
所有这些都应该由tomcat完成。
但目前的情况是什么?……我们只有一个MyServlet类,我们需要多做点事情,让Tomcat认识这个类,可以做那“四件事”。
4、如何解决“四件事”呢?
“项目下WEB-INF/web.xml”一个神奇的文件,这四件事可以一并在这里解决:
<!—在这里定义一个servlet,tomcat可以认识它- ->
<sevlet>
<sevlet-name>名字</servlet-name>
<sevlet-class>包名.类名</servlet-class>
</sevlet>
<!—在这里指定url- ->
<servlet-mapping>
<sevlet-name>名字</servlet-name>
<url-parten> /url</url-parttern>
</sevlet-mapping>
如此我们就可以在浏览器中使用:http://ip:port/项目/url的方式访问,让doGet里的程序执行起来了。