1.EL表达式

1.1 简介

EL表达式替代jsp表达式。因为开发jsp页面的时候遵守原则:在jsp页面中尽量少些甚至不写java代码。

EL表达式作用:向浏览器输出域对象中的变量或表达式计算的结果

基本语法: ${变量或表达式}    代替<%=变量或表达式%>

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6.  
  7. <title>EL基础语法</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12.  
  13. <%
  14. String name = "eric";
  15. //把变量放入域对象中
  16. //pageContext.setAttribute("name", name);
  17. pageContext.setAttribute("name", name, PageContext.REQUEST_SCOPE);
  18. %>
  19. <%=name%>
  20. <br /> EL表达式:${name}
  21. <%--
  22. 1)EL从四个域中自动搜素
  23. ${name} 等价于: <%=pageContext.findAttribute("name")%>
  24. --%>
  25.  
  26. <%--
  27. 2)EL从指定域中获取
  28. pageScope: page
  29. requestScope: request
  30. sessionScope: session
  31. applicationScope: application
  32. --%>
  33. 指定域获取的EL: ${pageScope.name }
  34.  
  35. </body>
  36. </html>

1.2 EL获取不同类型的数据

普通字符串

普通的对象

数组或List集合

Map集合

  1. <%@ page language="java" import="java.util.*,cn.jxufe.entity.*"
  2. pageEncoding="UTF-8"%>
  3.  
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7.  
  8. <title>EL获取不同类型的数据</title>
  9.  
  10. </head>
  11.  
  12. <body>
  13.  
  14. <%--
  15. 1)普通的字符串
  16. --%>
  17. <%
  18. String email = "zhangsan@qq.com";
  19. //一定要把数据放入域中
  20. pageContext.setAttribute("email", email);
  21. %>
  22. 普通字符串: ${email }
  23. <hr />
  24.  
  25. 2)普通的对象 EL表达式的属性表示调用对象的getXX方法.例如 student.name 调用了Stduent对象的getName()方法
  26. --%>
  27. <%
  28. Student student = new Student("eric", "123456");
  29. pageContext.setAttribute("student", student);
  30. %>
  31. <br /> 普通的对象: ${student}
  32. <br /> 对象的属性: ${student.name1 } - ${student.password }
  33. <hr />
  34. <%--
  35. 3)数组或List集合
  36. --%>
  37. <%
  38. //数组
  39. Student[] stus = new Student[3];
  40. stus[0] = new Student("jacky", "123456");
  41. stus[1] = new Student("rose", "123456");
  42. stus[2] = new Student("lucy", "123456");
  43. pageContext.setAttribute("stus", stus);
  44. //List
  45. List<Student> list = new ArrayList<Student>();
  46. list.add(new Student("eric", "123456"));
  47. list.add(new Student("lily", "123456"));
  48. list.add(new Student("maxwell", "123456"));
  49. pageContext.setAttribute("list", list);
  50. %>
  51. <br /> 数组:
  52. <br /> ${stus[0].name1 } - ${stus[0].password }
  53. <br /> ${stus[1].name1 } - ${stus[1].password }
  54. <br /> ${stus[2].name1 } - ${stus[2].password }
  55. <br />
  56. <br /> List集合
  57. <br /> ${list[0].name1 } - ${list[0].password }
  58. <br /> ${list[1].name1 } - ${list[1].password }
  59. <br /> ${list[2].name1 } - ${list[2].password }
  60. <hr />
  61. 4) Map集合 --%>
  62. <%
  63. Map<String, Student> map = new HashMap<String, Student>();
  64. map.put("001", new Student("eric", "123456"));
  65. map.put("002", new Student("jacky", "123456"));
  66. map.put("003", new Student("rose", "123456"));
  67. pageContext.setAttribute("map", map);
  68. %>
  69. Map集合:
  70. <br /> ${map['001'].name1 } - ${map['001'].password }
  71. <br /> ${map['002'].name1 } - ${map['002'].password }
  72. <br /> ${map['003'].name1 } - ${map['003'].password }
  73. <br />
  74. </body>
  75. </html>

1.3 EL执行表达式

算术表达式

比较表达式

逻辑表达式

