java web开发学习笔记。
JSP与 PHP、ASP、ASP.NET 等语言相似,运行在服务端的语言。html
JSP(全称Java Server Pages)是由 Sun Microsystems 公司倡导和许多公司参与共同建立的一种使软件开发者能够响应客户端请求,而动态生成 HTML、XML 或其余格式文档的Web网页的技术标准。java
JSP 技术是以 Java 语言做为脚本语言的,JSP 网页为整个服务器端的 Java 库单元提供了一个接口来服务于HTTP的应用程序。web
JSP文件后缀名为 *.jsp
。express
JSP开发的WEB应用能够跨平台使用,既能够运行在 Linux 上也能运行在 Windows 上。apache
JSP是一种Java servlet,
主要用于实现Java web应用程序的用户界面部分
。网页开发者们经过结合HTML代码、XHTML代码、XML元素以及嵌入JSP操做和命令来编写JSP。
Java学习路线图:tomcat
Tomcat目录文件安全
WEB-INF
classes 目录下为生成的字节码文件
lib 目录下为jar包服务器
Tomcat安装目录session
➜ tomcat pwd /WEB/java/tomcat
启动Tomcat命令:app
➜ sudo sh ./bin/startup.sh
web.xml 配置默认欢迎文件:
<?xml version="1.0" encoding="ISO-8859-1"?> <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0" metadata-complete="true"> <welcome-file-list> <welcome-file>/index.jsp</welcome-file> </welcome-file-list> </web-app>
如例:index.jsp
<%-- Created by IntelliJ IDEA. User: kaiyiwang Date: 18/3/5 Time: 00:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> $END$ </body> </html>
// html注释 <!-- HTML 注释,页面不显示,在客户端代码中可见 --> // jsp 注释 <%-- jsp 注释,页面不显示,在客户端代码中也不可见 --%> <% // 单行注释 /* 多行注释 */ %>
在jsp脚本中执行的代码
语法:
<% Java 代码 %>
例子:
<%-- Created by IntelliJ IDEA. User: kaiyiwang Date: 18/3/5 Time: 00:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>$Title$</title> </head> <body> <% // 单行注释 /* 多行注释 */ out.println("这里是脚本代码测试"); %> </body> </html>
在jsp页面中声明变量或方法
语法:
<%! Java代码 %>
<body> <%! String name = "张学友"; // 声明一个字符串变量 /** * 声明一个返回整型值的函数 * @param x * @param y * @return */ int add(int x, int y) { return x + y; } %> <% // 单行注释 /* 多行注释 */ out.println("这里是脚本代码测试,哈哈"); out.println(name); int sum = add(2, 3); out.println(sum); %> </body>
一个JSP表达式中包含的脚本语言表达式,先被转化成String,而后插入到表达式出现的地方。
因为表达式的值会被转化成String,因此您能够在一个文本行中使用表达式而不用去管它是不是HTML标签。
表达式元素中能够包含任何符合Java语言规范的表达式,可是不能使用分号来结束表达式。
在JSP页面中执行的表达式
语法:
<%=表达式 %> // 注意:表达式不以分号结束
示例:
<body> <%! String name = "张学友"; // 声明一个字符串变量 /** * 声明一个返回整型值的函数 * @param x * @param y * @return */ int add(int x, int y) { return x + y; } %> <% // 单行注释 /* 多行注释 */ out.println("这里是脚本代码测试,哈哈"); out.println(name); int sum = add(2, 3); out.println(sum); %> <br/> 你好,<%=name %><br/> x+y=<%=add(1, 10)%> </body>
问答题:
当用户第一次请求一个jsp页面时,首先被执行的方法是( )
:
答案选A。
解析:
当用户第一次请求一个jsp页面时,首先被执行的方法是 构造方法。
就是转换为class文件后,他会建立一个Servlet的实例,而后调用Servlet的构造方法,再调用jspInit()方法
(1)JSP引擎先把该JSP文件转换成一个Java源文件(Servlet),在转换时若是发现JSP文件有任何语法错误,转换过程将中断,并向服务端和客户端输出出错信息。
(2)若是转换成功,JSP引擎用javac把该Java源文件编译成相应的class文件。
(3)建立一个该Servlet(JSP页面的转换结果)的实例,该Servlet的jspInit()方法被执行,jspInit()方法在Servlet的生命周期中只被执行一次。
分别使用表达式和脚本实现打印九九乘法表
示例:
<%-- Created by IntelliJ IDEA. User: kaiyiwang Date: 18/3/5 Time: 00:35 To change this template use File | Settings | File Templates. --%> <%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <title>打印九九乘法表</title> </head> <body> <%! /** * 打印九九乘法表 * @return */ String printMultiTable() { String s = ""; for(int i=1; i <= 9; i++) { for(int j=1; j <= i; j++) { s += i + "*" + j + "=" + (i * j) + " "; } s += "<br/>"; } return s; } /** * JSP内置out对象,使用脚本方式调用,打印九九乘法表 * * @param out */ void printMultiTable2(JspWriter out) throws Exception { for(int i=1; i <= 9; i++) { for(int j=1; j <= i; j++) { out.println(i + "*" + j + "=" + (i * j) + " "); } out.println("<br/>"); } } %> <span>表达式打印</span> <%=printMultiTable() %> <br/> <span>脚本打印,注意函数调用后边有分号 </span> <% printMultiTable2(out); %> </body> </html>
打印结果:
1*1=1 2*1=2 2*2=4 3*1=3 3*2=6 3*3=9 4*1=4 4*2=8 4*3=12 4*4=16 5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
JSP内置对象又称为隐式对象,是JSP容器为每一个页面提供的Java对象,开发者能够直接使用它们而不用显式声明
。JSP隐式对象也被称为预约义变量
。
JSP所支持的九大隐式对象:
JSP内置对象是 Web 容器建立的一组对象,不适用new关键在建立就可使用的内置对象。
<% int[] value = {60, 20, 25}; for(int i:value){ out.println(i); } %>
JSP的本质是Servlet,当用户向指定 Servlet 发送请求时,Servlet利用输出流动态生成 HTML 页面,包括每个静态的 HTML 标签和全部在HTML页面中出现的内容。
示例代码:
http://localhost:8080/webDemo/index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %> <html> <head> <meta charset="UTF-8"> <title>个人第一个JSP页面</title> </head> <body> <h1>欢迎你们访问个人第一个JSP页面。</h1> <!-- 下面是Java 脚本 --> <% for(int i = 0; i < 5; i++) { // out.println("<font size='" + i + "'>"); // out.println(i); %> JSP 原理分析</font><br/> <%}%> </body> </html>
输出结果:
从表面上看,JSP 页面已经不须要 Java 类,
彷佛彻底脱离了 Java 面向对象的特征
。事实上,JSP 的本质依然是 Servlet(一个特殊的JAVA类),每一个JSP 页面就是一个 Servlet 实例-JSP页面由系统编译成 Servlet,Servlet再负责响应用户的请求。对于Tomcat而言,JSP 页面生成的 Servlet 放在 work 路径对应的 Web 应用下。
当启动 Tomcat 以后,能够在 Tomcat 的 work/Catalina/localhost/webDemo/org/apache/jsp
目录下找到以下文件(本web应用名为 webDemo, 上面 JSP 页的名为 index.jsp):index_jsp.java
和 index_jsp.class
。
这两个文件都是由 Tomcat 生成的, Tomcat 根据 JSP 页面生成对应 Servlet 的 Java 文件和 class 文件。
下面是 index_jsp.java
文件的源代码,这是一个特殊的 Java 类,是一个 Servlet 类。index_jsp.java
/* * Generated by the Jasper component of Apache Tomcat * Version: Apache Tomcat/7.0.73 * Generated at: 2018-04-15 16:46:57 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 index_jsp extends org.apache.jasper.runtime.HttpJspBase implements org.apache.jasper.runtime.JspSourceDependent { 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=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("\n"); out.write("<html>\n"); out.write("<head>\n"); out.write("\t <meta charset=\"UTF-8\">\n"); out.write("\t<title>个人第一个JSP页面</title>\n"); out.write("</head>\n"); out.write("<body>\n"); out.write("<h1>欢迎你们访问个人第一个JSP页面。</h1>\n"); out.write("\n"); out.write("<!-- 下面是Java 脚本 -->\n"); for(int i = 0; i < 5; i++) { // out.println("<font size='" + i + "'>"); // out.println(i); out.write("\n"); out.write("JSP 原理分析</font><br/>\n"); } out.write("\n"); out.write("\n"); out.write("\n"); out.write("</body>\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); } } }
相关文章:Java Web基础学习