JSP--Java Server Pages
2017-07-31 15:33
393 查看
拥有servlet的特性和优点(本身就是一个servlet)
直接在HTML中内嵌jsp代码
jsp程序由JSP Engine先将其转换成Servlet代码,接着将他编译成类文件载入执行
只有当客户端第一次请求JSP时,才需要将其转换、编译
优点:
优良的性能
平台无关性:与操作系统、web服务器无关
可扩展性:tag的扩展机制、简化页面开发
三种基本语法:JSP传统语法、JSTL、JSF、其他taglib(如struts)
JSP传统语法:
1、声明:Declaration:<%! %>成员变量,只有一个,只声明一次,可以声明方法
注释:<%!-- %>客户端可以看到,属于html注释
2、Scriptlet : <%程序代码区 %> 局部变量(方法内部),每次访问都重新声明一次,不可以声明方法
可以放入任何Java代码
注释:<%-- --%><%// %> <%/* */ %>
3、表达式:<%= %> 等号后面必须是字符串变量或者被转换成字符串的表达式,不需要以;结束,只有一行
jsp里面request和session都可以直接用。
4、Directive:编译指令:相当于在编译期间执行的命令
<%@Directive 属性=“属性值” %>
常见Directive:page:指明与JSP的沟通方式举例:errorPage:相当于import语句 ;
include:将特定的JSP或HTML包含进来再编译运行 <%@include file=“fileURL”%>
限制:不能向fileURL里面传参数
5、Action:动作命令:在运行期间的命令
常见的命令:
JSP:include:用于动态包含JSP程序或HTML文件等,除非这个指令被执行到,否则他是不会被Tomcat等JSP Engine编译。
格式:
和include编译指令的区别:include编译指令是在jsp程序的转换时期就将file属性指定的程序内容嵌入,然后再编译执行;而include指令在转换期间不会被编译,只有在客户端请求时期如果被执行到才会被动态编译嵌入。include不能带参数,而<jsp:include可以
JSP:forward:用于将一个jsp直接跳转到page所指定的jsp程序或者servlet中处理。
格式:
<jsp:forward>与response.sendRedirect的区别: 见:http://blog.csdn.net/anxinliu2011/article/details/7515668
jsp:useBean:用它可以在JSP中使用定义好的Bean。
Bean的基本要求:必须要有一个不带参数的构造函数,Bean类不允许直接访问实例变量,变量名称必须小写,通过getter和setter来读写变量,并且将对应的变量首字母大写。不要使用裸体类,放到包里面。
id:对象实例名称
scope:bean的作用范围,默认为page,对整个jsp页面有效
class:bean类名称
type:bean实例类型,可以是本类,父类,或实现的接口,默认本类
scope各项参数的意义:
page:默认,仅涵盖使用JavaBean的页面
request:有效范围限于使用JavaBean的请求
session:有效范围在用户整个连接过程中
application:有效范围涵盖整个程序(网站)
jsp:setProperty
jsp:getProperty
hello world示例:D:\Tomcat 9.0\webapps\LeonTest
对应生成的servlet:D:\Tomcat 9.0\work\Catalina\localhost\LeonTest\org\apache\jsp
直接在HTML中内嵌jsp代码
jsp程序由JSP Engine先将其转换成Servlet代码,接着将他编译成类文件载入执行
只有当客户端第一次请求JSP时,才需要将其转换、编译
优点:
优良的性能
平台无关性:与操作系统、web服务器无关
可扩展性:tag的扩展机制、简化页面开发
三种基本语法:JSP传统语法、JSTL、JSF、其他taglib(如struts)
JSP传统语法:
1、声明:Declaration:<%! %>成员变量,只有一个,只声明一次,可以声明方法
注释:<%!-- %>客户端可以看到,属于html注释
2、Scriptlet : <%程序代码区 %> 局部变量(方法内部),每次访问都重新声明一次,不可以声明方法
可以放入任何Java代码
注释:<%-- --%><%// %> <%/* */ %>
3、表达式:<%= %> 等号后面必须是字符串变量或者被转换成字符串的表达式,不需要以;结束,只有一行
jsp里面request和session都可以直接用。
4、Directive:编译指令:相当于在编译期间执行的命令
<%@Directive 属性=“属性值” %>
常见Directive:page:指明与JSP的沟通方式举例:errorPage:相当于import语句 ;
<%@page contentType="text/html; charset=UTF-8"%> <%@page errorPage=“XXX.jsp”%>如果当前页面出错,则显示XXX.jsp页面 <%@page isErrorPage="true/false"%>XXX.jsp要写true
include:将特定的JSP或HTML包含进来再编译运行 <%@include file=“fileURL”%>
限制:不能向fileURL里面传参数
5、Action:动作命令:在运行期间的命令
常见的命令:
JSP:include:用于动态包含JSP程序或HTML文件等,除非这个指令被执行到,否则他是不会被Tomcat等JSP Engine编译。
格式:
<jsp:include page="URLSpec" flush="true" /> <jsp:include page="URLSpec" flush="true" > <jsp:param name="ParamName" value="paramValue"/> </jsp:include>jsp:param用来设定include文件时的参数和对应的值
和include编译指令的区别:include编译指令是在jsp程序的转换时期就将file属性指定的程序内容嵌入,然后再编译执行;而include指令在转换期间不会被编译,只有在客户端请求时期如果被执行到才会被动态编译嵌入。include不能带参数,而<jsp:include可以
JSP:forward:用于将一个jsp直接跳转到page所指定的jsp程序或者servlet中处理。
格式:
<jsp:forward page="urlSpec" flush="true"/> <jsp:forward page="urlSpec"> <jsp:param name="paramName" value="paramValue"/> </jsp:forward>jsp:param用来设定参数和对应的值
<jsp:forward>与response.sendRedirect的区别: 见:http://blog.csdn.net/anxinliu2011/article/details/7515668
jsp:useBean:用它可以在JSP中使用定义好的Bean。
Bean的基本要求:必须要有一个不带参数的构造函数,Bean类不允许直接访问实例变量,变量名称必须小写,通过getter和setter来读写变量,并且将对应的变量首字母大写。不要使用裸体类,放到包里面。
<jsp:useBean id="beanName scope="page|request|session|application" class="package.BeanClass type="typeName"/> <jsp:useBean> <jsp:setProperty...> <jsp:getProperty...> </jsp:useBean>
<jsp:useBean id="aaa" class="bean.CounterBean"> </jsp:useBean> 相当于 <% CounterBean aaa = new CounterBean(); %>useBean各项参数:
id:对象实例名称
scope:bean的作用范围,默认为page,对整个jsp页面有效
class:bean类名称
type:bean实例类型,可以是本类,父类,或实现的接口,默认本类
scope各项参数的意义:
page:默认,仅涵盖使用JavaBean的页面
request:有效范围限于使用JavaBean的请求
session:有效范围在用户整个连接过程中
application:有效范围涵盖整个程序(网站)
jsp:setProperty
jsp:getProperty
hello world示例:D:\Tomcat 9.0\webapps\LeonTest
<html> <head> <title>HelloWorldJSP</title> </head> <body> <% out.println("HelloWorld!<br/>"); out.println(new java.util.Date()); %> </body> </html>
对应生成的servlet:D:\Tomcat 9.0\work\Catalina\localhost\LeonTest\org\apache\jsp
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/9.0.0.M20 * Generated at: 2017-07-31 07:28:59 UTC * Note: The last modified time of this file was set to * the last modified time of the source file after * generation to assist with modification tracking. */ package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class helloworld_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent, org.apache.jasper.runtime.JspSourceImports { 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 static final java.util.Set<java.lang.String> _jspx_imports_packages; private static final java.util.Set<java.lang.String> _jspx_imports_classes; static { _jspx_imports_packages = new java.util.HashSet<>(); _jspx_imports_packages.add("javax.servlet"); _jspx_imports_packages.add("javax.servlet.http"); _jspx_imports_packages.add("javax.servlet.jsp"); _jspx_imports_classes = null; } private volatile javax.el.ExpressionFactory _el_expressionfactory; private volatile org.apache.tomcat.InstanceManager _jsp_instancemanager; public java.util.Map<java.lang.String,java.lang.Long> getDependants() { return _jspx_dependants; } public java.util.Set<java.lang.String> getPackageImports() { return _jspx_imports_packages; } public java.util.Set<java.lang.String> getClassImports() { return _jspx_imports_classes; } public javax.el.ExpressionFactory _jsp_getExpressionFactory() { if (_el_expressionfactory == null) { synchronized (this) { if (_el_expressionfactory == null) { _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory(); } } } return _el_expressionfactory; } public org.apache.tomcat.InstanceManager _jsp_getInstanceManager() { if (_jsp_instancemanager == null) { synchronized (this) { if (_jsp_instancemanager == null) { _jsp_instancemanager = org.apache.jasper.runtime.InstanceManagerFactory.getInstanceManager(getServletConfig()); } } } return _jsp_instancemanager; } 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 { final java.lang.String _jspx_method = request.getMethod(); if (!"GET".equals(_jspx_method) && !"POST".equals(_jspx_method) && !"HEAD".equals(_jspx_method) && !javax.servlet.DispatcherType.ERROR.equals(request.getDispatcherType())) { response.sendError(HttpServletResponse.SC_METHOD_NOT_ALLOWED, "JSPs only permit GET POST or HEAD"); 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"); 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("<html>\r\n"); out.write(" <head>\r\n"); out.write(" <title>HelloWorldJSP</title>\r\n"); out.write(" </head>\r\n"); out.write(" <body>\r\n"); out.write(" "); out.println("HelloWorld!<br/>"); out.println(new java.util.Date()); out.write("\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 { if (response.isCommitted()) { out.flush(); } else { 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); } } }
相关文章推荐
- JavaServer Pages(JSP)和微软Active Server Pages技术比较
- JSP-Java Server Pages(Java服务器页面)<二>
- JSP 2.0 真是BT阿!不过看起来挺方便的.(Developing Web Applications With JavaServer Pages 2.0)
- JSP(Java Server Pages)总结
- Servlet、JavaServer Pages(JSP) 技术
- JSP--Java server Pages
- JSP——Java Server Pages(java服务器页面)
- JSP(Java Server Pages)动态网页开发技术1
- Java Server Pages(JSP)概述
- JSP简介(java server pages)
- JSP-- Java Server Pages 笔记
- JSP——Java Server Pages
- JSP(JavaServer Pages)
- JSP(Java Server Pages)内置对象
- JSP-Java Server Pages(Java服务器页面)<一>
- JSP(Java Server Pages)
- js入门(js(JavaScript)和jsp(Java Server Pages)的区别)
- jsp(Java Server Pages)和js(JavaScript)的区别:
- 什么是JSP(JavaServer Pages)技术?
- 什么是JSP(JavaServer Pages)技术?