做招聘网站毕业设计,河南营销推广软件,哪个网站可以做ppt,建设电影网站如何盈利文章目录什么是Servlet#xff1f;为什么要用到Servlet#xff1f;什么是JSP为什么需要JSPJSP的工作原理什么是Servlet#xff1f;
Servlet其实就是一个遵循Servlet开发的java类。Servlet是由服务器调用的#xff0c;运行在服务器端。
为什么要用到Servlet#xff1f;
…
文章目录什么是Servlet为什么要用到Servlet什么是JSP为什么需要JSPJSP的工作原理什么是Servlet
Servlet其实就是一个遵循Servlet开发的java类。Servlet是由服务器调用的运行在服务器端。
为什么要用到Servlet
我们编写java程序想要在网上实现 聊天、发帖、这样一些的交互功能普通的java技术是非常难完成的。sun公司就提供了Servlet这种技术供我们使用。
什么是JSP
JSP全名为Java Server Pagesjava服务器页面。JSP是一种基于文本的程序其特点就是HTML和Java代码共同存在
为什么需要JSP
JSP是为了简化Servlet的工作出现的替代品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
来源知乎
著作权归作者所有。商业转载请联系作者获得授权非商业转载请注明出处。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.ListString _jspx_dependants;private javax.el.ExpressionFactory _el_expressionfactory;private org.apache.tomcat.InstanceManager _jsp_instancemanager;public java.util.ListString 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;charsetUTF-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转化成1_jsp.java这么一个类并将该文件编译成class文件。编译完毕后再运行class文件来响应浏览器的请求。以后访问1.jsp就不再重新编译jsp文件了直接调用class文件来响应浏览器。当然了如果Tomcat检测到JSP页面改动了的话会重新编译的。既然JSP是一个Servlet那JSP页面中的HTML排版标签是怎么样被发送到浏览器的我们来看下上面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页面的代码服务器是怎么执行的再看回1_jsp.java文件java代码就直接在类中的service()中。 String s HelloWorda;out.println(s);JSP比Servlet更方便更简单的一个重要原因就是内置了9个对象内置对象有out、session、response、request、config、page、application、pageContext、exception这几个内置对象不在这里讲。现在先知道一下即可