百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

深入理解JSP(深入理解linux进程与内存 pdf)

myzbx 2025-03-25 15:37 10 浏览

第一章 JSP

1、概述

1.1 JSP引入

在前面的登录案例中,登录失败后为了能够响应登录的错误信息。我特意创建了一个LoginErrorServlet用来动态地拼接错误信息。

【代码如下】

  1. LoginErrorServlet:登录失败,手动拼接login.html页面,并将错误信息动态地添加进去。
arduino复制代码       //3.给浏览器生成响应信息
        boolean result = service.login(username,password);
        String msg = result ? "用户登陆成功" : "用户登陆失败";
        request.setAttribute("msg",msg);
        if (result){
            //登陆成功
            response.sendRedirect("/success.html");
        }else {
            //登陆失败
            //转发到处理错误的servlet中
          request.getRequestDispatcher("/loginErrorServlet").forward(request,response);
        }

2. LoginErrorServlet:手动拼接html页面,动态展示登录错误信息。

scss复制代码@Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //响应给用户
        response.setContentType("text/html;charset=utf-8");
        //接收错误的信息
        String msg = (String) request.getAttribute("msg");
        //获取输出流
        PrintWriter writer = response.getWriter();
         //拼接登录的html页面
        response.getWriter().print("");
        response.getWriter().print("");
        response.getWriter().print("
"); response.getWriter().print(" "+msg+"
"); response.getWriter().print("用户名:
"); response.getWriter().print("密码:
"); response.getWriter().print(""); response.getWriter().print("
"); response.getWriter().print(""); response.getWriter().print(""); }

说明:上述虽然能够达到我的需求。但是他有以下两个缺点:

  1. 拼接麻烦开发效率低;
  2. 阅读性差,代码难以维护;

问题:思考既然以前在servlet有上述缺点,为什么还要使用拼接呢?

因为如果我们想在html页面显示错误的信息,我们只能采用这种方式,html页面不能够书写java代码。而我们既不采用上述拼接标签的方式,还想实现简单的效果。我们可以使用jsp技术,在jsp中可以书写java代码同时还可以书写html标签。这样 就能够使用jsp技术在客户端和服务端直接进行数据交互了。

1.2 JSP是什么

JSP全名为Java Server Pages,中文名叫java服务器页面,其本质是一个Servlet ,它是由Sun 公司倡导、许多公司参与一起建立的一种动态网页 技术标准。其实就是一个既能书写Servlet代码又能书写HTML代码的文件。

1.3 创建JSP文件

sql复制代码在web目录下,新建一个jsp文件,点击鼠标右键New --- JSP---给这个文件取个名字。

【图1 创建JSP】

文件内容如下:

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title





1.4 在JSP中书写代码

jsp中既可以书写java代码,同时还可以书写html标签。我们完成练习如何在jsp页面中书写java代码。

【需求】

  1. 在jsp页面上获取当前日期,并将其格式化成字符串"yyyy-MM-dd HH:mm:ss";
  2. 将这个字符串展示在浏览器上;

说明:

1)jsp中的注释:<%--注释内容--%>,添加注释的快捷键是:ctrl+/;

2)在jsp中书写代码有三种方式,我们这里先介绍一种,格式:

<%java代码%>

【参考代码】demo01.jsp

arduino复制代码<%@ page import='java.util.Date'>
<%@ page import='java.text.SimpleDateFormat'><%-- created by intellij idea. date: 2018-01-09 time: 19:15 to change this template use file settings file templates. -->
<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    <%-- jsp 1. jspyyyy-mm-dd hh:mm:ss 2. -->
    <% date d='new' date simpledateformat sdf='new' simpledateformatyyyy-mm-dd hh:mm:ss d string s_date='sdf.format(d);' system.out.printlns_date='+ s_date);         //将这个字符串展示在浏览器上         response.getWriter().print(s_date);     %>   

在浏览器看到 format格式的日期:

【控制台输出】

ini复制代码s_date = 2018-01-09 19:28:22

2、JSP的运行原理

通过上面的jsp初体验, 我们看到jsp中既可以编写java代码也可以直接编写html代码,相对servlet更加方便.并且我们通过浏览器访问到的jsp页面,最后在浏览器中看到了响应到浏览器中的结果。那么整个过程的执行流程是怎样的呢,我们可以参考如下图:

通过上面的执行流程,我们可以找到jsp生成的.java源文件,这样就可以知道jsp的真正原理,同时可以看下jsp为什么是servlet。