判空表达式

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6.  
  7. <title>EL执行表达式</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12. <%--
  13. 1)算术表达式: + - * /
  14.  
  15. --%>
  16. <%
  17. int a = 10;
  18. int b = 5;
  19. pageContext.setAttribute("a", a);
  20. pageContext.setAttribute("b", b);
  21. %>
  22. ${a+b }
  23. <br /> ${a-b }
  24. <br /> ${a*b }
  25. <br /> ${a/b }
  26. <hr />
  27.  
  28. <%--
  29. 2)比较表达式: > < >= <= ==
  30. --%>
  31. ${a>b }
  32. <br /> ${a==b }
  33. <br />
  34.  
  35. <hr />
  36. <%--
  37. 3)逻辑表达式: && (与) || (或) !(非)
  38. --%>
  39. ${true&&true }
  40. <br /> ${true||false }
  41. <br /> ${!true }
  42. <br /> ${!(a>b) }
  43.  
  44. <hr />
  45. <%--
  46. 4)判空表达式 empty
  47. null ==null
  48. 空字符串: ==""
  49. --%>
  50. <%
  51. //String name1 = null;
  52. String name1 = "";
  53. pageContext.setAttribute("name1", name1);
  54. %>
  55. null: ${name1==null }
  56. <br /> 空字符串: ${name1=="" }
  57. <br /> null或空字符串: ${name1==null || name1=="" }
  58. <br /> null或空字符串:${empty name1}
  59.  
  60. </body>
  61. </html>

1.4 EL的11个内置对象

pageContext

pageScope

requestScope

sessionScope

applicatinoScope

param

paramValues

header

headerValues

cookie

initParam

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6.  
  7. <title>EL的11个内置对象</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12. <%--
  13. 1)pageContext 等价于 jsppageContext内置对象
  14. --%>
  15. <%--获取上下文路径 --%>
  16. ${pageContext.request.contextPath }
  17. <hr />
  18. <%--
  19. pageScope
  20. requestScope
  21. sessionScope
  22. applicatinoScope
  23. 从指定的域中获取数据
  24. --%>
  25.  
  26. <%--
  27. 2)param 获取参数
  28. 注意: param返回所有参数Map集合
  29. --%>
  30. <%=request.getParameter("name")%><br />
  31. <br /> ${param['name']}
  32. <%=request.getParameterValues("name")[1]%>
  33. <br /> ${paramValues['name'][0] }-${paramValues['name'][1] }
  34. <hr />
  35. <%--
  36. 3) header :获取请求头
  37. headerValues
  38. --%>
  39. <%=request.getHeader("host")%><br />
  40. <%=request.getHeaders("host").nextElement()%><br /> ${header['host'] }
  41. <br /> ${headerValues['host'][0] }
  42. <%--
  43. 4)cookie: 获取cookie
  44.  
  45. --%>
  46. <hr />
  47. <%=request.getCookies()[0].getValue()%><br />
  48. ${cookie['JSESSIONID'].name } - ${cookie['JSESSIONID'].value }
  49. <hr />
  50. <%--
  51. 5) initParam: 获取全局参数
  52. --%>
  53. <%=application.getInitParameter("AAA")%><br /> ${initParam['AAA'] }
  54.  
  55. </body>
  56. </html>

2.Jsp标签

2.1 简介

EL表达式可以替换jsp表达式,但是EL表达式局限:

不能条件判断,不能赋值,不能迭代。

jsp标签替代jsp脚本,完成条件判断,赋值,迭代等等功能。

2.2 Jsp标签分类

1)jsp内置标签(动作标签): 使用的时候不需要导入标签库

2)jstl标签(标准标签): 使用的时候都需要导入标签库

3)自定义标签:使用的时候都需要导入标签库

2.3 动作标签

<jsp:forward/>   转发标签

<jsp:param/>    参数标签

<jsp:include/>    包含标签

注意:

包含标签的原理是包含与被包含的页面单独翻译成不同的java文件,然后再运行时合并在一起。                                                        (先翻译再合并,动态包含)

静态包含 vs  动态包含

静态包含: 先合并再翻译。不能携带参数

