java jsp servelet_java Web jsp和servlet的关系

JSP本质是Servlet,但两者创建方式不同。Servlet擅长流程控制和事务处理,而JSP更适合页面显示。JSP编译后变为Servlet,由Web容器执行。在实际应用中,通常使用Servlet控制业务流程,JSP生成动态网页。JSP中的HTML和Java脚本混合,简化了网页设计。
摘要由CSDN通过智能技术生成

JSP在本质上就是SERVLET,但是两者的创建方式不一样

Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观

JSP由HTML代码和JSP标签构成,可以方便地编写动态网页

因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页

简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。    后来SUN推出了类似于.NET中的ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。

1 jsp经编译后就变成了Servlet

(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)

2 jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.

3 Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.

Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。

而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。

通过代码来解释一下:

login.jsp文件内容:

登录测试
用户名
密码

这个jsp文件在编译后会变成java文件login_jsp.java 如下:

这个java类继承了HttpJspBase 而HttpJspBase继承了HttpServlet  也就是说被编译成了一个servlet

/** Generated by the Jasper component of Apache Tomcat

* Version: Apache Tomcat/7.0.82

* Generated at: 2018-06-26 03:54:34 UTC

* Note: The last modified time of this file was set to

* the last modified time of the source file after

* generation to assist with modification tracking.*/

packageorg.apache.jsp;import javax.servlet.*;import javax.servlet.http.*;import javax.servlet.jsp.*;public final class login_jsp extendsorg.apache.jasper.runtime.HttpJspBaseimplementsorg.apache.jasper.runtime.JspSourceDependent {private static final javax.servlet.jsp.JspFactory _jspxFactory =javax.servlet.jsp.JspFactory.getDefaultFactory();private static java.util.Map_jspx_dependants;private volatilejavax.el.ExpressionFactory _el_expressionfactory;private volatileorg.apache.tomcat.InstanceManager _jsp_instancemanager;public java.util.MapgetDependants() {return_jspx_dependants;

}publicjavax.el.ExpressionFactory _jsp_getExpressionFactory() {if (_el_expressionfactory == null) {synchronized (this) {if (_el_expressionfactory == null) {

_el_expressionfactory=_jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();

}

}

}return_el_expressionfactory;

}publicorg.apache.tomcat.InstanceManager _jsp_getInstanceManager() {if (_jsp_instancemanager == null) {synchronized (this) {if (_jsp_instancemanager == null) {

_jsp_instancemanager=org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig());

}

}

}return_jsp_instancemanager;

}//servlet中的init

public void_jspInit() {

}//servlet中的destory

public void_jspDestroy() {

}//servlet中的service

public void _jspService(final javax.servlet.http.HttpServletRequest request, finaljavax.servlet.http.HttpServletResponse response)throwsjava.io.IOException, javax.servlet.ServletException {finaljavax.servlet.jsp.PageContext pageContext;

javax.servlet.http.HttpSession session= null;finaljavax.servlet.ServletContext application;finaljavax.servlet.ServletConfig config;

javax.servlet.jsp.JspWriter out= null;final java.lang.Object page = this;

javax.servlet.jsp.JspWriter _jspx_out= null;

javax.servlet.jsp.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;//我们在js页面上写的html标签

out.write("\r\n");

out.write("\r\n");

out.write("\r\n");

out.write("

\r\n");

out.write("

登录\r\n");

out.write("\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

out.write("

\r\n");

out.write("

用户名\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

密码\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("

\r\n");

out.write("\r\n");

out.write("\r\n");

}catch(java.lang.Throwable t) {if (!(t instanceofjavax.servlet.jsp.SkipPageException)){

out=_jspx_out;if (out != null && out.getBufferSize() != 0)try{if(response.isCommitted()) {

out.flush();

}else{

out.clearBuffer();

}

}catch(java.io.IOException e) {}if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);else throw newServletException(t);

}

}finally{

_jspxFactory.releasePageContext(_jspx_page_context);

}

}

}

通过代码我们发现 jsp文件在编译的时候 会编译成servlet来交给jvm去执行 所以我们可以得出一个结论也就是我们文章开头说的:jsp在本质上就是一个servlet。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值