如何查看生成的.java源文件呢?

我们可以到tomcat中查看一下上面案例中的jsp页面是怎么样的一种存在。IDEA借助tomcat发布web项目的机制:动态发布(为每一个web项目创建一个单独的发布文件)。我们可以通过tomcat其中日志中的CATALINA_BASE路径找到我们当前这个JSP页面在tomcat中的位置:

【图1 IDEA发布项目的路径】

找到这个目录后,会看到以下3个文件夹:

【图2 文件目录】

我们打开C:\Users\admin.IntelliJIdea2017.3\system\tomcat\Tomcat_8_5_311_day05目录发现有两个文件:

【图3 JSP被翻译后的代码】

打开demo01_jsp.java文件后,代码如下所示:

我们可以看到当前的jsp文件被翻译成了一个类,这个类继承HttpJspBase类,那么这个HttpJspBase类又是什么?

注意:jsp的翻译由服务器完成,HttpJspBase类一定也是tomcat服务器的内容,所以我们需要找到
org.apache.jasper.runtime.HttpJspBase这个类,这个类可以到tomcat的安装目录下的lib文件夹下找到jasper.jar,将其解压,找如下目录:org\apache\jasper\runtime,找到HttpJspBase.class。

使用反编译工具打开,如下所示:

通过观察源码,根据我们所学习的继承关系,我们发现JSP其实底层就是一个servlet。通过观察源码,我们发现我们刚刚编写的所有代码都在该Servlet里面的service方法内部。

swift复制代码public final class demo01_jsp extends org.apache.jasper.runtime.HttpJspBase {
     
     public void _jspService(final javax.servlet.http.HttpServletRequest request, final javax.servlet.http.HttpServletResponse response)
      throws java.io.IOException, javax.servlet.ServletException {
    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');
      out.write('\n');
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("    Title\r\n");
      out.write("\r\n");
      out.write("\r\n");
      out.write("    ");
      out.write("\r\n");
      out.write("    ");

        //获取当前系统时间
        Date d = new Date();
        //创建日期格式化解析器对象
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
        //使用日期格式化解析器对象调用方法格式化日期对象d
        String s_date = sdf.format(d);
        //控制台输出
        System.out.println("s_date = " + s_date);
        //将这个字符串展示在浏览器上
        response.getWriter().print(s_date);
    
      out.write("\r\n");
      out.write("\r\n");
      out.write("\r\n");
    } catch (java.lang.Throwable t) {
      。。。。
  }
}

总结:

1.<%>中书写的代码被直接解析成java代码;

2.jsp之所以可以编写html代码,其实本质上也是类似我们使用Servlet直接输出的。也就是说底层还是像我们之前做法一样进行标签拼接。html部分都被out.write("")方法以字符串的形式拼接,然后响应给浏览器;

3.在这个java文件中有个_jspService,这个方法有两个参数request,response;

4.由于我们自己编写的代码全部都落入到了service方法内部一开始就已经声明了request,response,session,application(ServletContext)等对象了,这些对象成为之jsp内置对象。

3、JSP中书写java代码的三种方式

在JSP页面的body标签中,可以直接书写html代码和JS代码。但是,如果在JSP页面中书写java代码。必须遵循固定的格式,才能够生效;JSP页面中书写java代码有三种方式:1.脚本片段;2.脚本声明;3.脚本表达式;

方式一:脚本片段

脚本片段指的是一段java代码。书写格式:<% java>

【示例】 demo02.jsp

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


<% java response.getwriter.printlnhello jsp>



【被翻译后的源码】

swift复制代码 out.write("\r\n");
 out.write("    ");
 response.getWriter().println("hello jsp");
 out.write("\r\n");

【页面结果】:

方式二:脚本声明

erlang复制代码脚本片段虽然可以嵌入java代码,但是如果,我们要给当前的jsp中定义一些成员方法或者成员变量,就需要一个新的技术——脚本声明.

说明:通过查看jsp的源代码我们发现,脚本片段的代码都会存在service方法中,而方法中是不可以定义一个方法的。

脚本声明的格式:<%! java>

【示例一】声明成员变量 demo03.jsp

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


<%! int num='10;' public void method>



【被翻译后的代码】成员变量

方式三:脚本表达式

虽然脚本声明和脚本片段已经可以书写Java代码了,但是如果我们要使用java代码向页面输出一些内容,还是需要 使用原来的response对象,比较繁琐,因此,我们需要一个更加简便的方式,可以代替response向页面输出内容 ——这个就是脚本表达式。

