今天是田老师讲课,我猜大概很多人都很想念他吧……

其实大概很多人和我的想法类似:张老师的教学不适合初学者,更适合有一定基础且对知识点有很强把握的人,相对初学
来说,还是田老师的风格较容易让人接受一些。

-----------------------------------------------------
上午课程开始:

课程回顾:
1 组件、容器、服务器之间的关系:
一种组件只能在一种容器上运行,一种容器不可以同时运行两种类型的组件;一个服务器上则可以运行多种容器,一个服务器
上也就可以运行多个组件。

2 Web组件:
一个WEB组件就是一个具有特定结构的文件夹!
文件夹中必须首先包含WEB-INF,WEB-INF里面必须包含web.xml、同时可以包含lib和classes;
与WEB-INF的同级目录下一般放置静态资源和jsp,其中名称都是大小写敏感的(case sensitive)
注意WEB-INF目录对客户端是不可见的。

3 局部类路径和全局类路径
局部类路径包括当前组件lib文件夹和classes文件夹文件夹。lib里面放jar包,classes里面放置servlet编译后的类。
全局类路径位于服务器的安装目录中,不同的服务器是有不同的路径的。对于Tomcat来说,是在common文件夹的lib文件夹中。

4 两个接口:Servlet和ServletConfig
Servlet:init->service->destroy 
ServletConfig:代表的是一个servlet在web.xml中的配置信息。
               一个Servlet唯一对应一个ServletConfig
在ServletConfig接口中,getInitParameter()和web.xml当中的<init-param>元素相对应

5 两个类:GenericServlet和HttpServlet
GenericServlet:为了方便Servlet开发,它实现了Servlet接口和ServletConfig接口,它具有一个无参数的init方法,这个方法
    是被有参数的init方法来调用的
    所以在继承这个类的时候,如果想要重写init方法,应该重写无参数的init方法,如果一定要重写有参数的init方法,
    应该调用super.init(config) ;如下所示:

public void init(ServletConfig config) throws ServletException
  {
   super.init(config); //这里必须这么写,因为父类中的init(config)里面有一些代码是必须继承下来的。
   String initial = config.getInitParameter("initial");
   try
   {
    count = Integer.parseInt(initial);   
   }
   catch(NumberFormatException e)
   {
    count = 0 ;
   }
   System.out.println("计数器Servlet已经成功的初始化!");
  }
HttpServlet: 这个类是由GenericServlet扩展而来,有两个service方法和七个do方法,所以在继承这个类的时候应该去覆盖do方法,
    也就是那些doGet、doPost、doPut、doDelete等。两个service方法之间有什么关系呢?一个service的参数是和Service
    接口一样,是ServletRequest和ServletResponse;另外一个service方法的参数是针对Http协议,也就是
    HttpServletRequest和HttpServletResponse。
6 Tomcat和Http协议

先看一下上次的代码:

public abstract class GenericServlet implements Servlet,ServletConfig
{
 private ServletConfig config ;

public void init(ServletConfig arg0) thorws ServletException
 {
  config = arg0 ;
  init() ;
 }

public void init() //子类只需要覆盖这个方法就可以了
 {
 
 }
};

------------------------------------------------------
现在开始介绍JSP

今天重点需要掌握的内容:
1、什么叫做模板和元素
2、脚本元素分为几种,如何使用?
3、内置对象(9种内置对象)和作用域(4个)
4、指令元素

Servlet是java代码包着Html页面,也就是使用out.pringln,asp则是在html中嵌入代码,两者正好相反。

这导致Servlet非常复杂,sun公司发现了这一点,开始学习微软的做法,推出了jsp。jsp就是描述一个最终生成的Servlet是什么样子的
代码,其实就是html中嵌入java代码,它在最终执行以前一定要被翻译成为servlet!一种容器上只能够跑一个组件,对于Tomcat来说,
只能加载Servlet,所以jsp是不可以单独运行的,必须转化为servlet。