动态包含: 先翻译再合并。携带参数

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6.  
  7. <title>动作标签</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12.  
  13. <%--
  14. 1)<jspfoward/> 转发
  15. --%>
  16. <%
  17. //request.getRequestDispatcher("/01el3.jsp").forward(request, response);
  18. %>
  19. <%-- <jsp:forward page="/01el3.jsp"></jsp:forward> --%>
  20.  
  21. <%--注意: 一定要使用jsp注释来注释标签
  22. <jsp:forward page="/02action2.jsp">
  23. <jsp:param value="eric" name="name" />
  24. <jsp:param value="jacky" name="name" />
  25. </jsp:forward>
  26. --%>
  27. <%--
  28. 3 <jsp:include/> 动态包含。可以携带参数给被包含的页面,但是静态包含不能携带参数给被包含的页面
  29. --%>
  30. <jsp:include page="/common/header.jsp">
  31. <jsp:param value="eric" name="name" />
  32. </jsp:include>
  33. 主页内容
  34.  
  35. </body>
  36. </html>
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6.  
  7. <title>My JSP 'header.jsp' starting page</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12.  
  13. 通用的头部页面<br/> 接收参数: ${param['name'] }
  14. <hr />
  15.  
  16. </body>
  17. </html>
  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2.  
  3. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  4. <html>
  5. <head>
  6.  
  7. <title>动作标签</title>
  8.  
  9. </head>
  10.  
  11. <body>
  12. 接收参数 : ${paramValues['name'][0] } -${paramValues['name'][1] }
  13. </body>
  14. </html>

2.4 JSTL标签

jstl标签,java standard tag libarary java标准标签库。

特点: 在使用jstl标签时需要导入标签库

jstl标签库分类:

核心标签库(重要)

国际化标签库(fmt)

EL函数库(fn)

SQL标签库(sql)

XML标签库(x)

2.5 使用JSTL标签

1)导入jstl的支持jar包,在java5.0之后jstl已经是属于5.0的支持包里面。

2)使用jsp页面,需要在jsp的顶部使用taglib指令导入需要的标签库

3)使用标签:

<c:set/>

2.6 核心标签库的标签

保存数据:

<c:set></c:set>

获取数据:

<c:out value=""></c:out>

单条件判断

<c:if test=""></c:if>

多条件判断

<c:choose></c:choose>

<c:when test=""></c:when>

<c:otherwise></c:otherwise>

用于迭代(循环)

<c:forEach></c:forEach>

<c:forTokens items="" delims=""></c:forTokens>

重定向