脚本表达式的格式:<%=> 等价于:out.print( 向浏览器输出的内容)

【示例】在页面输出信息

bash复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


<%="我爱摸鱼"%>
<%="上海程序员摸鱼"%>
<% response.getwriter.printresponse>



注意:

上面代码中,我们书写代码的顺序是先:

arduino复制代码<%="我爱摸鱼"%>
<%="上海程序员摸鱼"%>

再:

vbscript复制代码response.getWriter().print("response");

可是浏览器查看数据的结果是

vbscript复制代码response 我爱摸鱼 上海程序员摸鱼

原因:response.getWriter()获取的输出流是:PrintWriter。而脚本表达式<%=%> 等价于:out.print( 向浏览器输出的内容).并且这种方式获取的输出流是:JspWriter。其实导致上述输出结果前后顺序就是PrintWriter和JspWriter。

JspWriter:将输出的内容先放到jsp内置的缓冲区中,然后再刷新输出。

PrintWriter:是不使用jsp内置的缓冲区,直接将内容写到网页中。

总结:

1.不要同时使用脚本表达式和response同时往页面输出信息,会出现顺序不一致。现象:response会出现在最前面。使用一种输出即可。

2.脚本表达式<%= str> :在页面输出内容,在service方法中起作用;

3.脚本片段<%> :在service方法中,原样输出的代码片段;属于局部为,放在_jspService方法中

4.脚本声明:<%! string str='程序员'> :定义成员变量;

4、JSP的三大指令

4.1 指令概述

JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出效果,而只是告诉引擎如何处理JSP页面中的其余部分。

指令用来声明JSP页面的一些属性,比如编码方式,文档类型。我们在servlet中也会声明我们使用的编码方式和响应的文档类型的,而JSP就是用指令来声明的。

【1】JSP页面的3大指令

css复制代码a)  page:页面
<%@page contenttype='text/html;charset=utf-8'>
    说明:声明jsp页面的编码方式
b)  taglib:引入标签库
c)  include:包含

【2】指令的格式

swift复制代码<%@指令名>

4.2 taglib指令

【作用】

复制代码用于在JSP页面中导入JSTL标签库;

【格式】

ini复制代码<%@taglib prefix='c' uri='http://java.sun.com/jsp/jstl/core'>
说明:表示引入外部的jstl标签库的。
prefix="c" 表示前缀
uri="http://java.sun.com/jsp/jstl/core" 表示jstl标签库的地址

4.3 include指令

【作用】

复制代码在一个JSP页面中静态包含另外一个JSP页面;

【格式】

ini复制代码<%@include file='URL'> 指定要导入页面的地址

【使用示例】

需求:课后的原型中的页面放到web文件夹下面。然后打开主页index.jsp.在主页中引入header.jsp页面。

xml复制代码

【效果】

小结

三大指令是什么?分别的作用是?

  1. page:设置网页上一些属性
  2. taglib:导入标签库
  3. include:包含另一个JSP页面

5、page指令

5.1、page指令概述

【1】page指令的作用

page是jsp中必须使用的一个指令,用于设置JSP上各种页面的属性,告诉tomcat如何将一个JSP翻译成Servlet

【2】语法格式

css复制代码<%@page>

可以放在JSP中任何位置,一般建议放在页面的最顶部

5.2、page指令的属性

【1】导包相关属性:

ini复制代码language="java" 当前页面使用的语言,不写默认是java
import="java.util.*" 导入java.util下所有类,导包

方式一: 每个page指令导入一个类

less复制代码<%@page import='java.text.SimpleDateFormat'>
<%@page import='java.util.Date'>

方式二: 一个page指令的import属性导入所有的包,包之间使用逗号分隔

ini复制代码<%@page import='java.util.Date,java.text.SimpleDateFormat'>

作用:相当于导包

【代码演示】

ini复制代码<%--<%@ page import='java.util.Date'>
<%@ page import='java.text.SimpleDateFormat'>
<%@ page import='java.util.ArrayList'>--%>
<%@ page import='java.util.*,java.text.SimpleDateFormat'>

<%-- created by intellij idea. date: 2018-10-10 time: 14:59 to change this template use file settings file templates. -->
<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


<%
    //创建日期对象
    Date date = new Date();
    SimpleDateFormat simpleDateFormat = new SimpleDateFormat();
    ArrayList list = new ArrayList<>();
