`

JSP学习笔记之JSP基本语法

    博客分类:
  • JSP
 
阅读更多

概述

本文包含以下内容:

1、JSP表达式   2、JSP声明   3、JSP脚本   4、JSP注释

 

这是first.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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<%=3.1415926 %>
	<br>
	<%
		//这是Java注释
		count = count + 1;
		out.println(count);
		out.println("<br>");
		String info = getInfo();
		out.println(info);
	%>
	<%!
		int count = 0;
		public String getInfo(){
			return "这是jsp声明中定义的方法";
		}
	%>
	<%--这是jsp注释 --%>
	<!-- 这是html注释 -->
</body>
</html>

 

 

这是由first.jsp编译生成的first_jsp.java文件:

package org.apache.jsp;

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

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


		int count = 0;
		public String getInfo(){
			return "这是jsp声明中定义的方法";
		}
	
  private static final javax.servlet.jsp.JspFactory _jspxFactory =
          javax.servlet.jsp.JspFactory.getDefaultFactory();

  private static java.util.Map<java.lang.String,java.lang.Long> _jspx_dependants;

  private javax.el.ExpressionFactory _el_expressionfactory;
  private org.apache.tomcat.InstanceManager _jsp_instancemanager;

  public java.util.Map<java.lang.String,java.lang.Long> 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 javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {

    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("<!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=ISO-8859-1\">\r\n");
      out.write("<title>Insert title here</title>\r\n");
      out.write("</head>\r\n");
      out.write("<body>\r\n");
      out.write("\t");
      out.print(3.1415926 );
      out.write("\r\n");
      out.write("\t<br>\r\n");
      out.write("\t");

		//这是Java注释
		count = count + 1;
		out.println(count);
		out.println("<br>");
		String info = getInfo();
		out.println(info);
	
      out.write('\r');
      out.write('\n');
      out.write('	');
      out.write('\r');
      out.write('\n');
      out.write('	');
      out.write("\r\n");
      out.write("\t<!-- 这是html注释 -->\r\n");
      out.write("</body>\r\n");
      out.write("</html>");
    } catch (java.lang.Throwable t) {
      if (!(t instanceof javax.servlet.jsp.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);
        else throw new ServletException(t);
      }
    } finally {
      _jspxFactory.releasePageContext(_jspx_page_context);
    }
  }
}

 

 以下关于JSP基本语法的介绍均以以上2个文件为例。

 

一、JSP表达式

//Java表达式后面不能加“;”
<%=3.1415926  %>

 在<%=  %>中的java表达式的返回值被转换成字符串后,直接插入到JSP返回给客户端的静态页面中。

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {

   //......
   //......
    try {
      
      //......
      out.write("<body>\r\n");

      //java表达式被插入_jspxService(...),作为out.print(...)方法的参数
      out.print(3.1415926 );
      //......
      out.write("</body>\r\n");
      out.write("</html>");
    } catch (java.lang.Throwable t) {
      //......
  }

 从上述代码可以看出,<%=  %>中的java表达式相当于out.print(...)方法的参数(所以java表达式不能以“;”结尾)。

因为out.print(...)方法被插入了_jspxService(...)方法,所以JSP表达式也会被插入_jspxService(...)方法。

 

二、JSP声明

<%!
	int count = 0;
	public String getInfo(){
		return "这是jsp声明中定义的方法";
	}
%>

 

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

        //JSP声明被转换成Servlet类的成员变量和成员方法
	int count = 0;
	public String getInfo(){
		return "这是jsp声明中定义的方法";
	}
	
 

	public void _jspInit() {
        }

        public void _jspDestroy() {
        }

        public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {

      }
}

 从上述代码可以看出,JSP声明将会转换成Servlet的成员变量和成员方法。

 

由于JSP声明语法定义的变量和方法对应于Servlet类的成员变量和成员方法,所以JSP声明部分定义的变量和方法可以使用private 、public等访问控制符修饰,也可以使用static修饰,将其变成类属性和类方法。但是不能使用abstract修饰声明部分的方法,因为抽象方法将导致JSP对应的Servlet变成抽象类,从而导致无法实例化。

 

三、JSP脚本

<%
     //这是Java注释
     count = count + 1;
     out.println(count);
     out.println("<br>");
     String info = getInfo();
     out.println(info);
%>

 JSP脚本里可以包含任何可执行的java代码,这些代码必须满足java的语法规范(如每条语句必须使用“;”作为结束标记 )。

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {
    //... ...
    try {
        //... ...
        out.write("<body>\r\n");
      
        //... ...
	//JSP脚本被转换成_jspxService(...)方法中的可执行代码
	count = count + 1;
	out.println(count);
	out.println("<br>");
	String info = getInfo();
	out.println(info);
	//... ...
     
        out.write("</body>\r\n");

    } catch (java.lang.Throwable t) {
        //... ...
    }
    } finally {
         //... ...
    }
}

 从上述代码可以看出,JSP脚本将转换成Servlet里_jspxService(...)方法的可执行代码。这意味着在JSP脚本部分也可以声明变量,但这些变量只是_jspxService(...)方法的局部变量,局部变量是不能用static、private、public等修饰符修饰的。

 

注意:

1、一个JSP页面中可以在任何位置使用<%   %>插入java代码,<%   %>可以有任意多个。每一个<%   %>中的代码可以不完整,但是这个<%   %>中的内容和JSP页面中的一个或多个<%   %>中的内容组合起来必须是完整的。如下所示:

        <%
		for(int i = 0; i < 10; i++){
			out.print(i);
	%>
	<br>
	<%} %>
	<%
		int n = 10;
		if(n < 10){
	%>
	small
	<%
		}else if(n < 20){
	%>
	middle
	<%
		}else{
	%>
	large
	<%} %>

 

2、将一条完整的语句分成多个<%  %>时,建议使用{}将属于这些语句的子句括起来。

这是因为虽然从JSP代码中看时只是一条语句,但JSP编译器在转换时可能会生成多条java代码。

比如上面的if-else if-else语句,如下所示:

int n = 10;
if(n < 10){
	
      out.write("\r\n");
      out.write("\tsmall\r\n");
      out.write("\t");

}else if(n < 20){
	
      out.write("\r\n");
      out.write("\tmiddle\r\n");
      out.write("\t");

}else{
	
      out.write("\r\n");
      out.write("\tlarge\r\n");
      out.write("\t");
} 

 

 

四、JSP注释

//JSP注释
<%--      --%>

//Java注释,该注释只能用在JSP脚本和JSP声明中
/**/
//

//HTML注释
<!--        -->

 

public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
        throws java.io.IOException, javax.servlet.ServletException {

   

    try {

		//这是Java注释
		count = count + 1;
		out.println(count);
		out.println("<br>");
		String info = getInfo();
		out.println(info);
	
      
      out.write("\t<!-- 这是html注释 -->\r\n");
     

    } catch (java.lang.Throwable t) {
     
    } finally {
      
    }
}

 对于JSP注释,JSP编译器在处理JSP代码时,会忽略它。也就是说,JSP注释不会再由JSP生成的Servlet源代码中留下任何痕迹,该注释只是为了时JSP代码更容易理解而存在。

 

对于java注释,JSP编译器将java注释和java代码一同插入到由JSP生成的Servlet源代码中。

 

对于HTML注释,它将被当成JSP代码中的静态内容处理。JSP编译器将它们和其他JSP静态内容一起使用write方法输出到客户端。也就是说,这类注释对客户端来说是可见的。

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    韩顺平JSP学习笔记+源代码

    ### 韩顺平JSP学习笔记与源代码解析 #### J2EE的十三种技术(规范) 在韩顺平老师的教学笔记中,首先提到了J2EE平台下的十三种核心技术,这些技术对于理解JSP及其相关的Web开发环境至关重要。 1. **Java数据库...

    web学习笔记 —— jsp基础语法

    本文将深入探讨"Web学习笔记——jsp基础语法"这一主题,重点关注JSP(JavaServer Pages)的基础知识。JSP是Java平台上的动态网页技术,它允许开发者将HTML、XML或其他标记语言与Java代码结合,以创建交互式的Web应用...

    jsp学习笔记总结(收集)

    这份"jsp学习笔记"详细阐述了JSP的基本概念、语法、生命周期以及与其他技术的结合使用,对于初学者来说,是一份非常实用的学习资料。通过深入理解并实践其中的知识点,可以有效地提升在JSP领域的专业技能。

    林学良Jsp&Servlet学习笔记

    **林学良Jsp&Servlet学习笔记**: 这份学习资料可能是对JSP和Servlet基础知识的系统性讲解,涵盖了上述概念和原理,适合初学者入门。通过阅读这份笔记,你可以了解JSP和Servlet的基本语法、生命周期、以及如何将它们...

    JSP网络编程学习笔记源代码 part2

    第三篇为“JSP技术基础”,主要讲述JSP的基本语法和内建对象及JSP和Servlet的集成,JavaBean和表达式语言;第四篇为“数据库访问技术”,主要讲述JDBC技术及JSP和Servlet如何通过JDBC访问数据库,以及如何改进数据库...

    [JSP&Servlet;学习笔记(第2版)]

    **JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。

    JSP经典学习笔记(包含各种入门常用语法)

    本文介绍了JSP经典学习笔记。分享给大家供大家参考。具体如下: JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例–JSP页面有系统编译成Servlet,Servlet再负责响应用户请求。 1.JSP注释 &lt;&#37;–注释...

    jsp完整学习笔记(完整版)

    **JSP完整学习笔记概述** 本笔记是作者在专业培训学校学习JSP的总结,旨在为读者提供一个全面了解和掌握JavaServer Pages (JSP) 技术的资源。JSP是Java平台上的动态网页技术,它允许开发人员将静态HTML内容与动态...

    jsp/servlet个人学习笔记

    理解这些对象的基本用法是学习 JSP 的关键。 8. **站点配置** 在 `web.xml` 文件中,开发者可以配置 JSP 页面、Servlet、过滤器和监听器的行为,以及定义 URL 映射、错误处理等。它是整个 Web 应用的配置中心。 9...

    jsp笔记各种资源包

    【笔记.txt】文件可能包含了关于JSP的详细学习笔记,涵盖了基础概念、语法、生命周期、内置对象、EL(Expression Language)、JSTL(JavaServer Pages Standard Tag Library)以及MVC(Model-View-Controller)设计...

    韩顺平jsp九讲笔记

    这份笔记涵盖了JSP的基础知识、核心概念以及实际应用,旨在帮助学习者深入理解和掌握JSP编程。韩顺平老师在IT教育领域有着丰富的经验,他的讲解通常深入浅出,易于理解,深受学员喜爱。 1. **JSP概述**:JSP是Java...

    jsp学习笔记

    jsp学习笔记 jsp笔记是指关于jsp编程语言的...jsp学习笔记是一份详细的jsp学习笔记,涵盖了jsp的基础知识、jsp的隐式对象、jsp的生命周期、jsp的配置、jsp的安全机制等方面的知识点,是jsp开发人员的必备参考资料。

    jsp学习笔记,不错的入门级资料

    【描述】:这是一份在达内科技学习过程中编写的jsp学习笔记,旨在为初学者提供一个基础到深入的学习路径。笔记内容丰富,覆盖了jsp的基本概念、语法特性以及常用功能,包括但不限于基础语法知识,jsp内置对象的讲解...

    Servlet&JSP;学习笔记源代码

    这份"Servlet&JSP学习笔记源代码"是由林信良编著,提供了丰富的实例代码,旨在帮助学习者深入理解这两种技术。 Servlet是Java编程语言的一个接口,允许Java代码与HTTP服务器进行交互。它扩展了服务器的功能,使得...

    jsp学习笔记——初学者的选择

    【JSP学习笔记——初学者的选择】 JSP(JavaServer Pages)是JavaEE平台中用于构建动态网页的应用技术。作为初学者,理解JSP的基本概念和技术特性至关重要。 1. **为何选择JSP?** JSP的出现主要是为了解决...

    jsp学习笔记让JSP更简单

    总结来说,JSP学习笔记主要涵盖了JSP的基本概念、结构、指令、动作、内置对象、EL、JSTL以及它们在实际开发中的应用。通过深入理解和实践这些知识点,你将能够轻松驾驭JSP,构建出高效且易于维护的web应用。

    JSP自定义标签学习笔记

    本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际应用。 一、概述 1.1 使用简单标签机制 JSP自定义标签提供了类似HTML标签的语法结构,通过自定义标签,开发者可以封装复杂的Java代码,使得页面...

    jsp2.0 学习笔记+完整源码

    提供的"我的JSP学习笔记+源码"包含实际项目中的例子,可以帮助你理解JSP 2.0在实际开发中的应用。通过阅读和运行这些源码,你可以更直观地了解JSP 2.0的各个特性如何在实际场景中工作。 总之,这个资料包为JSP 2.0...

    JSP学习笔记(精简)

    ### JSP学习笔记精简版 #### 一、JSP简介 JSP(JavaServer Pages)是一种基于Java的服务器端动态网页技术标准。它通过在HTML文档中嵌入Java代码来实现动态页面的功能。与其他动态网页技术如ASP、PHP等相比,JSP具有...

    JSP 完全学习笔记 全

    本学习笔记全面涵盖了JSP的关键概念、核心语法、常用标签库以及在实际开发中遇到的问题和解决方案。 **一、JSP基础** JSP的基础知识包括页面结构、指令和脚本元素。页面结构包含HTML标签和JSP元素,如指令(page, ...

Global site tag (gtag.js) - Google Analytics