#JSP JSP是Java Server Page,Java服务器页面。由Sun公司倡导,创建的动态网络技术标准。html页面中添加Java的程序段,并添加jsp的标记,从而造成jsp文件。JSP和Servlet同样是在服务端执行。一般返回客户端一个html文本。html
##JSP vs Servletjava
##JSP处理流程 Tomcat既是JSP容器也是Servlet容器,JSP处理过程和普通请求处理过程同样。程序员
##JSP基本语法 JSP主要包含JSP元素和模板数据两大类
JSP模板是指JSP引擎不处理的地方,也就是说JSP不进行处理,直接传送出去,例如Html页面等内容。
JSP元素是指JSP引擎处理的部分,必须符合JSP语法,不然致使编译错误。web
##JSP声明 主要是参数变量的声明express
<%! declaration; [declaration; ]+ ... %>
<%! int a,b,c; %>
##JSP表达式 表达式会被转化为String,而后插入到表达式出现的地方。表达式的值会被转化为String值。能够在文本行中使用表达式,而不须要管是不是html标签。apache
<%= 表达式 %>
<p>Today:<%= (new java.util.Date()).toLocaleString() %></p>
##JSP脚本缓存
<% 表达式 %>
<% out.println("Your IP address is " + request.getRemoteAddr()); %>
##JSP注释tomcat
<%-- 这里能够填写JSP注释 --%>
##JSP指令服务器
##JSP内置对象 page、pageContext、Exception是JSP特有的内置对象网络
对象 | 描述 |
---|---|
request | HttpServletRequest类的实例 |
response | HttpServletResponse类的实例 |
out | PrintWriter类的实例,用于把结束输出到网页上 |
session | HttpSession类的实例 |
application | ServletContext类的实例,与应用上下文有关 |
config | ServletConfig类的实例 |
page | 相似于Java类中的this关键字 |
pageContext | PageContext类的实例,提供对JSP页面全部对象及命令空间的访问 |
Exception | Exception类的对象,表明发生错误的JSP页面中对应的异常对象 |
##JSP实例 测试的hello.jsp,直接放置到webapp目录下
<%-- page指令:配置整个JSP页面的一些属性,脚本语言Java,contentType,页面编码--%> <%@ page language="java" contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1"%> <!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> <!-- this is jsp comment --> <%-- 声明name --%> <%!String name; %> <%-- JSP表达式 --%> request uri is <%=request.getRequestURI() %> <br/> <%-- JSP脚本:输出多条Java语句 --%> <% name = "abc"; out.println("name is " + name); %> </body> </html>
注意:这里<!-- xxx -->
是html的注释,并非JSP的注释,正确的JSP注释为<%-- xxx --%>
,JSP的注释不会输出在html静态页面中。
访问URL:http://localhost:8080/web_project_template/hello.jsp
,获得如下结果:
###查看生成的Servlet存放位置 注意:这里须要实际部署到Tomcat中,Maven部署如何查看不得而知
这里咱们在使用Maven的tomcat7:exec-war-only时发生异常,
咱们在目录 apache-tomcat-x.0.xx/work/Catalina/localhost/web_project_example/org/apache/jsp
目录下看到了hello.jsp.java
和hello.jsp.class
这个文件是JSP容器根据JSP页面主动生成的。
#附录 ##JSP容器所生成的hello.jsp的对应的java文件内容
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.70 * Generated at: 2016-09-11 15:27:33 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 hello_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { String name; 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 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 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 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=ISO-8859-1"); 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("<!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("<!-- this is jsp comment -->\r\n"); out.write('\r'); out.write('\n'); out.write('\r'); out.write('\n'); out.write("\r\n"); out.write("request uri is "); out.print(request.getRequestURI() ); out.write("\r\n"); out.write("<br/>\r\n"); out.write('\r'); out.write('\n'); name = "abc"; out.println("name is " + name); 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); } } }