%>



【2】与编码相关属性:

ini复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>

【作用】设置响应编码

vbscript复制代码response.setContentType("text/html;charset=UTF-8");

【3】与错误相关

相关属性:

ini复制代码1、errorPage="错误页面的URL":
    用于指定如果当前页面出错,转发到哪个页面去:<%@ page language='java' errorpage='error.jsp'>

2、isErrorPage="false":默认是false,指定true表示是错误页面
    当前这个页面是否是一个错误页面,错误页面可以多使用一个内置对象。exception:<%@ page iserrorpage='true'>

错误页面跳转的3种设置:

1、通过page指令的errorPage属性指定:如果页面出错,转发到error.jsp这个页面

ini复制代码<%@ page errorpage='error.jsp'>

代码演示:

typescript复制代码<%--跳转到错误页面--%>
<%@page errorpage='../error.jsp'>

<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


<% int i='1' 0>
    hello world


typescript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>
<%--声明是错误页面--%>
<%@page iserrorpage='true'>


    Title


    

错误页面

<%=exception.getmessage()%>

页面效果:

2、通过web.xml文件指定错误码:响应状态码为404则跳转到404.jsp页面

如果不指定,那么按照以前报错方式,会出现如下错误页面:

我们可以在web.xml进行配置跳转到更加好看一些的页面。

xml复制代码

    
    404
    
    /404.jsp

404.jsp页面代码:

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    


3、通过web.xml文件指定错误类型:发生空指针,则跳转到null.jsp页面

xml复制代码

    java.lang.NullPointerException
    /null.jsp


demo02.jsp

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    <% string s='null;' s.length>


报空指针异常后的页面:null.jsp

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    

发生空指针异常了

浏览器效果:

page指令小结:

属性名

作用


language="java"

指定JSP页面使用语言


**import="{package.class

package.*}"**

导入包: 1. 每个import包入一个包 2. 一个import导入多个包,使用逗号分隔

errorPage="relative_url"

当前页面出错,转发到哪个错误页面


**isErrorPage="true

false"**

当前是否是一个错误页面

contentType="mimeType [ ;charset=characterSet ]"

指定页面类型和编码,不指定会有乱码


**isELIgnored="true

false"**

是否忽略EL表达式,true表示EL不起作用

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java' iselignored='true'>


    Title


${3*5}


6、JSP常用动作标签

6.1、什么是动作标签

JSP动作标签利用XML语法格式的标记来控制Servlet引擎的行为 。利用JSP动作标签可以动态包含其他jsp页面、把用户跳转到另外的页面、为Java插件生成HTML代码。

6.2、常用动作标签

JSP页面动作标签很多,常用的主要有以下3种:

makefile复制代码:动态包含
:跳转 类似之前学习的转发技术
:参数设置

6.3、常用标签使用

【1】

【作用】

复制代码用于一个JSP页面动态包含另一个JSP页面

【语法】

ini复制代码 URL是被包含的JSP页面

【使用示例】

a.jsp

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    

我是A页面

<%int m1='10;'> <%@include file='b.jsp'> <%-- --%>

b.jsp

javascript复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    

我是B页面

<%int m='20;'>

【动态包含和静态包含】


静态包含include指令

动态包含include动作

语法格式

<%@include file='URL'>

包含的方式

静态包含包含的是页面的内容。如果A包含B,则先将B的页面内容复制到A页面中,再运行A页面。 B页面中不能出现与A页面同名的变量

动态包含包含的是页面的执行结果,如果A包含B,则先将B执行,再将B执行的结果包含到A页面中,执行A页面。 B页面中可以出现与A页面中同名的变量

生成Servlet个数

只能生成了一个Servlet

生成了两个Servlet

说明:

如果只是引入jsp,不需要改变,那么使用静态引入。如果引入的jsp页面是变化的,那么使用动态引入。

【2】

用于页面的转发,与
request.getRequestDispatcher("/URL").foward(request,response);功能一样的

ini复制代码 转发

【3】

用于给提供参数

ini复制代码

forward和param动作

目标

  1. forward作用
  2. param的功能

forward

  1. 功能:用于转发,相当于request.getRequestDispatcher("/URL").forward(request, response)
  2. 语法
ini复制代码

param

  1. 功能:给forward和include提供参数名和值
  2. 语法:做为子标签存在
  3. 需求:在c.jsp页面中使用转发标签forward转发到d.jsp页面。
  4. c.jsp页面