jsp是编译执行的,需要编译成为servlet类,虚拟机加载这个类后再执行。jsp的速度高于asp,为什么呢?第一次需要编译,会慢一些,
但是后来就不需要编译了,会驻留在内存中,就没有编译的过程了。后来微软推出了aspx,扔掉了asp全部的内核,在asp和最终程序之间加入
了一个中间类,也达到了追赶jsp速度的目的。

jsp页面上分为两类:模板和元素。
模板是html代码,文本、图片和javaScript语言等,是容器直接输出到响应流中去的。如使用out.println("")处理,
而元素则是容器必须作特殊处理的东西,也就是那些特定的代码。

jsp需要先翻译成为Servlet,然后再被执行,被翻译成的Servlet叫做Jsp的实现类。

-------------------------------
元素:指令元素(Directive Elements)、动作元素(Action Elements)、脚本元素(Scripting Elements)

注意后面要讲到的EL表达式语言、JSTL和自定义标签、Struts等都是为了彻底的不让jsp页面上再有java代码,因为在
页面上嵌入java代码是很不好的,丑陋又难以维护

指令元素:提供容器在翻译截断所需要的信息,基本上都是与请求无关的jsp页面全局信息
动作元素:提供容器在执行截断所需要的信息,与特定的请求相关。
脚本元素:用于嵌入脚本语句,分为声明脚本(declarations)、脚本片断(Scriptlets)和表达式(expressions)

Sun是向下支持多种操作系统,向上只支持一种语言就是java;微软是向上支持多种语言,向下只支持一种操作系统;
谁都不愿意同时屏蔽上下两方,既支持多操作系统又支持多语言,背后是利益使然。

----------------------------------
先说说脚本元素

其中脚本片断的语法形式很简单,就是用<% %>括起java代码就ok了。
脚本声明:<%! %>
脚本表达式:<%= %>

脚本片断翻译完毕后会被原封不动的放到Servlet中的service方法里面,所以脚本片断里面绝对不允许放置html代码,
编译是无法通过的

新建一个jsp页面:注意绝对不可以建到WEB-INF目录中去!那里面的东西客户端不可见!
建在WebRoot里面就可以了。

如果显示客户端时间,使用JavaScript中的Date对象就可以,如果要显示服务器端时间的话
脚本片断中可以放置任何合法的java代码:
<%
 Calendar currentTime = Calendar.getInstance();
 int year = currentTime.get(Calendar.YEAR);
 int month = currentTime.get(Calendar.MONTH)+1; //MONTH是从0开始的!
 int date = currentTime.get(Calendar.DATE);
 out.println("今天是"+year+"年"+month+"月"+date+"日!<br>");
%>

Tomcat的目录work中的localhost中的工程目录中的org中的apache中的jsp中可以看到翻译成的servlet的样子,
以后jsp被翻译后的servlet源代码可以在work中的对应目录下自己查看。
--------------------------------------------------
脚本片断中不可以声明方法,应该写在声明脚本中

注意声明脚本中的代码翻译后会放到Servlet中的什么地方去呢?肯定被放到类的内部但同时是Service方法之外

在类内部和类的方法外面可以放属性、方法、静态代码块和非静态代码块、内部接口和内部类

使用脚本片断<%%>括起来的代码翻译后会原封不动的放置到service方法中,而声明脚本<%!%>括起来的代码翻译后会原封不动的放置
到service方法之外,但是在类的内部。具体被放置的位置可以去查看work中生成的Servlet源代码。

例如:
<%!Calendar currTime = Calendar.getInstance();%>

<%!
 static  //类加载时被调用,因此静态块里面是不可以使用getServletConfig方法的,因为没有实例化出Servlet对象。
 { //下面这个Hello只会被执行一次,因为类加载就一次而已
  System.out.println("Hello"); //由于声明脚本的代码翻译后是在service方法之外的,所以肯定不可以使用内置对象out,
         //因为out是在service方法中定义的!!!
 }
 public void init()  //如果想要重写无参的init方法,在声明脚本中重写就可以了,当然这个init方法也就执行一次,对象驻留内存
 {//init方法是实例化时被调用
  ServletConfig config = super.getServletConfig();
  //调用HttpJspBase(HttpServlet的子类)的getServletConfig方法。
 }

