jsp入门

1,什么是jsp?

JSP全称是Java Server Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。

浏览器向服务器发请求,不管访问的是什么资源,其实都是在访问Servlet也就是说,我们在访问jsp的时候,其实也是在访问一个servlet。换句话说,servlet容器会把一个jsp转化成servlet

2,容器如何把jsp变成一个servlet?

容器拿到你在jsp中写的代码,把这些代码转换为一个servlet类(.java)源文件,然后再把这个源文件编译成java servlet类。在此之后,这就是名副其实的servlet了,换句话说,之后容器会加载servlet类,对其实例化并初始化,为每个请求建立一个单独的线程,并调用servletservice()方法。

3,你的jsp代码在最后的servlet类中扮演什么角色?

3.1jsp的基本元素

A:模板文本

B:jsp脚本片段

C:jsp表达式

D:jsp声明

E:jsp注释

3.2用示例来说话

需求:统计jsp页面被访问的次数。

代码示例:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jsp 入门介绍</title>
</head>
<body>
	<%! int total = 0; //total 是用来统计jsp页面被访问的次数 %> <!-- 这是jsp声明 -->
	<% total++; %>	<!-- 这是jsp脚本片段 -->
	页面访问次数:<%= total %>	<!-- 这是jsp表达式 -->
</body>
</html>

生成的servlet类源文件:

package org.apache.jsp.jsp;

import javax.servlet.*;
import javax.servlet.http.*;
import javax.servlet.jsp.*;

public final class index_jsp extends org.apache.jasper.runtime.HttpJspBase
    implements org.apache.jasper.runtime.JspSourceDependent {

 int total = 0; //total 是用来统计jsp页面被访问的次数 
  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;
  }

  public void _jspInit() {
    _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();
    _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class.getName());
  }

  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,
      			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("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\" \"http://www.w3.org/TR/html4/loose.dtd\">\r\n");
      out.write("<html>\r\n");
      out.write("<head>\r\n");
      out.write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\">\r\n");
      out.write("<title>jsp 入门介绍</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\t");
      out.write(" <!-- 这是jsp声明 -->\r\n");
      out.write("\t");
 total++; 
      out.write("\t<!-- 这是jsp脚本片段 -->\r\n");
      out.write("\t页面访问次数:");
      out.print( total );
      out.write("\t<!-- 这是jsp表达式 -->\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
    } 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);
    }
  }
}

页面显示的源代码:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>jsp 入门介绍</title>
</head>
<body>
	 <!-- 这是jsp声明 -->
		<!-- 这是jsp脚本片段 -->
	页面访问次数:8	<!-- 这是jsp表达式 -->
</body>
</html>

3.3通过这三段代码来分析jsp元素的语法以及这些元素在转换成的servlet类中所扮演的角色

A:模板文本

jsp模板文本就是html内容

B:jsp脚本片段

语法:<% java代码 %>
通过上面的代码可以看出,jsp脚本片段最终被放在service()方法中。也就可以得出如下结论:
1,在jsp脚本片段中定义的变量都是局部变量;
2,可以在jsp脚本片段中定义变量,书写语句,但是不能定义函数;
3,因为是定义变量,书写java语句,所以每行java代码需要加分号;

C:jsp表达式

语法:<%= 要输出的内容 %>
通过上面的代码可以看出,jsp表达式最终被放在service()方法中。也就可以得出如下结论:
1,要输出的内容将会成为out.print(  )的参数;
2,因为最终会成为out.print(  )的参数,所以不能加分号;

D:jsp声明

语法:<%! java代码  %>
通过上面的代码可以看出,jsp声明最终被放在service()方法之外,类声明的下面。也就可以得出如下结论:
1,在jsp声明中定义的变量和函数会成为类的成员变量和成员函数,当然也包括静态成员变量和静态成员函数;

E:jsp注释

语法:jsp注释<!--  -->或java的注释//和/*   */
两种注释的区别:
1,采用jsp注释,当人在页面上点击查看源代码的时候,可以查看到注释;
2,采用java注释,当人在页面上点击查看源代码的时候,查看不到注释;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值