<c:redirect></c:redirect>

  1. <%@ page language="java" import="java.util.*,cn.jxufe.entity.*"
  2. pageEncoding="UTF-8"%>
  3. <%--导入核心标签库 --%>
  4. <%--
  5. uri: 表示需要导入的标签库的uri名称。每个标签库都会有一个tld后缀名的标签声明文件,在tld文件中都有唯一的uri的名称。这个uri的名称就是当前标签库的名称。
  6. prefix: 使用标签库的前缀,通用和tld文件的short-name名称相同
  7. --%>
  8. <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
  9.  
  10. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  11. <html>
  12. <head>
  13.  
  14. <title>核心标签库</title>
  15.  
  16. </head>
  17.  
  18. <body>
  19.  
  20. <%-- 1) <c:set/> 给域对象赋值 --%>
  21. <%
  22. //String name = "eric";
  23. //pageContext.setAttribute("name",name);
  24. %>
  25. <%--
  26. var: 数据的名称
  27. value 保存的数据值
  28. scope: 保存到哪个域。
  29. page-》page
  30. requset->request
  31. session->session
  32. application->application
  33. --%>
  34. <c:set var="name" value="jacky" scope="request" />
  35. ${name}
  36. <hr />
  37. <%--
  38. 2) <c:out/> 获取域对象的数据
  39. --%>
  40.  
  41. <%--
  42. value: 代表获取域中的某个名称内容。如果数据在域中,必须使用EL语法去获取
  43. default: 默认值。当前需要获取的内容为null,那么使用默认值代替
  44. escapeXml: 默认情况下为trueout标签会把输入的内容进行转义。如果不需要转义,则为false既可!
  45. --%>
  46. <c:out value="${name}" default="<h3>标题3</h3>" escapeXml="false"></c:out>
  47. <hr />
  48. <%--
  49. 3) <c:if/> 单条件判断
  50. --%>
  51. <%--
  52. test: 条件表达式。返回true的时候,就会执行if标签体内容,否则,不执行。
  53. --%>
  54. <c:if test="${10>8}">
  55. <input type="submit" value="提交" />
  56. </c:if>
  57. <hr />
  58. <%--
  59. 4) <c:choose/>+<c:when/>+<c:otherwise/> 多条件判断
  60.  
  61. 登录之后,一定会把数据存放到session域,user名称
  62. session.setAttribute("user",user);
  63. --%>
  64. <%--模拟登录 --%>
  65. <c:set var="user" value="eric" scope="session"></c:set>
  66.  
  67. <c:choose>
  68. <c:when test="${!empty sessionScope.user}">
  69. 欢迎回来,你的用户名是 :eric,<a href="">【退出登录】</a>
  70. </c:when>
  71. <c:otherwise>
  72. 请先<a href="">注册</a><a href="">登录</a>
  73. </c:otherwise>
  74. </c:choose>
  75.  
  76. <hr />
  77. <%--
  78. 5) <c:forEach/> 用于迭代或循环
  79. --%>
  80. <%
  81. //List
  82. List<Student> list = new ArrayList<Student>();
  83. list.add(new Student("eric", "123456"));
  84. list.add(new Student("lily", "123456"));
  85. list.add(new Student("maxwell", "123456"));
  86. pageContext.setAttribute("list", list);
  87. %>
  88. <hr />
  89. <%--
  90. begin: 从哪个元素开始遍历,从0开始
  91. end: 到哪个元素位置
  92. step: 增加步长。默认step 1
  93. items: 需要遍历的数据。(数组|List集合|Map集合) 如果是获取域数据,那么使用EL表达式获取
  94. var: 每个元素名称
  95. varStatus: 当前状态对象。该对象封装当前元素状态信息。 例如 count属性: 表示当前遍历的是哪个元素,从1开始
  96. --%>
  97. List集合:
  98. <br />
  99. <c:forEach items="${list}" var="student" varStatus="varSta">
  100. 序号:${varSta.count } 姓名:${student.name1 } - 密码: ${student.password }<br />
  101. </c:forEach>
  102. <c:forEach begin="0" end="3" step="2" items="${list}" var="student"
  103. varStatus="varSta">
  104. 序号:${varSta.count } 姓名:${student.name1 } 密码:${student.password }<br />
  105. </c:forEach>
  106.  
  107. <hr />
  108.  
  109. <%
  110. Map<String, Student> map = new HashMap<String, Student>();
  111. map.put("001", new Student("eric", "123456"));
  112. map.put("002", new Student("jacky", "123456"));
  113. map.put("003", new Student("rose", "123456"));
  114. pageContext.setAttribute("map", map);
  115. %>
  116.  
  117. Map集合:
  118. <br />
  119. <%--
  120. 注意: forEach标签遍历Map集合时,把每个Map的对象使用Entry封装,
  121. Entry封装键对象和值对象,通过getKey()获取键对象,通过getValue()获取值对象
  122. --%>
  123. <c:forEach items="${map}" var="entry">
  124. 编号: ${entry.key } - 姓名:${entry.value.name1 } - 密码: ${entry.value.password }<br />
  125. </c:forEach>
  126.  
  127. <hr />
  128. <%--
  129. 6) <c:forToekens/> 遍历特殊字符串
  130. --%>
  131. <c:set var="str" value="java-net-php-平面设计"></c:set>
  132. <%
  133. String str = (String) pageContext.getAttribute("str");
  134. String[] strs = str.split("-");
  135. for (int i = 0; i < strs.length; i++) {
  136. out.write(strs[i] + ",");
  137. }
  138. %>
  139. <br />
  140. <%--
  141. items: 需要遍历的字符串
  142. delims: 指定分割符号
  143. var: 每个内容的名称
  144. --%>
  145. <c:forTokens items="${str}" delims="-" var="s">
  146. ${s },
  147. </c:forTokens>
  148. <hr />
  149.  
  150. <%--
  151. 7) <c:rediect/> 重定向标签
  152. --%>
  153. <%
  154. //response.sendRedirect(request.getContextPath()+"/03.el3.jsp");
  155. %>
  156. <%-- <c:redirect url="/01el3.jsp"></c:redirect> --%>
  157. </body>
  158. </html>

2.7 自定义标签

当现有的标签无法满足需求的时候,就需要开发者自行开发标签。

需求: 获取客户端的IP地址

开发步骤:

1)开发标签处理程序,是一个普通的java类,继承SimpleTagSupport类,覆盖doTag方法

  1. package cn.jxufe.a_tag;
  2.  
  3. import java.io.IOException;
  4.  
  5. import javax.servlet.http.HttpServletRequest;
  6. import javax.servlet.jsp.JspContext;
  7. import javax.servlet.jsp.JspException;
  8. import javax.servlet.jsp.JspWriter;
  9. import javax.servlet.jsp.PageContext;
  10. import javax.servlet.jsp.tagext.SimpleTagSupport;
  11.  
  12. /*
  13. * 自定义标签的标签处理程序
  14. */
  15. public class ShowIpTag extends SimpleTagSupport {
  16.  
  17. /* private JspContext jspContext;
  18.  
  19. // 用于设置PageContext对象
  20. // JspContext是PageContext的父类,实际传入的是PageContext对象
  21. @Override
  22. public void setJspContext(JspContext pc) {
  23. this.jspContext = pc;
  24. }
  25. */
  26. @Override
  27. public void doTag() throws JspException, IOException {
  28. // TODO Auto-generated method stub
  29. // 1)获取客户端ip
  30. PageContext pageContext = (PageContext) this.getJspContext();
  31. // 2)通过PageContext获取到其他8个内置对象
  32. HttpServletRequest request = (HttpServletRequest) pageContext.getRequest();
  33. String ip = request.getRemoteHost();
  34.  
  35. // 3)把ip输入给浏览器
  36. JspWriter out = pageContext.getOut();
  37. out.write("当前客户端的IP为:" + ip);
  38. }
  39. }

