JSP程序设计-JSP语法
JSP技术简介

第1章JSP技术简介JSP(Java Server Pages)技术是由Sun公司发布的用于开发动态Web应用的一项技术。
它以其简单易学、跨平台的特性,在众多动态Web应用程序设计语言中异军突起,在短短几年中已经形成了一套完整的规范,并广泛地应用于电子商务等各个领域中。
在国内,JSP 现在也得到了比较广泛的重视,得到了很好的发展,越来越多的动态网站开始采用JSP技术。
本章就对JSP及其相关技术进行简单的介绍。
1.1 认识HTTP协议HTTP协议(Hypertext Transfer Protocol,超文本传送协议)是WWW服务器使用的主要协议,对HTTP协议细节的基本理解是编写JSP或Java小程序的开发人员所必需的。
因此在学习JSP技术之前有必要更加仔细地研究一下HTTP消息的格式(这里的讨论源自HTTP/1.1协议规范。
参见规范2616,网址为/rfc/rfc2616.txt)。
HTTP 协议的关键部分有HTTP请求和HTTP响应,以及客户端Web程序设计的一些基础知识,在第4章4.4节将会具体介绍。
1.2 客户端Web程序设计介绍Web浏览器现已成为深受大多数用户喜爱的用户界面。
HTML语言提供了丰富的控件,第三方厂商提供了Visual Basic编写的数百个额外的控件,这些都使得Web浏览器独具特色。
虽然Web浏览器与传统的GUI界面有一定的差距,但它提供了一种独立而又简单的方法来访问分布式资源,尤其是Internet资源。
而且越来越多的客户端Web程序扩展技术变得更加成熟,出现了包括CSS、JavaScript、VBScript、动态HTML、Java1.1.Applet应用程序等技术在内的客户端Web程序设计技术,它们的相互结合使得Web程序更加迷人。
下面简单介绍几种常用的客户端Web程序设计技术的特点。
本书假定读者对这些技术都有一定的了解,不对这些技术作详细介绍。
1.2.1 CSSCSS(Cascading Style Sheets)称为层叠样式表,是动态HTML技术的一个部分,但可以和HTML结合使用。
jsp网络编程课程设计

jsp网络编程课程设计一、课程目标知识目标:1. 掌握JSP(Java Server Pages)的基本概念、原理和编程方法;2. 理解JSP的运行环境,了解Web服务器的配置和调试;3. 学会使用JSP内置对象,如request、response、session等,实现客户端与服务器端的交互;4. 掌握JSP与JavaBean、Servlet的联合使用,实现MVC设计模式;5. 了解JSP的安全性和性能优化。
技能目标:1. 能够独立搭建JSP开发环境,配置Web服务器;2. 能够编写简单的JSP页面,实现数据的显示、提交和处理;3. 能够运用JSP内置对象进行页面间的数据传递和状态管理;4. 能够结合JavaBean和Servlet,设计并实现具有较高可维护性的JSP应用程序;5. 能够对JSP程序进行基本的调试和优化。
情感态度价值观目标:1. 培养学生对网络编程的兴趣,激发学生主动学习和探索的精神;2. 培养学生严谨、细心的编程习惯,提高学生的编程素养;3. 培养学生团队合作意识,学会与他人共同解决问题;4. 使学生认识到网络编程在现代社会中的重要性,增强学生的职业责任感。
课程性质:本课程为实践性较强的课程,旨在使学生掌握JSP网络编程的基本知识和技能,培养实际编程能力。
学生特点:学生已经具备一定的Java基础,了解基本的Web知识,但对JSP 编程尚属初学者。
教学要求:以实际应用为导向,注重理论与实践相结合,强化动手实践,培养学生解决实际问题的能力。
在教学过程中,注重引导学生主动学习,培养学生的创新思维和团队协作能力。
通过本课程的学习,使学生能够独立完成简单的JSP应用程序开发。
二、教学内容1. JSP基本概念与运行原理:介绍JSP的定义、特点,分析JSP的运行机制及与Servlet的关系。
教材章节:第1章 JSP概述。
2. JSP开发环境搭建:讲解JDK、Tomcat的安装与配置,创建并部署第一个JSP页面。
5.1 JSP概述

