jsp和servlet的区别和联系
2015-10-28 16:19
609 查看
jsp和servlet都属于j2ee13规范,servlet是运行在服务端的Java程序,动态生成web内容,但是如果仅仅使用servlet来输出html则是一句一句地输出,为开发和维护带来了极大的不便。而jsp可以这么理解,可以在html中添加Java代码,所以页面渲染结果可以直接使用Dreamweaver等编辑器直接更改,更简单快捷,而不用维护Java类中的代码。实现了解耦合。
而jsp的本质还是servlet,它只不过是利用了另外一套规则写的servlet,它运行也是需要先编译成Java代码,然后进行输出的,这些操作都是jsp容器完成的,比如一个jsp在tomcat中被编译,则会生成相应的Java类。
首先看看jsp是如何调用的:
在tomcat的web.xml配置中:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
tomcat启动会在work目录下编译jsp,然后生成相应的Java类:
而编辑这个类:
可以看出继承了HttpJspBase类,而这个类又继承了HttpServlet类,并且覆盖了service()方法。在HttpServletRequest和HttpServletResponse两个很重要的类创建之后,不再调用原来的service()方法,进行doGet()或者doPost()分发,因为_jspService()对其进行了覆盖,所以直接在_jspService()方法中生成页面渲染的代码:
这和原来直接在servlet中写html代码的本质是一样的,返回到客户端浏览器进行页面渲染,所以jsp本质就是servlet,只是表现形式不同。
而jsp的本质还是servlet,它只不过是利用了另外一套规则写的servlet,它运行也是需要先编译成Java代码,然后进行输出的,这些操作都是jsp容器完成的,比如一个jsp在tomcat中被编译,则会生成相应的Java类。
首先看看jsp是如何调用的:
在tomcat的web.xml配置中:
<servlet>
<servlet-name>jsp</servlet-name>
<servlet-class>org.apache.jasper.servlet.JspServlet</servlet-class>
<init-param>
<param-name>fork</param-name>
<param-value>false</param-value>
</init-param>
<init-param>
<param-name>xpoweredBy</param-name>
<param-value>false</param-value>
</init-param>
<load-on-startup>3</load-on-startup>
</servlet>
<servlet-mapping> <servlet-name>jsp</servlet-name> <url-pattern>*.jsp</url-pattern> </servlet-mapping>这里规定了servlet-name是jsp,根据这个规范,也可以认为jsp实际上就是特殊的servlet。
tomcat启动会在work目录下编译jsp,然后生成相应的Java类:
而编辑这个类:
可以看出继承了HttpJspBase类,而这个类又继承了HttpServlet类,并且覆盖了service()方法。在HttpServletRequest和HttpServletResponse两个很重要的类创建之后,不再调用原来的service()方法,进行doGet()或者doPost()分发,因为_jspService()对其进行了覆盖,所以直接在_jspService()方法中生成页面渲染的代码:
这和原来直接在servlet中写html代码的本质是一样的,返回到客户端浏览器进行页面渲染,所以jsp本质就是servlet,只是表现形式不同。
相关文章推荐
- JSP和servlet之间的传值(总结的很全面)
- Extjs 实现form表单批量设置只读和背景色
- javascript倒计时
- 中文dump后写入json文件无法显示中文
- js对于地址栏中的URI的解析
- jsp乱码,xml配置方法
- javascript——defer和async的区别
- jsp+ajax实现的局部刷新较验验证码(onblur事件触发较验)
- js的小案例的实现效果学习笔记
- window.opener方法的使用 js跨域
- extjs增删改查(自己调用extjs)
- window.opener方法的使用 js跨域
- JSP中文乱码问题终极解决方案
- javascript中new操作符
- js 页面刷新location.reload和location.replace的区别小结
- js制作九九乘法表
- Extjs xtype 一览表
- JS删除数组中某一项或几项的方法汇总
- JavaScript跳转到页面某个锚点
- JavaScript跨域深入研究与解决办法(转)