2)在项目的WEB-INF目录下建立一个tld文件,例如jxufe.tld,内容可以参考核心标签库的c.tld内容

  1. <?xml version="1.0" encoding="UTF-8" ?>
  2.  
  3. <taglib xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-jsptaglibrary_2_1.xsd"
  5. version="2.1">
  6.  
  7. <!-- 标签的版本号 -->
  8. <tlib-version>1.1</tlib-version>
  9. <!-- 简单名称,用于使用标签库的前缀 -->
  10. <short-name>jxufe</short-name>
  11. <!-- 是标签库的唯一名称 -->
  12. <uri>http://jxufe.cn</uri>
  13.  
  14. <!-- 定义一个标签 -->
  15. <tag>
  16. <!-- 标签名称 -->
  17. <name>showIp</name>
  18. <!-- 标签处理程序的全名: 包名+类名 -->
  19. <tag-class>cn.jxufe.a_tag.ShowIpTag</tag-class>
  20. <!-- 标签体内容输出格式 -->
  21. <body-content>scriptless</body-content>
  22. </tag>
  23.  
  24. <tag>
  25. <!-- 标签名称 -->
  26. <name>parent</name>
  27. <!-- 标签处理程序的全名: 包名+类名 -->
  28. <tag-class>cn.jxufe.a_tag.ShowIpTag</tag-class>
  29. <!-- 标签体内容输出格式 -->
  30. <body-content>scriptless</body-content>
  31. </tag>
  32.  
  33. </taglib>

3)在jsp页面顶部导入自定义标签库

4)使用标签库中的标签

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%--导入自定义标签库 --%>
  3. <%@ taglib uri="http://jxufe.cn" prefix="jxufe"%>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7.  
  8. <title>自定义标签</title>
  9.  
  10. </head>
  11.  
  12. <body>
  13. <%--
  14. 向浏览器输出当前访问客户的IP地址
  15. --%>
  16. <%
  17. //1)获取客户端IP地址
  18. //String ip = request.getRemoteHost();
  19. //2)向浏览器输入内容
  20. //out.write("当前客户的IP为:" + ip);
  21. %>
  22. <%--使用自定义标签代替以上脚本 --%>
  23. <%--
  24. showIp标签: 作用可以显示客户端的IP地址
  25. --%>
  26. <jxufe:showIp></jxufe:showIp>
  27.  
  28. </body>
  29. </html>

2.8 自定义标签的执行过程

访问:http://localhost:8080/day12/04tag.jsp

前提: tomcat启动的时候,会读取day12JSP项目下的WEB-INF的文件。包括web.xml和tld文件。

1)翻译成java文件-》 编译成class文件-> 构造方法- 》 调用_jspService()方法

2)在内存tld文件中,查询是否存在一个uri名称为http://gz.itcast.cn的tld文件

3)得到对应的tld文件内容。

4)读到<itcst:showIp>内容时,截取showIp名称(就是标签),到tld文件中查询是否存在name为showIp的tag标签。

5)取出<tag>标签的内容<tag-class>字符串: gz.itcast.a_tag.ShowIpTag

2.9 自定义标签的生命周期

由tocmat服务器调用的

1)构造方法: 构造标签器对象

2)void setJspContext(JspContext pc)                传入PageContext对象。JspContext是PageContext的父类。可以使用getJspContext()方法获取PageContext对象。

3)void setParent(JspTag parent)                       传入父标签对象。如果没有父标签,则不调用次方法。使用getParent()方法获取父标签

4)void setJspBody(JspFragment jspBody)        传入标签体内容。如果没有标签体,则不调用次方法。使用getJspBody()获取标签体内容。标签体内容封装到JspFragment中

5)void doTag()                                                   调用标签时执行方法。我们的业务逻辑就写在这个方法中。可以调用getJspContext(),getParent(),getJspBody();

