jsp基础
2016-06-13 23:06
337 查看
JSP(Java Server Page)和Servlet是Java EE规范的两个基本成员,JSP最终必须编译成Servlet才能运行,因此本质是一样的。
JSP是在HTML页面中嵌入Java代码(以Java语言为脚本语言)或使用各种JSP标签,从而可以动态的提供页面内容,JSP慢慢发展成单一的表现层技术,不再承担业务逻辑组件及持久层组件的责任,JSP开发WEB应用可以跨平台使用。
web应用的结构:(lib及classes文件夹都用于保存web应用所需要的Java类文件,区别是classes保存单个*.class文件,而lib保存打包后的JAR文件。web.xml文件称为配置描述符,从servlet 3.0开始WEB-INF下的web.xml文件不再是必须,但通常建议保留该配置文件)
对于Java Web应用,WEB-INF是一个特殊的文件夹,Web容器会包含该文件夹下的内容,客户端浏览器无法访问WEB-INF路径下的任何内容。在Servlet 2.5之前,Java Web 应用的绝大部分组件都通过web.xml文件来配置管理,从Servlet 3.0开始,也可以使用注解来配置管理Web组件。
test_jsp.java
JSP经过Tomcat编译后生成的java类主要包含如下三个方法:
JSP页面的工作原理:
JSP文件必须在JSP服务器内运行;JSP文件必须生成Servlet才能执行;每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet;JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。
get-application.jsp
web.xml
每个web应用只有一个ServletContext实例,在JSP页面中可以通过application内置对象访问该实例,而Servlet中则必须通过代码获取,由于application代表整个web应用,所以通常只把web应用的状态数据放入application中。
web.xml
requestTest.jsp
request.jsp
doRedirect.jsp
redirect-result.jsp
addCookie.jsp
readCookie.jsp
shop.jsp
processbuy.jsp
JSP是在HTML页面中嵌入Java代码(以Java语言为脚本语言)或使用各种JSP标签,从而可以动态的提供页面内容,JSP慢慢发展成单一的表现层技术,不再承担业务逻辑组件及持久层组件的责任,JSP开发WEB应用可以跨平台使用。
web应用的结构:(lib及classes文件夹都用于保存web应用所需要的Java类文件,区别是classes保存单个*.class文件,而lib保存打包后的JAR文件。web.xml文件称为配置描述符,从servlet 3.0开始WEB-INF下的web.xml文件不再是必须,但通常建议保留该配置文件)
对于Java Web应用,WEB-INF是一个特殊的文件夹,Web容器会包含该文件夹下的内容,客户端浏览器无法访问WEB-INF路径下的任何内容。在Servlet 2.5之前,Java Web 应用的绝大部分组件都通过web.xml文件来配置管理,从Servlet 3.0开始,也可以使用注解来配置管理Web组件。
web.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <!-- servlet 3.0规范中新增metadata-complete,属性值为true时 该web应用将不会加载注解配置的web组件(如servlet,filter及listener等)--> <!-- 配置web应用的首页列表 --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.xhtml</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
first.jsp
<%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>时间页面</title> </head> <body> <!-- JSP通过在标准的HTML页面中嵌入Java代码,其静态的部分无须Java程序控制,只有那些需要从数据库读取或需要动态生成的页面内容,才使用Java脚本控制 --> <!-- JSP页面的内容由如下两部分组成:静态部分(标准的HTML标签,静态的页面内容),动态部分(受Java程序控制的内容) --> <!-- <%%>之间的是java脚本,而不是静态内容,通过这种方式就可以把java代码嵌入html中,这就变成了动态的JSP页面,这种页面只有在web应用中才有效--> <!-- JSP的本质依然是servlet,每个jsp页面都是一个servlet实例(由Servlet容器生成对应的servlet,servlet再负责响应用户请求),jsp是servlet的一种简化 --> <!-- web应用中的每个jsp页面都会由servlet容器生成对应的servlet,对于tomcat而言,jsp页面生成的servlet放在work路径对应的web应用下 --> 欢迎学习Java Web知识,现在时间是: <%out.println(new java.util.Date()); %> </body> <p></html> </p>
test.jsp
<pre name="code" class="html"><%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>查看servlet</title> </head> <body> <%-- jsp注释格式 --%> <!-- html注释格式 --> <!-- jsp文件必须在jsp服务器内运行;jsp文件必须生成servlet才能执行;每个jsp页面的第一个访问者速度较慢,要等待编译为servlet --> <!-- jsp页面输送到客户端的是标准html页面 --> <!-- <font>规定文本的字体、字体尺寸、字体颜 --> <!-- <br>为换行符 --> <!-- Tomcat根据JSP页面生成对应servlet的java文件和class文件 --> <% for (int i = 0; i < 7; i++) { out.println("<font size='" + i + "'>"); %> 疯狂Java训练营(Wild Java Camp)</font> <br /> <% } %> </body> </html>
test_jsp.java
package org.apache.jsp; import javax.servlet.*; import javax.servlet.http.*; import javax.servlet.jsp.*; public final class test_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("\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=UTF-8\">\r\n"); out.write("<title>查看servlet</title>\r\n"); out.write("</head>\r\n"); out.write("<body>\r\n"); out.write("\r\n"); out.write("\t"); out.write("\r\n"); out.write("\t\r\n"); out.write("\t<!-- html注释格式 -->\r\n"); out.write("\t\r\n"); out.write("\t<!-- jsp文件必须在jsp服务器内运行;jsp文件必须生成servlet才能执行;每个jsp页面的第一个访问者速度较慢,要等待编译为servlet -->\r\n"); out.write("\t\r\n"); out.write("\t<!-- jsp页面输送到客户端的是标准html页面 -->\r\n"); out.write("\t\r\n"); out.write("\t<!-- <font>规定文本的字体、字体尺寸、字体颜 -->\r\n"); out.write("\t\r\n"); out.write("\t<!-- <br>为换行符 -->\r\n"); out.write("\t"); for (int i = 0; i < 7; i++) { out.println("<font size='" + i + "'>"); out.write("\r\n"); out.write("\t疯狂Java训练营(Wild Java Camp)</font>\r\n"); out.write("\t<br />\r\n"); out.write("\t"); } 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); } } }<span style="font-size:18px;"> </span>
JSP经过Tomcat编译后生成的java类主要包含如下三个方法:
JSP页面的工作原理:
JSP文件必须在JSP服务器内运行;JSP文件必须生成Servlet才能执行;每个JSP页面的第一个访问者速度很慢,因为必须等待JSP编译成Servlet;JSP页面的访问者无须安装任何客户端,甚至不需要可以运行Java的运行环境,因为JSP页面输送到客户端的是标准HTML页面。
declare.jsp
<span style="font-size:18px;"><%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>JSP声明</title> </head> <body> <!-- html注释格式 --> <%--jsp注释格式 --%> <%--jsp脚本(<% %>) --%> <%--jsp声明格式(<%! %>) --%> <%--jsp输出表达式值(<%= %>),最后不要有分号 --%> <!-- 下面是jsp声明部分:jsp页面的声明部分将转换成对应servlet的成员变量和成员方法--> <%-- JSP页面会被编译成一个servlet类,每个servlet在容器中只有一个实例,在JSP中声明的变量是成员变量,成员变量只在创建实例时初始化 --%> <%! //声明一个整型变量 public int count; //声明一个方法 public String info(){ return "加油!"; } %> <%out.println(count++);%> <br> 使用输出表达式输出变量值: <%=count++%> <br/> <%out.println(info());%> <br> 使用表达式输出方法返回值: <%=info()%> </body> </html></span>
jspInfo.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="error.jsp"%> <%@ page info="this is a jsp."%> <!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=UTF-8"> <title>测试page指令的info属性</title> </head> <%--JSP的编译指令是通知JSP引擎的消息,不直接生成输出,编译指令都有默认值(<%@ 编译指令名 属性名="属性值"%>)--%> <%--使用JSP指令可以将一个外部文件嵌入到当前JSP文件中,静态包含将完全包含被包含页面的代码,被包含页面的编译指令也包含进来 --%> <body> <!-- 输出info信息 --> <%=getServletInfo()%> <br/> <%@ include file="first.jsp" %> </body> </html>
application对象:
put-application.jsp<%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>application测试</title> </head> <body> <%!int i;%> <% application.setAttribute("counter", String.valueOf(++i)); %> <%=i%> </body> </html>
get-application.jsp
<pre name="code" class="html"><%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>从application中取值</title> </head> <body> <%=application.getAttribute("counter") %> <%--application可以使用getInitParameter(Name)方法来获取Web应用的配置参数,这些配置参数在web.xml文件中--%> <%--使用context-param元素配置,每个context-param元素配置一个参数 ,该元素下有两个子元素:param-name和param-value--%> <%=application.getInitParameter("driver")%> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <!-- Servlet 2.5之前,Java web应用的绝大部分组件都通过web.xml文件来配置管理,Servlet3.0规范可通过注解来配置管理 --> <!-- metadata-complete中属性值为true时,该web应用将不会加载annotation配置的web组件 --> <!-- 为该web应用配置参数 --> <context-param> <param-name>driver</param-name> <param-value>com.mysql.jdbc.Driver</param-value> </context-param> <!-- 配置web应用的首页列表 --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.xhtml</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
每个web应用只有一个ServletContext实例,在JSP页面中可以通过application内置对象访问该实例,而Servlet中则必须通过代码获取,由于application代表整个web应用,所以通常只把web应用的状态数据放入application中。
config对象:
configTest2.jsp<%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>测试config内置对象</title> </head> <!--config对象代表当前JSP配置信息,但JSP页面通常无须配置,因此也就不存在配置信息。该对象在JSP页面中比较少用,但在Servlet中则用处相对较大,因为Servlet需要在web.xml文件中进行配置 --> <!--如果希望JSP页面可以获取web.xml配置文件中的配置信息,则必须通过为该JSP配置的路径来访问该页面,只有这样访问JSP页面才会让配置参数起作用 --> <body> <%=config.getInitParameter("name") %> <%=config.getInitParameter("age") %> </body> </html>
web.xml
<?xml version="1.0" encoding="UTF-8"?> <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"> <!-- Servlet 2.5之前,Java web应用的绝大部分组件都通过web.xml文件来配置管理,Servlet3.0规范可通过注解来配置管理 --> <!-- metadata-complete中属性值为true时,该web应用将不会加载annotation配置的web组件 --> <!-- 配置jsp即配置servlet --> <servlet> <servlet-name>config</servlet-name> <jsp-file>/configTest2.jsp</jsp-file> <init-param> <param-name>name</param-name> <param-value>youku</param-value> </init-param> <init-param> <param-name>age</param-name> <param-value>40</param-value> </init-param> </servlet> <servlet-mapping> <servlet-name>config</servlet-name> <url-pattern>/config</url-pattern> </servlet-mapping> <!-- 配置web应用的首页列表 --> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.xhtml</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>
request对象:
requestTest.jsp
<%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>收集参数的表单页</title> </head> <body> <form id="form" method="post" action="request.jsp"> 用户名:<br> <input type="text" name="name"><hr/> 性别:<br/> 男:<input type="radio" name="gender" value="男"> 女:<input type="radio" name="gender" value="女"><hr/> 喜欢的颜色:<br/> 红:<input type="checkbox" name="color" value="红"> 绿:<input type="checkbox" name="color" value="绿"> 蓝:<input type="checkbox" name="color" value="蓝"> <br/>来自的国家: <select name="country"> <option value="中国">中国</option> <option value="日本">日本</option> <option value="美国">美国</option> </select><hr/> <input type="submit" value="提交"> <input type="reset" value="重置"> </form> </body> </html>
request.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ page import="java.util.*" %> <!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=UTF-8"> <title>获取请求头,请求参数</title> </head> <body> <% //获取所有请求头的名称 Enumeration<String> headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()){ String headerName = headerNames.nextElement(); out.println(headerName+"-->" + request.getHeader(headerName) + "<br/>"); } out.println("<hr/"); request.setCharacterEncoding("UTF-8"); String name = request.getParameter("name"); String gender = request.getParameter("gender"); String[] color = request.getParameterValues("color"); String country = request.getParameter("country"); %> 名字:<%=name%><hr/> 性别:<%=gender%><hr/> 喜欢的颜色:<%for(String c:color){ out.println(c+""); } %><hr/> 来自于:<%=country %><hr/> </body> </html>
response对象:
doRedirect.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%> <% out.println("===="); //重定向到redirect-result.jsp页面 response.sendRedirect("redirect-result.jsp"); %>
redirect-result.jsp
<%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>redirect目标页</title> </head> <body> <h3>被重定向的目标页</h3> name请求参数的值:<%=request.getParameter("name")%> </body> </html>
addCookie.jsp
<%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>增加cookie</title> </head> <body> <% String name = request.getParameter("name"); Cookie c = new Cookie("username", name); c.setMaxAge(24*3600); response.addCookie(c); %> </body> </html>
readCookie.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" errorPage="error.jsp"%> <!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=UTF-8"> <title>读取cookie</title> </head> <body> <% Cookie[] cArry = request.getCookies(); for(Cookie c:cArry){ if(c.getName().equals("username")){ out.println(c.getName() +":"+c.getValue()); } } out.println("查看所有cookie."); for(Cookie d:cArry){ out.println(d.getName()+":"+d.getValue()); } %> </body> </html>
session对象:
shop.jsp
<%@ page language="java" contentType="text/html; charset=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=UTF-8"> <title>选择物品购买</title> </head> <body> <form action="processbuy.jsp" method="post"> 书籍:<input type="checkbox" name="item" value="book"/><br/> 电脑:<input type="checkbox" name="item" value="computer"/><br/> 气车:<input type="checkbox" name="item" value="car"/><br/> <input type="submit" value="购买"/> </form> </body> </html>
processbuy.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%> <%@ page import="java.util.*" %> <% Map<String,Integer> itemMap = (Map<String,Integer>)session.getAttribute("itemMap"); if(null == itemMap){ itemMap = new HashMap<String,Integer>(); itemMap.put("书籍", 0); itemMap.put("电脑", 0); itemMap.put("汽车", 0); } String[] buys = request.getParameterValues("item"); for(String item:buys){ if(item.equals("book")){ int num1 = itemMap.get("书籍").intValue(); itemMap.put("书籍", num1+1); }else if(item.equals("computer")){ int num2 = itemMap.get("电脑").intValue(); itemMap.put("电脑", num2+1); }else if(item.equals("car")){ int num3 = itemMap.get("汽车").intValue(); itemMap.put("汽车", num3+1); } } session.setAttribute("itemMap", itemMap); %> <!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=UTF-8"> <title>new doc.</title> </head> <body> 您所购买的物品:<br/> 书籍:<%=itemMap.get("书籍") %>本<br/> 电脑:<%=itemMap.get("电脑") %>台<br/> 汽车:<%=itemMap.get("汽车") %>辆<br/> <p><a href="shop.jsp">再次购买</a></p> </body> </html>
相关文章推荐
- 【转】js对select动态添加和删除OPTION
- JavaScript中的匿名函数及函数的闭包
- JS模块化库seajs体验
- iOS js oc相互调用(JavaScriptCore)(二)
- json_encode() 转换空数组为对象输入
- iOS js oc相互调用(JavaScriptCore)
- js性能优化之函数缓存
- JSON的基础知识
- Ajax与JSON的一些总结
- Jsp中翻页功能实现
- JSP基础知识框架
- 深入解读JavaScript面向对象编程
- JSON字符串与JSON对象的区别,两者之间如何相互转换?
- javascript的进阶性学习——知识点巩固
- 深入理解JavaScript中的函数
- 跨域技术JSONP
- Javascript日期时间总结
- [Javascript] MetaProgramming: new.target
- JS JSON格式操作
- LeenCode——归并问题的处理( Merge Two Sorted Lists&&Given two sorted integer arrays nums1 and nums2, merge n)