概述
本文包含以下内容:
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学习笔记与源代码解析 #### J2EE的十三种技术(规范) 在韩顺平老师的教学笔记中,首先提到了J2EE平台下的十三种核心技术,这些技术对于理解JSP及其相关的Web开发环境至关重要。 1. **Java数据库...
本文将深入探讨"Web学习笔记——jsp基础语法"这一主题,重点关注JSP(JavaServer Pages)的基础知识。JSP是Java平台上的动态网页技术,它允许开发者将HTML、XML或其他标记语言与Java代码结合,以创建交互式的Web应用...
这份"jsp学习笔记"详细阐述了JSP的基本概念、语法、生命周期以及与其他技术的结合使用,对于初学者来说,是一份非常实用的学习资料。通过深入理解并实践其中的知识点,可以有效地提升在JSP领域的专业技能。
**林学良Jsp&Servlet学习笔记**: 这份学习资料可能是对JSP和Servlet基础知识的系统性讲解,涵盖了上述概念和原理,适合初学者入门。通过阅读这份笔记,你可以了解JSP和Servlet的基本语法、生命周期、以及如何将它们...
第三篇为“JSP技术基础”,主要讲述JSP的基本语法和内建对象及JSP和Servlet的集成,JavaBean和表达式语言;第四篇为“数据库访问技术”,主要讲述JDBC技术及JSP和Servlet如何通过JDBC访问数据库,以及如何改进数据库...
**JSP(Java Server Pages)与Servlet...这个**[JSP&Servlet学习笔记(第2版)]**会涵盖这些主题,并可能包括示例代码、最佳实践和常见问题解答,帮助读者全面掌握JSP和Servlet的使用技巧,进一步提升Java Web开发能力。
本文介绍了JSP经典学习笔记。分享给大家供大家参考。具体如下: JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例–JSP页面有系统编译成Servlet,Servlet再负责响应用户请求。 1.JSP注释 <%–注释...
**JSP完整学习笔记概述** 本笔记是作者在专业培训学校学习JSP的总结,旨在为读者提供一个全面了解和掌握JavaServer Pages (JSP) 技术的资源。JSP是Java平台上的动态网页技术,它允许开发人员将静态HTML内容与动态...
理解这些对象的基本用法是学习 JSP 的关键。 8. **站点配置** 在 `web.xml` 文件中,开发者可以配置 JSP 页面、Servlet、过滤器和监听器的行为,以及定义 URL 映射、错误处理等。它是整个 Web 应用的配置中心。 9...
【笔记.txt】文件可能包含了关于JSP的详细学习笔记,涵盖了基础概念、语法、生命周期、内置对象、EL(Expression Language)、JSTL(JavaServer Pages Standard Tag Library)以及MVC(Model-View-Controller)设计...
这份笔记涵盖了JSP的基础知识、核心概念以及实际应用,旨在帮助学习者深入理解和掌握JSP编程。韩顺平老师在IT教育领域有着丰富的经验,他的讲解通常深入浅出,易于理解,深受学员喜爱。 1. **JSP概述**:JSP是Java...
jsp学习笔记 jsp笔记是指关于jsp编程语言的...jsp学习笔记是一份详细的jsp学习笔记,涵盖了jsp的基础知识、jsp的隐式对象、jsp的生命周期、jsp的配置、jsp的安全机制等方面的知识点,是jsp开发人员的必备参考资料。
【描述】:这是一份在达内科技学习过程中编写的jsp学习笔记,旨在为初学者提供一个基础到深入的学习路径。笔记内容丰富,覆盖了jsp的基本概念、语法特性以及常用功能,包括但不限于基础语法知识,jsp内置对象的讲解...
这份"Servlet&JSP学习笔记源代码"是由林信良编著,提供了丰富的实例代码,旨在帮助学习者深入理解这两种技术。 Servlet是Java编程语言的一个接口,允许Java代码与HTTP服务器进行交互。它扩展了服务器的功能,使得...
【JSP学习笔记——初学者的选择】 JSP(JavaServer Pages)是JavaEE平台中用于构建动态网页的应用技术。作为初学者,理解JSP的基本概念和技术特性至关重要。 1. **为何选择JSP?** JSP的出现主要是为了解决...
总结来说,JSP学习笔记主要涵盖了JSP的基本概念、结构、指令、动作、内置对象、EL、JSTL以及它们在实际开发中的应用。通过深入理解和实践这些知识点,你将能够轻松驾驭JSP,构建出高效且易于维护的web应用。
本篇学习笔记将深入探讨JSP自定义标签的相关概念、创建方法以及实际应用。 一、概述 1.1 使用简单标签机制 JSP自定义标签提供了类似HTML标签的语法结构,通过自定义标签,开发者可以封装复杂的Java代码,使得页面...
提供的"我的JSP学习笔记+源码"包含实际项目中的例子,可以帮助你理解JSP 2.0在实际开发中的应用。通过阅读和运行这些源码,你可以更直观地了解JSP 2.0的各个特性如何在实际场景中工作。 总之,这个资料包为JSP 2.0...
### JSP学习笔记精简版 #### 一、JSP简介 JSP(JavaServer Pages)是一种基于Java的服务器端动态网页技术标准。它通过在HTML文档中嵌入Java代码来实现动态页面的功能。与其他动态网页技术如ASP、PHP等相比,JSP具有...
本学习笔记全面涵盖了JSP的关键概念、核心语法、常用标签库以及在实际开发中遇到的问题和解决方案。 **一、JSP基础** JSP的基础知识包括页面结构、指令和脚本元素。页面结构包含HTML标签和JSP元素,如指令(page, ...