12JSP进阶的更多相关文章

  1. nodejs进阶(6)—连接MySQL数据库

    1. 建库连库 连接MySQL数据库需要安装支持 npm install mysql 我们需要提前安装按mysql sever端 建一个数据库mydb1 mysql> CREATE DATABA ...

  2. nodejs进阶(4)—读取图片到页面

    我们先实现从指定路径读取图片然后输出到页面的功能. 先准备一张图片imgs/dog.jpg. file.js里面继续添加readImg方法,在这里注意读写的时候都需要声明'binary'.(file. ...

  3. JavaScript进阶之路(一)初学者的开始

    一:写在前面的问题和话 一个javascript初学者的进阶之路! 背景:3年后端(ASP.NET)工作经验,javascript水平一般般,前端水平一般般.学习资料:犀牛书. 如有误导,或者错误的地 ...

  4. nodejs进阶(3)—路由处理

    1. url.parse(url)解析 该方法将一个URL字符串转换成对象并返回. url.parse(urlStr, [parseQueryString], [slashesDenoteHost]) ...

  5. nodejs进阶(5)—接收请求参数

    1. get请求参数接收 我们简单举一个需要接收参数的例子 如果有个查找功能,查找关键词需要从url里接收,http://localhost:8000/search?keyword=地球.通过前面的进 ...

  6. nodejs进阶(1)—输出hello world

    下面将带领大家一步步学习nodejs,知道怎么使用nodejs搭建服务器,响应get/post请求,连接数据库等. 搭建服务器页面输出hello world var  http  =  require ...

  7. [C#] 进阶 - LINQ 标准查询操作概述

    LINQ 标准查询操作概述 序 “标准查询运算符”是组成语言集成查询 (LINQ) 模式的方法.大多数这些方法都在序列上运行,其中的序列是一个对象,其类型实现了IEnumerable<T> ...

  8. Java 进阶 hello world! - 中级程序员之路

    Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...

  9. C#进阶系列——WebApi 接口返回值不困惑:返回值类型详解

    前言:已经有一个月没写点什么了,感觉心里空落落的.今天再来篇干货,想要学习Webapi的园友们速速动起来,跟着博主一起来学习吧.之前分享过一篇 C#进阶系列——WebApi接口传参不再困惑:传参详解  ...

随机推荐

  1. C# 很久以前几个常用类

    Base64加密解密 using System; using System.Collections.Generic; using System.Linq; using System.Text; nam ...

  2. hihocoder1286 : 子矩阵求和

    http://hihocoder.com/problemset/problem/1286 题解 NB分析题. 首先我们令\(s[i][j]\)表示以\((i,j)\)为左上角的矩形的权值和. 因为\( ...

  3. 5分钟让你知道什么是PKI

    转:https://www.cnblogs.com/jerain6312/p/8572841.html 前言 Public Key Infrastructure(PKI),中文叫做公开密钥基础设施,也 ...

  4. kubernetes-traefik(二十一)

    参考文档:http://traefik.cn/ traefik和ingress的对比 ingress: 使用nginx作为前端负载均衡,通过ingress controller不断的和kubernet ...

  5. ubuntu 安装maven

    1.下载maven文件 切换目录 root@ubuntu:~# cd /usr/local 下载文件 root@ubuntu:/usr/local# wget http://mirror.bit.ed ...

  6. VMware 虚拟化编程(14) — VDDK 的高级传输模式详解

    目录 目录 前文列表 虚拟磁盘数据的传输方式 Transport Methods Local File Access NBD and NBDSSL Transport SAN Transport Ho ...

  7. Spring Boot 之 springcache的使用

    一.开启 springcache,启动类添加 @EnableCaching 注解 @SpringBootApplication @EnableCaching public class Gatherin ...

  8. python 安装成linux中的systemd守护运行

    参考文档1:https://blog.csdn.net/luckytanggu/article/details/53467687 参考文档2:https://www.jianshu.com/p/e14 ...

  9. [19/05/06-星期一] JDBC(Java DataBase Connectivity,java数据库连接)_基本知识

    一.概念 JDBC(Java Database Connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成.是java程序与数据库系统通信的标准API. J ...

  10. SpringBoot(三) -- SpringBoot与日志

    一.日志的起源 现在假设一个开发人员在开发一个大型系统,由于这个系统过于庞大没在很多的地方将关键的数据使用System.out.println()打印,但是当我们在项目正式上线时又需要去除,在项目bu ...