public class a
 {
 }

public interface aa
 {
 
 }
%>
-------------------------------------
脚本表达式:
翻译后会放到service里面并且作为参数传入out.println()中。
<%=sad%>
out.print(sad);

只要能够放到out.print()中的就可以放到<%= %>中
今天是<%=year%>年<%=month%>月<%=date%>日

因为脚本表达式是作为参数出现在out.print()语句中的,所以脚本表达式后边是不要加入分号的!

-------------------------------------
脚本元素分为三种,总的语法形式是<%%>
1 脚本片断<%%>
翻译之后放到service方法之中去
2 脚本声明<%!%>
翻译后放到service方法之外,类的内部
3 脚本表达式<%=%>
翻译后作为out.print()的参数。

------------------------------------------

指令元素:<%@directive  %>
   page
   include
   taglib
它们是指令元素,是给容器发指示的,page可以起到向类导入包的作用。

例如:
<%@ page language="java" import="java.util.*,java.sql.*" pageEncoding="GBK"%>

-----------------------------------------
<%
 Connection conn = null ;
 preparedStatement pstmt = null ;
 ResultSet rs = null ;

try
 {
  Class.forName("com.mysql.jdbc.Driver"); //在jsp中不需要try了,因为翻译后本身放置的位置就在servlet的try中
  conn = DriverManager.getConnection("jdbc:mysql:///j2ee","root","root");
  pstmt = conn.preparedStatement("select * from users where username = ? and password= ?");
  pstmt.setString(1,request.getParameter("username"));
  pstmt.setString(2,request.getParameter("password"));
  rs = pstmt.executeQuery();
  if(rs.next())
  {
 %>welcome!
 <%
  }
  else
  {
 %>
 failure!
 <%
  }
 }
 finally
 {
  if(conn!=null)
  {
   conn.close();
   conn = null ;
  }
 }
%>

//看看上面的代码,何其的混乱!如果业务一多了就没法看了。这些用<%和%>将逻辑分支隔开,彻底撕裂了
//页面代码的清晰程度。

--------------------------------------------
下午课程开始:

内置对象:
一共有9个:
request、response、pageContext、session、application、out、config、page、exception
名字是预先定义好的,且只能在脚本片断或者脚本表达式(也就是翻译过后的service里面)中使用。

在某个jsp翻译过后的servlet页面中,可以看到如下代码:

public void _jspService(HttpServletRequest request, HttpServletResponse response)
        throws java.io.IOException, ServletException {

JspFactory _jspxFactory = null;        //不是内置对象
    PageContext pageContext = null;
    HttpSession session = null;
    ServletContext application = null;
    ServletConfig config = null;
    JspWriter out = null;
    Object page = this;
    JspWriter _jspx_out = null;           //不是内置对象
    PageContext _jspx_page_context = null;  //不是内置对象

可以看到上面的代码中包含了8个内置对象,唯独没有exception,其实exception默认是不可用的。

request:对应httpServletRequest
response:对应httpServletResponse
pageContext:PageContext类的对象实例,该类在javax.servlet.jsp中,是抽象的,是jsp中特有的,servlet中没有。
   它里面有页面上下文中信息,是个作用域
session:HttpSession类的对象实例,作用域。
application:ServletContext类的对象实例。可以通过servletConfig中的getServletContext方法得到,它也是个作用域
   ServletContext可以允许应用程序和容器之间交互信息。一个Web工程(组件)对应一个ServletContext,ServletConfig
   对应一个Servlet,ServletContext是应用程序作用域!它代表了运行的容器。
out:javax.servlet.jsp.JspWriter的对象实例.JspWriter和PrintWriter是平级的,都是扩展自writer
config:javax.servlet.ServletConfig的对象实例
page: java.lang.Object类的对象实例。因为代码中:Object page = this;
   因此对应当前页面翻译成的Servlet对象实例的句柄,是Object类型的。
exception:java.lang.Throwable类对象的实例,代表未被处理的异常,这个对象只是针对错误处理页面有效,要在page中
   设置errorPage属性为真。

-------------------------------------------
作用域:

http协议是面向无连接的,请求和响应过后连接都是迅速断开,但是在有些时候会有点小麻烦,比如登陆邮箱,验证通过后,
生成响应后,服务器和我的连接就断开了,下次再和服务器联系的时候,我的信息服务器未必能保存住,可能还要继续再次验证,
要解决这种由于http协议的无连接性导致的用户信息保存问题,需要作用域的概念,尤其是成千万个的人同时登陆时更是。

会话过程就可以解决这样的问题,在作用域中可以保证用户的信息保存下来。实现机理:首先,第一次访问的时候,服务器不认识我,
需要验证,于是,服务器赶紧从自己的内存空间中建立一块内存分配给我,这块内存只能我使用,我的用户名和密码通过验证后就存在
这个服务器内存中,然后连接断开。第二次发送访问请求时,服务器就去那块内存中找用户名和密码。但是这个内存必须有个唯一的标识,
标识其存储空间的位置,才能不和别人混淆,这就是会话ID。生成响应时,将会话id写到响应中发回客户端,下一次再去请求时,浏览器
会带着你的id把请求发送给服务器,这样就又能定位回你的那块存储空间了,存储空间里面有你的个人信息,比如买了什么东西,有多少封
邮件等等。

第一次请求空手而来,没有钥匙,服务器new出一块新的存储空间,把用户名和密码放进去,然后生成响应将sessionid传回浏览器,
下一次请求带着sessionID去,服务器拿到id后把那块存储空间的信息,也就是你的信息拿出来给你。这样就解决了Http的无连接问题。

这里面有个问题,我拿到了SessionID,然后我就一直没有再给服务器发送请求,那么这块存储空间总不能一直为你保留下去,总要留给其他
人去用的。还有一个问题,session里面不可能存很大的东西,因为session有很多,每个session如果塞的东西比较大的话,一多起来就吃
不消。

session有个失效时间,这个失效时间默认的时间长度是30分钟(Tomcat上设置的默认时间)
会话失效时间的定义:也就是会话最长的闲置时间(连续不操作会话的最长时间)
会话可以主动的由客户端去无效化,就是网站上的安全退出或是注销链接。否则信息可能会有泄漏的危险。

从底层机制上来说,因为这块内存空间一直在服务器中驻留,除非到期或是你主动令其失效,否则这些信息一直
保存,供你使用。到期后会将那块内存空间中的信息清除,并释放。

会话作用域的范围:从第一次和服务器进行交互,到session失效(主动失效和时间到期两种情况)。

对于session来说,如果失效时间没有到,但是我把浏览器给关了,开了个新的浏览器,虽然session还存在,
但是已经访问不了session了,因为sessionID是由当前浏览器保存的,关闭了当前的浏览器的话就没有这个
sessionID了,只能再次请求一个sessionID

类似于session的是Cookie,它存在客户端,作用和session类似,但是由于写客户端,所以不是太安全,
还是写服务器端的session安全一些。
------------------------------------
请求作用域:从发一次请求过去一直到响应生成的一段时间是请求作用域,这之后请求作用域就失效了,
   一个请求作用域可以跨过多个页面作用域,使用forward()方法就可以,一个session作用域
    可以包含多个请求作用域。
页面作用域:从进入这个页面到离开这个页面

请求作用域中,session信息是可见的。但是session作用域中,请求信息是不可见的,因为有多个请求在里面。

应用程序作用域:最大的作用域,对应web服务器。也就是你的web工程。应用程序作用域里面可以包含多个session
   作用域。

application->session->request->pageContext

在应用程序作用域中存放的信息,多个session(多个用户)都可以看得到;也就是应用程序里面的信息在服务器端是可以
被每个用户看到的。

---------------------------------------------
如何往这4个作用域里面存储信息使其信息能够在作用域中一直可见?
是以属性的方式来存储的。

属性是由名和值对应的,取出来的时候是要根据属性名来得到属性的值。存的时候给属性起个名字就存进去了。

setAttribute方法和getAttribute方法就是我们想要的。所有的内置对象都具有这两种方法。还有removeAttribute
和getAttributeNames

page对的是当前的Servlet自己,和pageContext不是一回事。
---------------------------------------------
使用作用域来实现一个应用:
作为一个网站希望知道有谁访问了我,也就是知道所有访问过我的ip,ip地址肯定是从请求里面取出。

request.getLocalAddr() 这个方法其实得到的是服务器的ip地址,不是我们想要的
request.getRemoteAddr()这个方法返回客户ip或者多个代理服务器中的最后一个代理服务器的ip

新建一个工程叫做iplist
由于是多个用户访问我,所以我肯定要把他们的ip存储在一个集合里面,这个集合肯定要存储在application,也就是
ServletContext中,这是显而易见的。

新建一个jsp页面叫做index.jsp

<%
 String ip = request.getRemoteAddr(); //取出ip地址
 //由于ip地址不可以重复,所以使用Set集合来存储!
 Set ips = (Set)application.getAttribute("iplist");
 if(ips==null) //第一个来的人取出来的肯定是null值,必然执行这个分支。
 {
  ips = new HashSet()  ;
 }
 ips.add(ip);
 application.setAttribute("iplist",ips); //覆盖原来的iplist属性值。其实这个set只是在第一次保存时有意义,
  //因为只要能够把属性get出来,以后的修改就是覆盖了原来的属性,这没有错,不需要修改完后再次set了。
%>
上述代码就达到了统计用户ip的需求,所有信息存储到了application对象中的iplist属性中,

推荐像下面这么写:
<%
 String ip = request.getRemoteAddr(); //取出ip地址
 //由于ip地址不可以重复,所以使用Set集合来存储!
 Set ips = (Set)application.getAttribute("iplist");
 if(ips==null)
 {
  ips = new HashSet()  ;
  application.setAttribute("iplist",ips);
 }
 ips.add(ip);
 
 Iterator it = ips.iterator() ;
 int i = 0 ;
while(it.hasNext())
{
%>

<tr>
  <td><%=i++%></td>
  <td><%=it.next()%></td>
 </tr>
<%}%>

</table>

</body>

这样各个机器访问过来的ip都会被记录在这个列表中,随时刷新都可以看到最新的结果,
如果使用了session而不是application的话,那永远都只会看到表中有一个ip,那就是你自己。

这里要注意一点,上面的程序只是显示了来访者的ip,如果我要记录来访者的其他信息,比如端口号,访问时间等等,
我加进HashSet中的就不能是一个ip字符串了,而应该是一个来访者的实体类对象才对!这也符合传统的做法,使用set方法
填充好对象后再把对象给add进Set中就可以了

当然上面这种做法也是不好的!即便我使用了Set来存储对象,那么会有这样的问题,同一个ip的人来访问多次,会出现时间更新的
问题,但是Set里面存储的是不同的对象,即便ip相同,访问时间不同也会被当作是不同的对象,这样列表输出的话必然会出现ip重复
的现象,如果在里面判断是否ip值相同的话也会相当的麻烦。

所以还是应该用Map或者Hashtable来存储,将用户的ip作为key,用户的实体对象实例当作value传入Map或者Hashtable中,使用
put方法存入,然后使用keySet方法取出键的集合,通过迭代后get(key)的方法可以得到键值;或者通过entrySet取出键值集合,
迭代后得到Map.Entry接口后使用它的getey和getValue方法即可

当然还可以使用Map或是hashtable来存储ip和时间,当然不推荐这么作

下面日期的显示使用了一个很重要的抽象类!
在java.text中有一个DateFormat抽象类,使用它的实现子类SimpleDateFormat。
DateFormat df = new SimpleDateFormat("yyyy年MM月dd日 HH:mm:ss") ;
df.format(new Date()) ; 就可以得到想要的格式!!

这也就是按照字符串中的指定格式来显示日期时间!

源代码如下:

<%@ page language="java" import="java.util.*, java.text.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
   
    <title>My JSP 'index.jsp' starting page</title>
   
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
   
    <!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->
  </head>
 
  <body>
    <h1 align=center>IP地址</h1>
    <table border=1 align=center>
      <tr>
        <th>序号</th>
        <th>IP地址</th>
        <th>访问时间</th>
        <th>操作</th>
      </tr>
    <%
    String ip = request.getRemoteAddr();
    Map ips = (Map) application.getAttribute("IPLIST");
    if(ips==null) {
      ips = new HashMap();
      application.setAttribute("IPLIST", ips);
    }
    ips.put(ip, new Date());
   
    Set entry = ips.entrySet();
    Iterator it = entry.iterator();
    DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    int i = 1;
    while(it.hasNext()) {
      Map.Entry me = (Map.Entry)it.next();
    %>
      <tr>
         <td><%=i++%></td>
         <td><%=me.getKey()%></td>
         <td><%=df.format(me.getValue())%></td>
         <td><a href="?ip=<%=me.getKey()%>">是否封杀?</a></td>
      </tr>
    <%}%>
    </table>
   
  </body>
</html>
-----------------------------------------------

今日总结:

1、模板和元素
模板是容器不经过任何处理,直接写到响应中去内容;
元素是对容器有特殊含义,在翻译需要根据情况进行特殊处理的代码。

元素分为三种:
(1)脚本元素(script element)       <%%>
用于在页面中嵌代码
(2)指示元素(directive element)  <%@ %>
向容器发出指令,指导翻译
(3)行为元素(action element)      <jsp:{name} ></jsp:{name}>
在执行阶段根据参数等条件进行代码执行元素

2、脚本元素分为几种,如何使用?
脚本元素总的语法形式<%%>,分为三种
(1)脚本片段 <%%>
翻译之后放到service方法中
(2)脚本声明 <%!%>
翻译后放到service方法之外,类内部
(3)脚本表达式 <%=%>
翻译后做为out.print()的参数

3、内置对象(9)和作用域(4)
(1)内置对象
request
session
pageContext
application

response
out
config
exception
page

(2)作用域
页面作用 :pageContext          PageContext
请求作用域:request               HttpServletRequest
会话作用域:session               HttpSession
应用程序作用域:application   ServletContext

以属性方式存储对象,每个作用域对象一定具有的方法包括
getAttribute
setAttribute
removeAttribute
getAttibuteNames

(3)日期和日期格式
Date/Calendar
DateFormat/SimpleDateFormat.format

4、指令元素
语法形式 <%@ directive
                       page
                       include
                       taglib

表达式语言EL/JSTL/自定义标签/struts

---------------------------------------------
晚上可以在预习和复习的前提下,把以前做过的选课系统给用jsp实现一下!方法都是已经现成写好的。
记得回顾一下数据库的生成过程!PowerDesigner的使用!!

12月23日——培训第29天相关推荐

  1. 2019年12月23日--2019年12月29日(合计38小时,剩9962小时)

    2019年12月23日 1,HLSL精讲,19.3剪裁 2,3d图形数学:2.4及相应代码 3,windows核心编程:6.5.2 4,鬼火引擎,ISceneNode 5,整合gis代码 6,cesi ...

  2. 冰原服务器维护,12月23日(周四)服务器更新维护公告

    首款纯修真2D回合制游戏<问道>以其精良的画质,丰富的玩法,完善的系统受到了无数玩家的喜爱和支持,为了给玩家提供一个更优良的游戏坏境,<问道>运营团队将于12月23日(周四)对 ...

  3. 英语听说计算机考试演练专用,新中考首次英语听说机考12月23日举行,9月28日全体中学生模拟演练!...

    原标题:新中考首次英语听说机考12月23日举行,9月28日全体中学生模拟演练! 2018年本市将实施新的中考改革方案,中考首次将英语口语考试纳入考试内容,英语听力和口语考试与笔试分离,每名考生有两次考 ...

  4. 2017广东全国计算机12月,2018年广东考研时间:2017年12月23日至24日

    2018年考研时间已经公布,出国留学考研网为大家提供2018年广东考研时间:2017年12月23日至24日,更多考研资讯请关注我们网站的更新! 2018年广东考研时间:2017年12月23日至24日 ...

  5. 伊洛纳服务器维护,《伊洛纳》【公告】伊洛纳12月23日正式服版本更新

    ---------更新公告--------- Hello,亲爱的各位冒险家: 我们预计将在2020年12月23日 5:00-2020年12月23日9:00进行停服维护,维护期间将无法登录游戏,请提前做 ...

  6. 湖北省计算机二级报名时间2020年12,2020年3月湖北省计算机等级考试报名_时间:12月10日-12月23日...

    湖北省 计算机等级 导语:2020年3月全国计算机等级考试将于3月28日-30日举行,小编整理了湖北省报名时间,供大家参考,欢迎大家点击查看!更多计算机考试动态|模拟试题|历年真题请关注计算机学习网! ...

  7. 本固枝荣--前端体验大会12月23日深圳场

    12月23日深圳前端体验大会(本固枝荣) 作为一个后台开发,完整地参加一整天的分享会议,收获还是挺多的.就我个人而言,前端开发者的心态要比后台开发更Open.更乐于拥抱新技术.整个大会的开始和结束也回 ...

  8. 12月25日服务器例行维护公告,12月23日服务器例行维护公告

    亲爱的玩家: 青龙乱舞区.大地飞鹰区.血海飘香区.名剑风流区.陌上花开区全部服务器将在12月23日6:00~8:00停机维护更新,维护完成后上述各服务器客户端版本号升级至1.1.27.5.本次维护主要 ...

  9. 魅族android11,Flyme安卓11来了!12月23日开启,魅族17系列独享

    原标题:Flyme安卓11来了!12月23日开启,魅族17系列独享 点击右上角关注我们,每天给您带来最新最潮的科技资讯,让您足不出户也知道科技圈大事! 12月22日,魅族Flyme官方宣布,魅族17系 ...

最新文章

  1. [置顶] 【C#】 Socket通讯客户端程序
  2. linux c 通过套接字获取本地远程地址信息 getsockname getpeername 简介
  3. Ubuntu安装遭遇 VMware上的Easy install模式
  4. arm交叉编译器gnueabi、none-eabi、arm-eabi等的区别
  5. gearman php mysql_php使用gearman
  6. 在SAP WebClient UI里显示倒数计时的UI
  7. 力扣 数组中的第K个最大元素
  8. 6种java垃圾回收算法_被说烂了的Java垃圾回收算法,我带来了最“清新脱俗”的详细图解...
  9. 程序员每天少吃===活120岁
  10. oracle11 登陆慢,oracle11g安装后电脑启动很慢怎么解决
  11. [改善Java代码]使用CyclicBarrier让多线程齐步走
  12. element-ui tamplate slot-scope 模板插槽的使用
  13. 计算机自我鉴定高中生200字,精编高中生自我鉴定200字左右3篇 高中自我鉴定200字...
  14. setPositiveButton和setNegativeButton的区别
  15. vitrualbox虚拟机64位安装报错解决
  16. 50欧姆线设计 高频pcb_50欧阻抗天线设计
  17. 计算机考研中的编号,考研科目前边的编号是什么意思
  18. Docker安装Tomcat镜像并部署web项目简述
  19. qbo julius增加自己的grammar方法
  20. 吴炯:投资开心网的阿里巴巴前CTO

热门文章

  1. Eclipse设置成黑色背景(黑色主题)
  2. grafana--利用安装插件(aliyun-cms-grafana)监控阿里云产品
  3. 对话Cypherium郭杨睿:先找场景,再定技术 |链捕手
  4. 【前端32_高级】正则表达式:元字符、断言、匹配模式
  5. sysbench 1.1.0安装
  6. JavaScript中函数的四种调用方式(若有错误之处请斧正)
  7. 计算机图形常用数学之向量运算 向量的模 向量的点乘内积 向量的叉乘外积 向量的模向量的加减法 向量归一化
  8. stm32L151 系统时钟配置
  9. 网络分层基础概念(一)
  10. 计算机图形学基础教程学习总结