JSP学习(1)---JSP基本原理
一.JSP的本质
其本质是Servlet,web应用中的每个jsp页面都会由servlet容器生成对应的servlet。
在tomcat中,jsp生成的servlet在work文件夹下:
原jsp文件:

对应的servlet

show.jsp
<%-- 编译指令--%>
<%@page contentType="text/html;charset=UTF-8" language="java" errorPage="error.jsp"%>
<%@page info="this is a jsp page"%>
<html>
<head>
<title>
欢迎
</title>
</head>
<%-- jsp声明变量和方法--%>
<%!
private int count;
private int num;
public String print(){
return "hello";
}
%>
<body> <%-- jsp注释,不会出现在浏览器的源代码中。只在服务端。--%>
<!--html注释-->
你访问!
<%out.print(new java.util.Date());%>
<%for(int i=0;i<5;i++){
out.print("<font size='"+i+"'>" );%>
hello world</font> <%}%> <%-- 变量和方法使用--%>
<%out.print(count++);
%>
<%out.print(print());%>
<%-- JSP表达式--%>
<%=num++%>
<%=getServletInfo()%> <table border="1">
<%-- jsp脚本--%>
<%for(int j=0;j<8;j++){%>
<%!private int n;%>
<tr><td>n++</td></tr> <%}%> <%-- 这里出现异常,跳转向error.jsp--%>
<%!int m=7;
int p=4;
%>
<%=m/p%>
</table>
</body>
</html>
show_jsp.java
package org.apache.jsp; import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*; public final class show_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent {
//jsp中编译指令page的info属性
public String getServletInfo() {
return "this is a jsp page";
} //jsp中声明的变量和方法
private int count;
private int num;
public String print(){
return "hello";
} private int n;
int m=7;
int p=4; private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory(); private static java.util.List _jspx_dependants; private javax.el.ExpressionFactory _el_expressionfactory;
private org.apache.AnnotationProcessor _jsp_annotationprocessor; public Object getDependants() {
return _jspx_dependants;
}
//初始化JSP/servlet的方法
public void _jspInit() {
_el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
_jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
}
//销毁JSP/servlet之前的方法
public void _jspDestroy() {
}
//对用户请求生成响应的方法
public void _jspService(HttpServletRequest request, HttpServletResponse response)
throws java.io.IOException, ServletException { PageContext pageContext = null;
HttpSession session = null;
ServletContext application = null;
ServletConfig config = null;
JspWriter out = null;
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,
"error.jsp", 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><title>\r\n");
out.write("欢迎\r\n");
out.write("\r\n");
out.write("</title>\r\n");
out.write("</head>\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("<body>\r\n");
out.write("\r\n");
out.write("\r\n");
out.write("<!--html注释-->\r\n");
out.write("你访问!\r\n");
out.print(new java.util.Date());
out.write('\r');
out.write('\n');
for(int i=0;i<5;i++){
out.print("<font size='"+i+"'>" );
out.write("\r\n");
out.write("\thello world</font>\r\n");
out.write("\t\r\n");
out.write("\t\r\n");
}
out.write("\r\n");
out.write("\r\n");
out.write("\r\n");
out.print(count++); out.write('\r');
out.write('\n');
out.print(print());
out.write('\r');
out.write('\n');
out.print(num++);
out.write("\r\n");
out.write("<table border=\"1\">\r\n");
for(int j=0;j<8;j++){
out.write('\r');
out.write('\n');
out.write("\r\n");
out.write("<tr><td>n++</td></tr>\r\n");
out.write("\t\r\n");
}
out.write('\r');
out.write('\n');
out.print(getServletInfo());
out.write('\r');
out.write('\n');
out.write('\r');
out.write('\n');
out.print(m/p);
out.write("\r\n");
out.write("</table>\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);
}
}
}
二.JSP的工作原理

JSP学习(1)---JSP基本原理的更多相关文章
- jsp学习:jsp学习阶段性总结2019.9.21
Jsp学习 jsp语法格式: 脚本程序:<% 代码片段 %> jsp声明:<%! declaration; [ declaration; ]+ ... %> 表达式:<% ...
- jsp学习---使用jsp和JavaBean实现超简单网页计算器
一.需求 如题,用jsp实现一个超简单的网页计算器. 二.实现 1.效果图 1)初始界面: 2)随便输入两个数进行相乘: 3)当除数为零时提示报错: 2.代码 Calculator.java pack ...
- 重温JSP学习笔记--JSP动作标签
上一篇笔记写的是jsp的三个指令九个内置对象,这篇随笔开始写jsp的动作标签,动作标签是由服务器(Tomcat)来解释执行,与java代码一样,都是在服务器端执行的,jsp动作标签有十几多个,这里只写 ...
- [jsp学习笔记] jsp过滤器
- [jsp学习笔记] jsp基础知识 数据初始化、同步
- JSP学习笔记
JSP学习笔记 Jsp网页主要分为Elements与Template Data两部分. Template Data:JSP Container不处理的部分,例如HTML内容 Elements:必须经由 ...
- JSP学习(2)
JSP学习(2) JSP简介 Java Server Page,其根本是一个简单Servlet设计. 常用的动态网站开发技术 JSP:安全性高,适合开发大型的,企业级或分布式的Web应用程序. Asp ...
- JSP学习(3)
JSP学习(3) JSP内置对象 Web容器创建的一组对象,不使用new关键字就可以使用的内置对象 用户服务器请求 缓冲区:Buffer,就是内存的一块区域,用来保存临时数据. get与post的区别 ...
- JSP 学习笔记1
JSP 学习笔记 JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例--JSP页面有系统编译成Servlet,Servlet再负责响应用户请求. 1.JSP注释 < ...
- JSP学习网站
JSP学习网站 http://www.yiibai.com/jstl/ http://www.w3cschool.cc/jsp/jsp-jstl.html
随机推荐
- Gradle 依赖管理
依赖管理(在 build.gradle 中): 1.定义依赖仓库(repositories): Gradle 要求至少定义一个依赖仓库,依赖仓库可以是文件系统,也可以是中心服务器.最常用的是 jcen ...
- css复合选择器的权重
选择器的权重 标签选择器的权重为0001 class选择器的权重为0010 id选择器的权重为0100 属性选择器的权重为0010 伪类选择器的权重为0010 伪元素选择器的权重为0010 包含选择器 ...
- 历届试题 小数第n位 (求循环节)
只要被除数出现重复,就表明循环节出现了.即使商不是循环小数,也可以补0作为循环节,这样就可以统一处理了. AC代码 #include <stdio.h> #include <vect ...
- 稠州银行数字化转型:打造银行数据大脑,建立全新数字化DNA
数字经济时代,银行如何进行数字化转型?业务模式转型与科技转型如何协同并进? 2019年1月4日,在上海蚂蚁金服ATEC城市峰会上,浙江稠州商业银行(以下简称“稠州银行”)副行长兼首席信息官程杰分享了稠 ...
- lambda表达式应用在闭包中
def make_repeat(n): return lambda s : s * n a = make_repeat(2) print(a(8)) 等于 def make_repeat(n): de ...
- 禁止root登陆sshd/并修改默认端口号
1,新建一个用户: #useradd xxx 2,为新用户设置密码: #passwd xxx 3,修改sshd配置文件 #vi /etc/ssh/sshd_config 查找“#PermitRootL ...
- PyQt5——布局管理
PyQt5布局管理使用方法详见:https://blog.csdn.net/jia666666/article/list/3?t=1& PyQt5布局管理汇总: 1.QHBoxLayout 2 ...
- NGS概念大科普(转)
NGS又称为下一代测序技术,高通量测序技术 以高输出量和高解析度为主要特色,能一次并行对几十万到几百万条DNA分子进行序列读取,在提供丰富的遗传学信息的同时,还可大大降低测序费用.缩短测序时间的测序技 ...
- IDEA外部工具配置-OpenJML篇
帮助文档 jetbrains帮助文档:https://www.jetbrains.com/help/idea/settings-tools-external-tools.html 使用external ...
- IIS部署发布flask网站
先参考http://python.jobbole.com/87655/,会发现失败. 再参考https://blog.csdn.net/david_lee13/article/details/8198 ...