日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Jsp和Servlet有什么区别?

發(fā)布時間:2025/3/12 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Jsp和Servlet有什么区别? 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

文章目錄

  • 什么是Servlet?
  • 為什么要用到Servlet?
  • 什么是JSP
  • 為什么需要JSP
  • JSP的工作原理

什么是Servlet?

Servlet其實就是一個遵循Servlet開發(fā)的java類。Servlet是由服務器調(diào)用的,運行在服務器端。

為什么要用到Servlet?

我們編寫java程序想要在網(wǎng)上實現(xiàn) 聊天、發(fā)帖、這樣一些的交互功能,普通的java技術(shù)是非常難完成的。sun公司就提供了Servlet這種技術(shù)供我們使用。

什么是JSP

JSP全名為Java Server Pages,java服務器頁面。JSP是一種基于文本的程序,其特點就是HTML和Java代碼共同存在!

為什么需要JSP

JSP是為了簡化Servlet的工作出現(xiàn)的替代品,Servlet輸出HTML非常困難,JSP就是替代Servlet輸出HTML的。

JSP的工作原理

  • 在Tomcat博客中我提到過:Tomcat訪問任何的資源都是在訪問Servlet!,當然了,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文件來響應瀏覽器的請求。
  • 以后訪問1.jsp就不再重新編譯jsp文件了,直接調(diào)用class文件來響應瀏覽器。當然了,如果Tomcat檢測到JSP頁面改動了的話,會重新編譯的。
  • 既然JSP是一個Servlet,那JSP頁面中的HTML排版標簽是怎么樣被發(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頁面的代碼服務器是怎么執(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)容還不錯,歡迎將生活随笔推薦給好友。