5.1 5.2 5.3 5.4 5.5 5.6
JSP概述 JSP语法 JSP隐含对象 JSP中的Java Bean组件 JSP连接数据库 JSP应用实例
1
5.1 JSP 概述
1、JSP技术简介 2、JSP运行环境 3、JSP组成 4、JSP使用范围 5、JSP生命周期 6、JSP开发示例
3
1、JSP技术简介
(3) JSP有什么优点? JSP简化了Web动态内容的传输,可以让Web 网页开发人员和设计人员非常容易的创建和维 护动态网页。JSP(Java Server Page)的出现使网 页的设计与开发变得更为灵活。 JSP技术把用户界面的设计与实现从系统中分 离出来,使得网页设计人员能够在不改变底层 动态内容的前提下改变整个网页布局。 对客户端的要求很低,只要有浏览器即可。
19
6、JSP开发示例
<title>用于定义标题,显示在浏览器的顶端。 <body>定义文件的格式,并在其中书写正文。 <h1>为一级标题标记,将字体变粗变大加宽 , 程度与级数反比。 <h3>为三级标题标记,将字体变粗变大加宽。 <!--注解--> 注释,不会在浏览器中显示出来。 <p> 段落标记,用于分段。
18
6、JSP开发示例
(4) 注意事项 注意url地址中的jsp后缀不要忘了。 运行jsp程序无需事先编译。只要将jsp程序放 在正确的目录中,并启动服务器即可。 (5) JSP程序相关内容 例5-1中的html标记成对出现。例如,以<html> 开头,以</html>结尾。 <html>标记用于声明一个html文件。 <head>用于提供文件的整体说明信息。
JSP页面构成

JSP页面构成如果用户接触过ASP或PHP,将会发现JSP的语法稍显复杂。
但是,如果有Java语言程序设计经验的用户,就会觉得JSP相当简单。
因为,JSP本身就是Java 语言中的一部分了,并且它基于Java语言的编程规范。
通过下列的代码,来了解一下在一个JSP页面中,都包含哪些元素。
下列的代通过上述一个简单的JSP页代码内容,可以非常轻松读懂页面中的内容。
尤其,对网页设计有一定基础的用户,更容易理解页面中的内容。
1.普通HTML标记HTML(Hypertext Markup Language,文本标记语言)是用于描述网页文档的一种标记语言,也是一种规范,一种标准。
HTML通过标记符号来标记要显示的网页中的各个部分,如文字如何处理、内容排列,图片如何显示等。
在HTML文档中,有他自己一套标准的文档结构。
他就像一个容器,可以在不同标记中放置不同的页面信息。
由上述代码,可以抽取出HTML的文档结构,如下在HTML文档中,首先要声明一个文档类型,就是上面文档结构中第一行。
其中,DOCTYPE是document type(文档类型)的简写,用来说明文档的XHTML或者HTML是什么版本,如HTML 4.01 Transitional//EN就是版本及说明,Transitional过度行,一般都是用Strict严格行或者Frameset框架行。
●Strict严格行要求严格的DTD,不能使用任何表现层的标识和属性。
●Frameset框架行专门针对框架页面设计使用的DTD,如果页面中包含有框架,需要采用这种DTD。
<html>和</html>是HTML文档的开始与结束,也是HTML文档的根元素。
除了文档类型外的所有页面内容,都包括在HTML元素中。
HTML文件中主要分为head头信息与body内容信息。
●head信息head头信息可以容纳文档的HTML相关信息,如标题(title标记)、页面的语言与文字类型、CSS样式、JavaScript脚本代码、简短描述、关键词等内容,是客户端无法直接看到的内容。
第05章 JSP指令和动作

