生活随笔
收集整理的這篇文章主要介紹了
Jsp和Servlet有什么区别?
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
文章目錄
- 什么是Servlet?
- 為什么要用到Servlet?
- 什么是JSP
- 為什么需要JSP
- JSP的工作原理
什么是Servlet?
Servlet其實就是一個遵循Servlet開發(fā)的java類。Servlet是由服務(wù)器調(diào)用的,運行在服務(wù)器端。
為什么要用到Servlet?
我們編寫java程序想要在網(wǎng)上實現(xiàn) 聊天、發(fā)帖、這樣一些的交互功能,普通的java技術(shù)是非常難完成的。sun公司就提供了Servlet這種技術(shù)供我們使用。
什么是JSP
JSP全名為Java Server Pages,java服務(wù)器頁面。JSP是一種基于文本的程序,其特點就是HTML和Java代碼共同存在!
為什么需要JSP
JSP是為了簡化Servlet的工作出現(xiàn)的替代品,Servlet輸出HTML非常困難,JSP就是替代Servlet輸出HTML的。
JSP的工作原理
- 在Tomcat博客中我提到過:Tomcat訪問任何的資源都是在訪問Servlet!,當(dāng)然了,JSP也不例外!JSP本身就是一種Servlet。為什么我說JSP本身就是一種Servlet呢?其實JSP在第一次被訪問的時候會被編譯為HttpJspPage類(該類是HttpServlet的一個子類)
- 剛才我簡單使用了一下JSP,它被編譯成了這么一個Servlet:
作者:
Java3y
鏈接:https
://www
.zhihu
.com
/question
/37962386/answer
/673299207
來源:知乎
著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。
package org.apache.jsp;import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import java.util.Date;public final class _1_jsp
extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent {private static final JspFactory _jspxFactory
= JspFactory.getDefaultFactory();private static java.util.List<String> _jspx_dependants
;private javax.el.ExpressionFactory _el_expressionfactory
;private org.apache.tomcat.InstanceManager _jsp_instancemanager
;public java.util.List<String> getDependants() {return _jspx_dependants
;}public void _jspInit() {_el_expressionfactory
= _jspxFactory
.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();_jsp_instancemanager
= org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());}public void _jspDestroy() {}public void _jspService(final HttpServletRequest request
, final HttpServletResponse response
)throws java.io.IOException, ServletException {final PageContext pageContext
;HttpSession session
= null;final ServletContext application
;final ServletConfig config
;JspWriter out
= null;final Object page
= this;JspWriter _jspx_out
= null;PageContext _jspx_page_context
= null;try {response
.setContentType("text/html;charset=UTF-8");pageContext
= _jspxFactory
.getPageContext(this, request
, response
,null, true, 8192, true);_jspx_page_context
= pageContext
;application
= pageContext
.getServletContext();config
= pageContext
.getServletConfig();session
= pageContext
.getSession();out
= pageContext
.getOut();_jspx_out
= out
;out
.write("\r\n");out
.write("\r\n");out
.write("<html>\r\n");out
.write("<head>\r\n");out
.write(" <title>簡單使用JSP</title>\r\n");out
.write("</head>\r\n");out
.write("<body>\r\n");String s
= "HelloWorda";out
.println(s
);out
.write("\r\n");out
.write("</body>\r\n");out
.write("</html>\r\n");} catch (Throwable t
) {if (!(t
instanceof SkipPageException)){out
= _jspx_out
;if (out
!= null && out
.getBufferSize() != 0)try { out
.clearBuffer(); } catch (java.io.IOException e
) {}if (_jspx_page_context
!= null) _jspx_page_context
.handlePageException(t
);}} finally {_jspxFactory
.releasePageContext(_jspx_page_context
);}}
}
- 編譯過程是這樣子的:瀏覽器第一次請求1.jsp時,Tomcat會將1.jsp轉(zhuǎn)化成1_jsp.java這么一個類,并將該文件編譯成class文件。編譯完畢后再運行class文件來響應(yīng)瀏覽器的請求。
- 以后訪問1.jsp就不再重新編譯jsp文件了,直接調(diào)用class文件來響應(yīng)瀏覽器。當(dāng)然了,如果Tomcat檢測到JSP頁面改動了的話,會重新編譯的。
- 既然JSP是一個Servlet,那JSP頁面中的HTML排版標(biāo)簽是怎么樣被發(fā)送到瀏覽器的?我們來看下上面1_jsp.java的源碼就知道了。原來就是用write()出去的罷了。說到底,JSP就是封裝了Servlet的java程序罷了。
out
.write("\r\n");out
.write("\r\n");out
.write("<html>\r\n");out
.write("<head>\r\n");out
.write(" <title>簡單使用JSP</title>\r\n");out
.write("</head>\r\n");out
.write("<body>\r\n");
- 有人可能也會問:JSP頁面的代碼服務(wù)器是怎么執(zhí)行的?再看回1_jsp.java文件,java代碼就直接在類中的service()中。
String s
= "HelloWorda";out
.println(s
);
- JSP比Servlet更方便更簡單的一個重要原因就是:內(nèi)置了9個對象!內(nèi)置對象有:out、session、response、request、config、page、application、pageContext、exception,這幾個內(nèi)置對象不在這里講。現(xiàn)在先知道一下即可!
總結(jié)
以上是生活随笔為你收集整理的Jsp和Servlet有什么区别?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。