javascript复制代码<%-- created by intellij idea. date: 2018-10-10 time: 16:41 to change this template use file settings file templates. -->
<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    

c页面

<% //解决中文乱码问题 是在d.jsp后面携带数据跳转到d.jsp页面的,通过浏览器的,需要先按照UTF-8编码之后在进行传递。然后在d.jsp页面使用request.getParameter("username")获取数据 request.setCharacterEncoding("UTF-8"); //向域对象request中存储数据 request.setAttribute("age",19); %> <%--转发动作,携带的参数,可以在d.jsp上接收这参数,通过浏览器转发过去的,所以要想获取param携带的数据必须使用getparameter()方法获取数据--%>

d.jsp页面:

javascript复制代码<%-- created by intellij idea. date: 2018-10-10 time: 16:41 to change this template use file settings file templates. -->
<%@ page contenttype='text/html;charset=UTF-8' language='java'>


    Title


    

d页面

<%--获取request域对象中的数据--%> <%=request.getattribute("age")%> <%--获取转发param标签通过浏览器携带的数据--%> <%=request.getparameter("username")%>

案例演示

  1. 从c.jsp转发到d.jsp
  2. c在请求域中添加键和值,d看能够得到值并且输出
  3. c转发的时候带参数,username和age,在d中获取并且输出
  4. 汉字乱码问题的解决
  5. 转发,url地址栏并没有发生改变

效果

小结

  1. forward作用:在JSP页面上实现转发
  2. param的功能:在转发的时候提供其它的参数名和参数值

7、JSP页面常用对象

我们发现,我们在JSP页面中书写的代码最终都会翻译到_jspService()方法中,我们发现这个方法中有两个形参:HttpServletRequest对象HttpServletResponse对象 。所以说,JSP的本质就是一个Servlet。我们可以直接在JSP页面上使用这两个对象。

【需求】登录页面改造

改造登录后的页面,用户登陆失败以后,跳转到login.jsp,在jsp页面中动态显示用户登陆错误中的信息。

【思路】

  1. 登录失败后直接转发到一个jsp页面;
  2. 在jsp页面上使用request对象获取request中的值;

【LoginServlet代码】

说明:LoginServlet中,登录失败之后,直接转发到login.jsp页面。

ini复制代码protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //解决中文乱码问题
        request.setCharacterEncoding("utf-8");
        //获取用户名和密码
        String username = request.getParameter("username");
        String password = request.getParameter("password");
        UserServiceInter service = new UserServiceInterImpl();
        boolean result = service.login(username,password);
        String msg = result ? "用户登陆成功" : "用户登陆失败";
        request.setAttribute("msg",msg);
        if (result){
            response.sendRedirect("/success.html");
        }else {
            //转发到login.jsp页面
            request.getRequestDispatcher("/login.jsp").forward(request,response);
        }
    }

【login.jsp页面】

xml复制代码<%@ page contenttype='text/html;charset=UTF-8' language='java'>



    
    
    
    登录页面

    
    
    <script src="js/jquery.js"></script>
    <script src="js/bootstrap.js"></script>


<% string msg='(String)' request.getattributemsg>

说明:上述代码中:

css复制代码<%=msg%>

能够使用msg获取数据,因为编译之后存在于同一个类中,编译jsp如下所示:

效果图:浏览器访问login.html页面

登录密码输入错误:

小结:

  • JSP作用:给浏览器生成响应信息;
  • JSP特点:动态网页,html+java,由服务器来运行的。本质上是一个Servlet;
  • 书写Java代码的三种方式:
    • 脚本片段:java代码片段,在service方法中起作用。格式:<% system.out.printlnhello>;
    • 脚本表达式:直接在页面输出内容,在service方法中起作用,等价于out.print(内容)。格式:<%=>
    • 脚本声明:定义成员变量,方法。在当前类中都起作用。<%!int a='10;%'>
  • JSP页面常用的对象:request,response;

相关推荐

攀升战境S5电竞主机评测:NVIDIA RTX 3060实力助阵,光追游戏走起

此次笔者将为玩家们推荐一款游戏主机——攀升战境S5。该主机是攀升电脑今年力推的游戏装备,主机采用一线品牌配件,特别是在显卡选用上严苛把关,精选GeForceRTX30系列显卡,玩家们大可以放心选购...

慎买-神牛闪光灯兼容性问题:神牛V350&amp;松下S5M2

