JSP概述

JSP

JSP是Sun为了解决动态生成HTML文档的技术,通过Servlet输出简单html页面信息都非常不方便。如果要输出一个复杂页面的时候,就更加的困难,而且不利于页面的维护和调试。所以sun公司推出一种叫做jsp的动态页面技术来实现对页面的输出繁锁工作。JSP就是替代Servlet输出HTML的

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
<table>
<%
for(int i=1;i<10;i++){
   
out.println("<tr>");
for(int k=1;k<=i;k++){
   
%>
<td><%=k%>*<%=i%>=<%=i*k%></td>
<% }
out.println("</tr>");
}
%>
</table>
</body>
</html>

JSP技术最大的特点在于写JSP就像在写html,但是相比html而言,html只能为用户提供静态数据,而
JSP技术允许在页面中嵌套 java 代码,为用户提供动态数据。

核心运行原理

JSP执行需要有二次编译,生成的类继承于HttpJspBase类,这是一个jsp文件生成Servlet程序要继承的基类。这个HttpJspBase类继承于HttpServlet类。

  • 当jsp页面第一次被访问时【不访问则不会自动编译】,首先由服务器进行定位,如果不存在则404
    • 如果使用过程中发现修改则自动会触发重新编译加载
  • 如果存在,则使用jsp引擎将jsp页面文件转换为servlet类文件[index.jsp–>index_jsp.java,包名称
    为org.apache.jsp]
  • 如果编译失败,则运行报错【500】,否则继续调用servlet引擎将Servlet类文件编译转换为字节码文件[index_jsp.java–>index_jsp.class]
  • 然后加载初始化类文件【反射–无参构造器,事实上由于java文件是jsp引擎生成的,所以类名称无
    法确定】
<%!
public index_jsp(){
   } //语法报错
%>
  • 三生命周期

三生命周期

public void _jspInit() {
    在构造完成后自动执行初始化操作,在整个jsp生命周期过程中执行
且只执行一次
}
public void _jspDestroy() {
    在jsp页面对象销毁前自动执行的资源回收方法,在整个jsp生命
周期过程中执行且只执行一次
}
public void _jspService(final javax.servlet.http.HttpServletRequest request,
final javax.servlet.http.HttpServletResponse response) throws
java.io.IOException, javax.servlet.ServletException {
    用于对客户端的请求进行响
应,jsp默认单实例多线程的方式,执行响应结束后常驻内存
if
(!javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) {
   
final java.lang.String _jspx_method = request.getMethod();
if ("OPTIONS".equals(_jspx_method)) {
   
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
return;
}
if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) &&
!"HEAD".equals(_jspx_method)) {
   
response.setHeader("Allow","GET, HEAD, POST, OPTIONS");
response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSP
只允许 GETPOSTHEAD。Jasper 还允许 OPTIONS");
return;
}
}
final javax.servlet.jsp.PageContext pageContext;
javax.servlet.http.HttpSession session = null;
final javax.servlet.ServletContext application;
final javax.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;
out.write("\r\n");
out.write("\r\n");
out.write("<html>\r\n");
out.write("<head>\r\n");
out.write(" <title>Title</title>\r\n");
out.write("</head>\r\n");
out.write("\r\n");
out.write("<body>\r\n");
out.write("您是第");
out.p
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值