在部署描述符文件中配置错误页面
在DD中配置错误页面需要使用<error-page>标签,它的子元素 有<exception-type>、<error-code>和<location> <error-page> <exception-type>ng.ArithmeticException </exception-type> <location>/error/arithmeticError.jsp</location> </error-page>
Jsp程序设计 第01章 JAVA WEB入门
page指令 8 isErrorPage属性
isErrorPage说明当前页面是否为异常处理页面。
如果值为“true”,说明是异常处理页面,能够使用 exception对象。 如果isErrorPage属性的值为“false”,说明不是异常处 理页面。
第05章 JSP指令和动作 主讲:朱会东
E-Mail:zhd168@
5.1 指令和动作
什么是指令?
指令(Directive):告诉 JSP 引擎在将JSP源文件解析 成Java文件时对 JSP 页面如何编译,JSP指令在 整个页面范围内有效,不包含控制逻辑,不会产生 任何可见的输出。其用法如下: <%@ 指令类别 属性 1= "属性值 1" 属性 n= " 属性值 n" %> • 注意,属性名大小写是敏感的
page指令
3 import属性
举例:date.jsp,获取当前的系统时间
<%@ page import="java.util.*"%> <!-- 先不加上面这句话演示--> <% Date d=new Date(); out.println(d.toLocaleString()); %>
动态网页设计(JSP)

计算Java表达式得到的结果被转换成字符串,然后插入到页面。 计算在运行时进行(页面被请求时),因此可以访问和请求有 关的全部信息。例如,下面的代码显示页面被请求的日期/时间: Current time: <%= new java.util.Date() %>
动态网页设计(JSP)
Java程序片
在Jsp中,在“<%”和 “%>”之间书写的程序代码为Java程序片 在程序片中声明的变量只在页面有效,是局部变量,不能共享。
但是,在 之间声明的变量可以在不同的客 户间共享,有效范围是整个Jsp页面,声明周期是服务器关闭后变量才会被 释放。
“<%!”和 “%>”
JSP表达式用来把Java数据直接插入到输出。其语法如下: <%= Java Expression %>
动态网页设计(JSP)
<jsp:plugin>
使用“<jsp:plugin>”插入一个applet或Bean,必要的话 还要下载一个Java插件用于执行它。
JSP 语法格式如下:
<jsp:plugin type="bean | applet" code="classFileName" codebase="classFileDirectoryName"
errorPage用来设定当JSP页面出现异常(Exception)时,所 要转向的页面。如果没有设定,则JSP容器会用默认的当 前网页来显示出错信息。例如: “<%@page errorPage="/error/error_page.jsp"%>”
isErrorPage用来设定当前的JSP页面是否作为传回错误页面 的网页,默认值是“false”。如果设定为“true”,则JSP容 器会在当前的页面中生成一个exception对象。
002 JavaWeb技术之JSP篇

JSP示例(Hello.jsp)
<%@ page contentType="text/html;charset=gb2312" %> <%@ page import="java.util.*"%> <HTML> <BODY> <% for ( int i=0; i<2; i++ ) { %> 你好<br> <% } %> </BODY> </HTML>
39
“peixun2.6.1.jsp”
<%@ page import="java.util.*" %> <%=(new java.util.Date() ).toLocaleString() %>
40
包含指令
41
Page指令
“Page”指令用于定义JSP文件中的全局属性。 JSP 语法格式如下: <%@ page [ language="java" ] [ extends="package.class" ] [import="{package.class | package.*},..." ] [ session="true | false" ] [ buffer="none | 8kb | sizekb" ]
35
break; case 2: out.println("You must select condition 2!"+"<br>"); break; default: out.println("Your select not in \"0,1,2\",select again!!"+"<br>"); } %> </body> </html>
Jsp详解