神牛V350和松下S5M2的兼容性问题。大家好,我是向往闪光灯人像的Fish。国庆期间,我购买了神牛V350闪光灯和神牛X2T引闪器,但这成为了我的噩梦。我原以为客服和松友们说这款闪光灯在松下S5M2...

Acer蜂鸟持续办公一整天(acer 蜂鸟s5)

移动办公在工作节奏日益加快的今天越来越普遍,目前大部分工作无法在手持设备上完成,笔记本依然是移动办公最明智的选择。为了实现移动办公,很多笔记本越做越轻薄,性能也越来越强,而续航却一直没有很大提升。笔者...

职业车手明年会骑什么?2021赛季各大世巡赛车队使用器材一览

新年的钟声即将敲响,意味着充满魔幻色彩的2020年即将过去。受新冠肺炎的影响,2020年的赛季非常不同寻常。因这一原因不得不延迟举行的各种比赛导致许多车队的赞助商无法得到足够曝光,这也间接导致了许多车...

三星部分手机系统升级路线图流出(三星系统在哪升级)

三星包括Note3和S5在内的手机在升级到4.4.2系统之后一直没有什么系统升级的消息,而最近流出的一张三星的系统升级路线图中出现了一共13台手机升级KTU84P(也就是Android4.4.4)...

索尼Xperia Z3配置大曝光:升级并不大

IT之家(www.ithome.com):索尼XperiaZ3配置大曝光:升级并不大索尼明天就会在IFA2014大会上发布其下代旗舰XperiaZ3智能手机,目前网上曝光了其原型机,并且机身背后...

不进反退 三星Exynos 5433只能运行32位模式?

三星GalaxyNote4将带有两个版本,除了国行使用的骁龙805以外,还有三星自家的Exynos5433版本。而这颗SoC的详细信息三星并没有公布,据外媒Anandtech称,他们从源码中确认...

尼康Z6III测评:对比EOS R6 II、A7M4、S5IIX

摄影器材测评网站DPReview刚刚发布了尼康Z6III的完整图文测评,该机获得金奖评级,得分达到91%。以下是该文章的摘录——尼康Z6III核心规格:2400万像素“部分堆栈式”传感器RAW连拍:机...

赛默飞Ion S5首批数据公布,玩爆前任PGMTM系列

北美时间9月1日,赛默飞发布了两款最新的NGS系统IonS5和IonS5XL,旨在提供更加简捷的靶向测序流程。10月29日IonS5测序仪的首批实验数据产生于阜外医院。阜外医院研究人员选用了主...

Excel技巧:快速制作批量文件夹,省时省力,加强工作效率

大家好,如果公司领导要求按人员姓名制作文件夹,以一人一档的形式呈现人员档案,办公人员一个一个制作费时费力,而且效力低下,今天为大家介绍快捷制作批量文件夹的方法下面我们用图片来进行演示操作打开表格,选...

国行、港版、美版Apple watch各版本售价一览

今天凌晨,苹果牌手表正式发布,苹果开始正式进入可穿戴设备领域,除了功能和外观,我相信大家更关心的是价格问题了,小编就将国行、港版、美版的Applewatch售价做一总结,以供参考。国行:美版:港版:...

松下全画幅微单S5和S1到底哪里不一样?

Hello,我是ET,欢迎大家来到我的“相机笔记”。————9月2日晚,松下正式发布了第4款全画幅微单LUMIXS5。这一篇,我们主要来说松下LUMIXS5和LUMIXS1到底有哪些区别...

融会贯通之典范 神舟S7-2021S5评测

便携、性能、续航,这简简单单的六个字道出了这么些年来笔记本电脑的设计方向,可是由于底层技术、模具设计等等原因,这三点并不能很好的融合在一起。虽说闻道有先后,术业有专攻,但能够有一台融会贯通的产品,不是...

三国志战略版:S5赛季装X指南,开荒不是一成不变,需要因地制宜

大家好我是零氪玩家花席,S5赛季已经开始,因为S5赛季的野地阵容和S4赛季没有区别,所以S5赛季开荒相对不难。你在S4有经验,并且多了很多武将和战法,还能用150赛季功勋兑换7500战法点。S5赛季新...

聊聊松下S5M2和S5M2X的区别(松下s5k和s5c有什么区别)

先简单说下哪里不同:12bitRAWHDMI外录支持直接将视频录制到USB-SSD上多了All-Intra和ProRes编码支持有线/无线IP推流,USB网络连接黑化的机身不过要特别强调一下,S5...