Jsp详解1.简介2.Jsp的运行原理3.Jsp的语法1.Jsp模板元素2.Jsp中的脚本表达式3.Jsp中的脚本片段4.Jsp的声明5.Jsp注释6.Jsp指令1.首先我们来看一下page指令的用法2.下面在来看一下include指令3.最后来看一下taglib指令7.Jsp中内置的9个隐式对象8.JSP标签库1.jspinclude标签2.jspforward标签3.jspparam或者jspparams标签4.jspuseBean标签jspsetProperty标签jspgetProperty标签9.Jsp中怎么排查错误简介:JSP全称是JavaServer Pages,它和servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术。
JSP这门技术的最大的特点在于,写jsp就像在写html,但:它相比html而言,html只能为用户提供静态数据,而Jsp技术允许在页面中嵌套java代码,为用户提供动态数据。
相比servlet而言,servlet很难对数据进行排版,而jsp除了可以用java代码产生动态数据的同时,也很容易对数据进行排版。
不管是JSP还是Servlet,虽然都可以用于开发动态web资源。
但由于这2门技术各自的特点,在长期的软件实践中,人们逐渐把servlet作为web应用中的控制器组件来使用,而把JSP技术作为数据显示模板来使用。
其原因为,程序的数据通常要美化后再输出:让jsp既用java代码产生动态数据,又做美化会导致页面难以维护。
让servlet既产生数据,又在里面嵌套html代码美化数据,同样也会导致程序可读性差,难以维护。
因此最好的办法就是根据这两门技术的特点,让它们各自负责各的,servlet只负责响应请求产生数据,并把数据通过转发技术带给jsp,数据的显示jsp来做。
Jsp的运行原理:目标:Web服务器是如何调用并执行一个jsp页面的?Jsp页面中的html排版标签是如何被发送到客户端的?Jsp页面中的java代码服务器是如何执行的?Web服务器在调用jsp时,会给jsp提供一些什么java对象?思考:JSP为什么可以像servlet一样,也可以叫做动态web资源的开发技术?其实Jsp就是一个Servlet,所以我们要先介绍Servlet的相关技术,当我们第一次访问Jsp 的时候,Jsp引擎都会将这个Jsp翻译成一个Servlet,这个文件存放在Tomcat中的work目录中,这里,我们新建一个MyJsp.jsp页面,然后访问以下,我们看一下翻译后的源码:1.<%@ page language="java"import="java.util.*"pageEncoding="utf-8"%>2.3.<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML4.01 Transitional//EN">4.<html>5.<head>6.7.<title>My JSP 'MyJsp.jsp' starting page</title>8.9.</head>10.11.<body>12. This is my JSP page. <br>13.</body>14.</html>1.package org.apache.jsp;2.3.import javax.servlet.*;4.import javax.servlet.http.*;5.import javax.servlet.jsp.*;6.import java.util.*;7.8.public final class MyJsp_jsp extends org.apache.jasper.runtime.HttpJspBase9.implements org.apache.jasper.runtime.JspSourceDependent {10.11.private static final JspFactory _jspxFactory = JspFactory.getDefaultFactory();12.13.private static java.util.List _jspx_dependants;14.15.private javax.el.ExpressionFactory _el_expressionfactory;16.private org.apache.AnnotationProcessor _jsp_annotationprocessor;17.18.public Object getDependants() {19.return _jspx_dependants;20. }21.22.public void _jspInit() {23. _el_expressionfactory = _jspxFactory.getJspApplicationContext(getServletConfig().getServletContext()).getExpressionFactory();24. _jsp_annotationprocessor = (org.apache.AnnotationProcessor) getServletConfig().getServletContext().getAttribute(org.apache.AnnotationProcessor.class .getName());25. }26.27.public void _jspDestroy() {28. }29.30.public void _jspService(HttpServletRequest request, HttpServletResponse response)31.throws java.io.IOException, ServletException {32.33. PageContext pageContext = null;34. HttpSession session = null;35. ServletContext application = null;36. ServletConfig config = null;37. JspWriter out = null;38. Object page = this;39. JspWriter _jspx_out = null;40. PageContext _jspx_page_context = null;41.42.43.try {44. response.setContentType("text/html;charset=utf-8");45. pageContext = _jspxFactory.getPageContext(this, request, response,46.null, true, 8192, true);47. _jspx_page_context = pageContext;48. application = pageContext.getServletContext();49. config = pageContext.getServletConfig();50. session = pageContext.getSession();51. out = pageContext.getOut();52. _jspx_out = out;53.54. out.write("\r\n");55. out.write("\r\n");56. out.write("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.01 Transitional//EN\">\r\n");57. out.write("<html>\r\n");58. out.write(" <head>\r\n");59. out.write(" \r\n");60. out.write(" <title>My JSP 'MyJsp.jsp' starting page</title>\r\n");61. out.write(" \r\n");62. out.write(" </head>\r\n");63. out.write(" \r\n");64. out.write(" <body>\r\n");65. out.write(" This is my JSP page. <br>\r\n");66. out.write(" </body>\r\n");67. out.write("</html>\r\n");68. } catch (Throwable t) {69.if (!(t instanceof SkipPageException)){70. out = _jspx_out;71.if (out != null && out.getBufferSize() != 0)72.try { out.clearBuffer(); } catch (java.io.IOException e) {}73.if (_jspx_page_context != null) _jspx_page_context.handlePageException(t);74. }75. } finally {76. _jspxFactory.releasePageContext(_jspx_page_context);77. }78. }79.}我们看到,这个类继承了org.apache.jasper.runtime.HttpJspBase,要想看到这个类的源码,我1./*2. * Licensed to the Apache Software Foundation (ASF) under one or more3. * contributor license agreements. See the NOTICE file distributed with4. * this work for additional information regarding copyright ownership.5. * The ASF licenses this file to You under the Apache License, Version 2.06. * (the "License"); you may not use this file except in compliance with7. * the License. You may obtain a copy of the License at8. *9. * /licenses/LICENSE-2.010. *11. * Unless required by applicable law or agreed to in writing, software12. * distributed under the License is distributed on an "AS IS" BASIS,13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.14. * See the License for the specific language governing permissions and15. * limitations under the License.16. */17.18.package org.apache.jasper.runtime;19.20.import java.io.IOException;21.22.import javax.servlet.ServletConfig;23.import javax.servlet.ServletException;24.import javax.servlet.http.HttpServlet;25.import javax.servlet.http.HttpServletRequest;26.import javax.servlet.http.HttpServletResponse;27.import javax.servlet.jsp.HttpJspPage;28.import javax.servlet.jsp.JspFactory;29.30.import piler.Localizer;31.32./**33. * This is the super class of all JSP-generated servlets.34. *35. * @author Anil K. Vijendran36. */37.public abstract class HttpJspBase38.extends HttpServlet39.implements HttpJspPage40.41.42.{43.44.protected HttpJspBase() {45. }46.47.public final void init(ServletConfig config)48.throws ServletException49. {50.super.init(config);51. jspInit();52. _jspInit();53. }54.55.public String getServletInfo() {56.return Localizer.getMessage("");57. }58.59.public final void destroy() {60. jspDestroy();61. _jspDestroy();62. }63.64./**65. * Entry point into service.66. */67.public final void service(HttpServletRequest request, HttpServletResponse response)68.throws ServletException, IOException69. {70. _jspService(request, response);71. }72.73.public void jspInit() {74. }75.76.public void _jspInit() {77. }78.79.public void jspDestroy() {80. }81.82.protected void _jspDestroy() {83. }84.85.public abstract void _jspService(HttpServletRequest request,86. HttpServletResponse response)87.throws ServletException, IOException;88.}好吧,看到了,继承了HttpServlet类,所以说其实Jsp就是一个ServletJsp的语法:1.JSP模版元素2.JSP表达式3.JSP脚本片段4.JSP注释5.JSP指令6.JSP标签7.JSP内置对象8.如何查找JSP页面中的错误Jsp模板元素JSP页面中的HTML内容称之为JSP模版元素。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
JSP语法
一.实验目的
1、掌握JSP页面的基本结构;
2、掌握怎样在JSP页面中使用include指令标记在JSP页面中静态插入一个文件的内容;
3、掌握怎样在JSP页面中使用include动作标记在JSP页面中动态加载一个文本文件和音频文件;二.实验内容与要求
实验1:消费总和
(1)在JSP页面showPriceSum.jsp中定义一个方法public double getPriceSum ( String
input),该方法可以返回参数input含有的各个数字的代数和。
比如String str ="麻辣豆腐:20. 6元,红烧肉:68.9元" ,那么getPriceSum(str)返回的值是89. 5。
(2) Java程序片中用String对象str封装表示菜单的字符序列。
(3)使用Java程序片显示str以及getPriceSum(mess)返回的值。
(4)在Tomcat服务器的webapps 目录下(比如,D: \apache tomcat-9. 0.26\webapps)新建名字是ch2_ practice_ one的Web服务目录。
把showPriceSum. jsp保存到ch2_ practice_ one目录中。
(5)用浏览器访问JSP页面showPriceSum. jsp。
实验2 听英语:
(1)页面time.jsp负责显示该页面被访问时的日期时间。
(2)编写JSP页面userTime. jsp,要求useTime. jsp使用include指令标记在当前页面中
嵌人time. jsp。
(3)在Tomcat服务器的webapps目录下(比如,D: \apache tomcat-9. 0. 26\webapps)新建名字是ch2_ practice_ two 的Web服务目录。
time. jsp和useTime. jsp保存到ch2_ practice_two目录中。
(4)用浏览器访问JSP页面userTime. jsp。
实验3 看电影:
(1)在Tomcat服务器的webapps目录下(比如,D: \apache tomcat-9. 0.26\webapps)新建名字是ch2_ practice_ three 的Web服务目录,在ch2_ practice_ three 目录下新建一个名字是english的目录。
(2)编写JSP页面listenEnglish. jsp,要求listenEnglish. jsp使用两个include动作标记分别加载一个文本文件english.txt和一个能播放音频文件english.mp3的JSP文件audio.jsp。
要求english. txt内容是一篇英文课文(编码是UTF-8) ,english. mp3是english. txt的英文朗读。
listenEnglish. jsp和audio. jsp保存在ch2_ practice_ three 目录中,english. txt和english. mp3保存在english目录中。
(3)用浏览器访问JSP页面listenEnglish. jsp。
三.实验代码与结果
实验1:
程序代码:
<%@ page contentType= "text/html" %>
<%@ page pageEncoding ="UTF-8" %>
<%@ page import= "java.util.regex.Pattern" %>
<%@ page import = "java.util.regex.Matcher" %>
<%!
public double getPriceSum (String input){
Pattern pattern;
Matcher matcher;
String regex="-?[0-9][0-9]*[.]?[0-9]*";
pattern = Pattern. compile(regex);
matcher = pattern. matcher(input);
double sum=0;
while(matcher.find()){
String str = matcher.group();
sum += Double.parseDouble(str);
}
return sum;
}
%>
<HTML><body bgcolor = cyan>
<p style="font-family:黑体;font-size:20">
<br>张三的菜单:</br>
<% String str= "麻辣豆腐:20.6元,红烧肉:68.9元";
%>
<br><%= str %></br>
<br><b><i>消费总和:<%= getPriceSum(str) %></i></b></br>
<br>李四的菜单: </br>
<% str= "剁椒鱼头:62.9元,烤鸭:199元,红焖大虾:289.9元"; %>
<br><%= str %></br>
<br><b><i>消费总和:<%= getPriceSum(str) %></i></b></br>
</p>
</body> </HTML>
运行截图:
实验2:
程序代码:
time.jsp:
<%@ page import = "java.time.LocalDate" %>
<%@ page import="java.time.LocalTime" %>
<%@ page pageEncoding ="UTF-8" %>
<%
LocalDate date = LocalDate.now();
LocalTime time = LocalTime.now();
%>
<h2>
用户在<%= date.getYear() %>/<%=date.getMonthValue()%>/
<%= date.getDayOfMonth() %><br>
<%= time.getHour() %>:<%= time.getMinute() %>:<%=time.getSecond() %>访问了网页. </h2>
userTime.jsp:
<%@ page contentType = "text/html"%>
<%@ page pageEncoding= "UTF-8"%>
<HTML><body>
<h1>显示访问网页的日期、时间<br>(服务器端的日期、时间)</h1>
<%@ include file= "time.jsp" %>
</body></HTML>
运行截图:
实验3:
程序代码:
audio.jsp:
<%@ page contentType = "text/html"%>
<%@ page pageEncoding= "UTF-8" %>
<HTML><body bgcolor= pink >
<embed src="english/english.mp3"autostart= false>
课文音频
</embed >
</body> </HTML>
listenEnglish.jsp:
<%@ page contentType = "text/html" %>
<%@ page pageEncoding= "UTF-8" %>
<HTML><body bgcolor = cyan >
<br>英文课文(English Text): </br>
<p style="font-family:宋体;font-size:18;color:black"> <jsp:include page="english/english.txt" />
<br>课文音频(English Audio): </br>
<jsp:include page="audio.jsp"/>
</p></body ></HTML>
运行截图:。