JSP详解

主要内容简介:

1.  JSP简介

        a)  什么是JSP

        b)  JSP的组成

        c)  JSP的特点

        d) JSP的执行过程

        e) JSP的生命周期

2. JSP语法

        a) JSP模板元素

        b) JSP表达式

        c) JSP脚本片段

        d) JSP注释

3.  JSP指令

        a) page指令

        b) Include指令

        c)  taglib指令

4. JSP九大内置(隐式)对象

5.JSP的四个域对象

6. JSP的正确使用方法

7.EL表达式详解(重点)

8.JSP标签(重点)

        a) 内置标签(动作标签):不需要在jsp页面导入标签

        b) include指令与include动作标签的区别

        c) JSTL标签:需要在jsp页面中导入标签

        d) 自定义标签:开发者自定义

一、JSP简介

1.什么是jsp

  • JSP全称是Java Server Pages,它和Servle技术一样,都是SUN公司定义的一种用于开发动态web资源的技术
  • JSP这门技术的最大的特点在于,写JSP就像写html,但:

相比html而言,(html只能为用户提供静态数据)JSP技术允许在页面中嵌套java代码,为用户提供动态数据。

 

相比servlet而言,jsp更容易对数据进行排版

 

 

2.       JSP的组成

JSP使用Java脚本(代码片段),html,还有JSP动态标签构成的组成的

(JSP就是Servlet)

问题:为什么Jsp就是servlet!!!

                            jsp翻译的java文件:

       

  publicfinal class _01_hello_jsp extends org.apache.jasper.runtime.HttpJspBaseimplements org.apache.jasper.runtime.JspSourceDependent {

 

         HttpJspBase类:

public abstract class org.apache.jasper.runtime.HttpJspBase 
extends javax.servlet.http.HttpServletimplements javax.servlet.jsp.HttpJspPage {

 

结论: Jsp就是一个servlet程序!!!

       servlet的技术可以用在jsp程序中

       jsp的技术并不是全部适用于servlet程序!

 

简单概念图

3.     JSP的特点:

1)jsp的运行必须交给tomcat服务器!!!!

                                                        tomcatwork目录: tomcat服务器存放jsp运行时的临时文件

                   2)jsp页面既可以写html代码,也可以写java代码。

                   (html页面不能写java代码 。而jsp页面可以写java代码)

 

 

4.        JSP的执行过程

a)浏览器访问JSP页面,tomcat扫描到JSP文件,在%tomcat%/work把jsp文件翻译成java源文件(翻译)

b)Tomcat服务器把java源文件编译成class字节码文件(编译)

c)Tomcat服务器构造该jsp对象

d)Tomcat服务器调用该jsp类中的方法,返回内容显示到浏览器

 

注意:只在第一次访问时需要 a,b ,c,d四步骤

第二次到n次只需要执行 d步骤。当jsp文件修改或零时文件被删除了需要重新走翻译(a编译(b的过程。

 

5.        JSP的生命周期(重点)

 

                     Servlet的生命周期:

                                   1)构造方法(第1次访问)

                                   2)init方法(第1次访问)

                                   3)service方法

                                   4)destroy方法            

                     Jsp的生命周期

                                   1)翻译: jsp->java文件

                                   2)编译: java文件->class文件(servlet程序)

                                   3)构造方法(第1次访问)

                                   4)init方法(第1次访问):_jspInit()

                                   5)service方法:_jspService()

                                   6)destroy方法:_jspDestroy()

二、JSP语法

1.      JSP模板

       JSP页面中的HTML内容称之为JSP模版元素。

JSP模版元素定义了网页的基本骨架,即定义了页面的结构和外观。

2.      JSP表达式(expression)

语法:<%= 变量或表达式%>

作用:用于将程序数据输出到客户端

<%= “hello world ”%> ==   <%   out.print( “hello world ”);   %>

注意:

1)表达式的原理其实就是吧语法中的内容翻译成out.print(“内容”);

通过该方法向浏览器写出内容

2)表达式中不能带分号

 

3.       JSP的脚本(scriptlet)

语法:<%    多行java代码    %>

作用:相当与在JSP翻译的Servlet类中的_jspService方法中写可以执行的代码。

注意

1)JSP脚本片断中只能出现java代码,不能出现其它模板元素, JSP引擎在翻译JSP页面中,会将JSP脚本片断中的Java代码将被原封不动地放到Servlet的_jspService方法中。

2)JSP脚本片断中的Java代码必须严格遵循Java语法,例如,每执行语句后面必须用分号(;)结束。

3)在一个JSP页面中可以有多个脚本片断,在两个或多个脚本片断之间可以嵌入文本、HTML标记和其他JSP元素。

         举例:

<%int x = 10;out.println(x);%><p>这是JSP页面文本</p><%int y = 20;out.println(y+””+x);%>

4)多个脚本片断中的代码可以相互访问,犹如将所有的代码放在一对<%%>之中的情况。如:out.println(x);

5)单个脚本片断中的Java语句可以是不完整的,但是,多个脚本片断组合后的结果必须是完整的Java语句,例如:

 

<%for (int i=1; i<5;i++){%><H1>helloword</H1><%}%>

 

4.      JSP的声明

语法:<%! 变量或方法 %>

作用:声明JSP的变量或方法(相当于在JSP翻译的Servlet类中写成员变量或方法)

注意:

1)JSP声明可用于定义JSP页面转换成的Servlet程序的静态代码块、成员变量和方法 。

 

2)多个静态代码块、变量和函数可以定义在一个JSP声明中,也可以分别单独定义在多个JSP声明中。

 

3)JSP隐式对象的作用范围仅限于Servlet的_jspService方法,所以在JSP声明中不能使用这些隐式对象。

 

<%!static{System.out.println("loadingServlet!");}private intglobalVar = 0;public voidjspInit(){System.out.println("initializingjsp!");}%><%!public voidjspDestroy(){System.out.println("destroyingjsp!");}%>

5.    JSP注释

语法:<%! --   jsp注释       --%>

注意:

                                     1)html的注释会被翻译和执行。而jsp的注释不能被翻译和执行。

2)在JSP声明,脚本,表达式中可以用java的注释

 

三、JSP三大指令(directive)

概念:JSP指令(directive)是为JSP引擎而设计的,它们并不直接产生任何可见输出,而只是告诉引擎如何处理JSP页面中的其余部分。在JSP 2.0规范中共定义了三个指令:

page指令

Include指令

taglib指令

 

JSP指令的基本语法格式:

         <%@指令属性名="" %>

         举例:

<%@ pagecontentType="text/html;charset=UTF-8"%>

如果一个指令有多个属性,这多个属性可以写在一个指令中,也可以分开写。

         例如:

                   

<%@ pagecontentType="text/html;charset=UTF-8"%><%@ pageimport="java.util.Date"%>

         也可以写作:

         

<%@ pagecontentType="text/html;charset=UTF-8"import="java.util.Date"%>

 

1.    page指令

1)page指令用于定义JSP页面的各种属性,无论page指令出现在JSP页面中的什么地方,它作用的都是整个JSP页面,为了保持程序的可读性和遵循良好的编程习惯,page指令最好是放在整个JSP页面的起始位置。

 

2)page指令中的各个属性

<%@ page

    language="java"   

--告诉服务器使用什么动态语言来翻译jsp文件

(当年sun公司想让jsp支持多种语言定义了,后来由于某种原因没有完成,所以只能翻译为java语言)

    import="java.util.*"

 --告诉服务器java文件使用什么包导入包,多个包之间用逗号分割(建议分开导入包)

    pageEncoding="utf-8" 

--告诉服务器使用什么编码翻译jsp文件(成java文件)

    contentType="text/html;charset=utf-8"

服务器发送浏览器的数据类型和内容编码

    注意:在开发工具中,以后只需要设置pageEncoding即可解决中文乱码问题

与异常错误相关的:

    errorPage="error.jsp"

    isErrorPage="false"

         Web.xml中配置全局的错误处理页面:(常用)

                                                                

  <!-- 全局错误处理页面配置 -->

  <error-page>

<!-- 建议500错误使用JSP页面,因为500错误是动态的,不定的所以适合用jsp页面 -->

    <error-code>500</error-code>

    <location>/common/500.jsp</location>

  </error-page>

  <error-page>

 <!-- 404错误只有地址错误一种可能所以适合用同一个html页面 -->

    <error-code>404</error-code>

    <location>/common/404.html</location>

  </error-page>

 

 

    buffer="8kb"  

 设置jsp页面缓存大小,因为jsp页面有JSPWriter缓存机制,数据先会写到JSPWriter缓存中,然后一定条件下才会写入页面,所以如果不需要缓存机制   可以设置为  “0kb”

 

 

    session="true"   

是否开启session功能。false,不能用session内置对象;true,可以使用session内置对象。

 

    isELIgnored="false"  

 是否忽略EL表达式

    %>

 

2.    include指令(静态包含)

原理: include指令用于引入其它JSP页面,如果使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet所以include指令引入通常也称之为静态引入

语法:

         <%@ includefile="relativeURL"%>

         其中的file属性用于指定被引入文件的相对路径。  file属性的设置值必须使用相对路径,如果以“/”开头,表示相对于当前WEB应用程序的根目录(注意不是站点根目录),否则,表示相对于当前文件。

 

细节:

被引入的文件必须遵循JSP语法。

被引入的文件可以使用任意的扩展名,即使其扩展名是html,JSP引擎也会按照处理jsp页面的方式处理它里面的内容,为了见明知意,JSP规范建议使用.jspfJSP fragments)作为静态引入文件的扩展名。

由于使用include指令将会涉及到2JSP页面,并会把2JSP翻译成一个servlet,所以这2JSP页面的指令不能冲突(除了pageEncoding和导包除外)。

(其实就是相当于吧两个JSP中的内容翻译到一个servlet中从生成的jspServlet文件中可以看出其实相当于把所有的信息原封不动的拿了过来。这就有可能导致当定义两个相同名称的变量是会出现错误

    

  out.write('\r');out.write('\n');out.write("\r\n");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("<metahttp-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\r\n");out.write("<title>Insert titlehere</title>\r\n");out.write("</head>\r\n");out.write("<body>\r\n");out.write("\tHello ");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("<metahttp-equiv=\"Content-Type\" content=\"text/html;charset=UTF-8\">\r\n");out.write("<title>Insert titlehere</title>\r\n");out.write("</head>\r\n");out.write("<body>\r\n");out.write(" world\r\n");out.write("</body>\r\n");out.write("</html>");out.write("\r\n");out.write("</body>\r\n");                          out.write("</html>");

网页源代码

 

 

3.   taglib指令

 

 

四、JSP的九大内置(隐式)对象(重点

1.    什么是内置对象

在jsp开发中,会频繁使用到一些对象例如:

HttpSession

ServletContext,

ServletContext,

HttpServletRequet。

如果我们每次要使用这些对象都要去创建这些对象就会显得有点麻烦,所以sun公司设计jsp时,在jsp页面加载完毕之后就会自动帮开发者创建好这些对象,而开发者只需要直接使用这些对象调用方法即可!,这些创建好的对象就叫内置对象

举例:

         servlet:

                   HttpSessionsession = request.getSession(true); (需要开发者做)

                                    

         jsp:

                   tomcat服务器:    HttpSession session =request.getSession(true);(不需要开发者做)

                                                       

开发者做的: session.getId();

2.    九大内置对象

request            HttpServletRequest                 ----|

response          HttpServletResponse              ----|

session              HttpSession                           ----|--------servlet中也可以用的五个对象

application      ServletcContext                       ----|

config                     ServletConfig                   ----|

 

 

exception                   Throwable  (当设置page指令的isErorrPage属性是才可以使用)

page                           Object(this) (本JSP页面)

out                              JspWriter (带缓冲的PrintWriter

pageContext               PageContext (使普通Java类可访问WEB资源,自定义标签常用)

 

 

内置对象特点:

        1. 由JSP规范提供,不用编写者实例化。

        2. 通过Web容器实现和管理

        3. 所有JSP页面均可使用

        4. 只有在脚本元素的表达式或代码段中才可使用(<%=使用内置对象%>或<%使用内置对象%>)

 内置对象可分为四类:

        1. 输出输入对象:request对象、response对象、out对象

        2. 通信控制对象:pageContext对象、session对象、application对象

        3. Servlet对象:page对象、config对象

        4. 错误处理对象:exception对象

 

对象常用方法说明:

1.request对象(请求信息 javax.servlet.http.HttpServletrequest)


方法名

描述

isUserInRole

判断认证后的用户是否属于某一成员组

getAttribute

获取指定属性的值,如该属性值不存在返回Null

getAttributeNames

获取所有属性名的集合

getCookies

获取所有Cookie对象

getCharacterEncoding

获取请求的字符编码方式

getContentLength

返回请求正文的长度,如不确定返回-1

getHeader

获取指定名字报头值

getHeaders

获取指定名字报头的所有值,一个枚举

getHeaderNames

获取所有报头的名字,一个枚举

getInputStream

返回请求输入流,获取请求中的数据

getMethod

获取客户端向服务器端传送数据的方法

getParameter

获取指定名字参数值

getParameterNames

获取所有参数的名字,一个枚举

getParameterValues

获取指定名字参数的所有值

getProtocol

获取客户端向服务器端传送数据的协议名称

getQueryString

获取以get方法向服务器传送的查询字符串

getRequestURI

获取发出请求字符串的客户端地址

getRemoteAddr

获取客户端的IP地址

getRemoteHost

获取客户端的名字

getSession

获取和请求相关的会话

getServerName

获取服务器的名字

getServerPath

获取客户端请求文件的路径

getServerPort

获取服务器的端口号

removeAttribute

删除请求中的一个属性

setAttribute

设置指定名字参数值


 特点:Request(Javax.servlet.ServletRequest)它包含了有关浏览器请求的信息.通过该对象可以获得请求中的头信息、Cookie和请求参数。

2.response对象(响应 javax.servlet.http.HttpServletResponse)

方法名

描述

addCookie

添加一个Cookie对象

addHeader

添加Http文件指定名字头信息

containsHeader

判断指定名字Http文件头信息是否存在

encodeURL

使用sessionid封装URL

flushBuffer

强制把当前缓冲区内容发送到客户端

getBufferSize

返回缓冲区大小

getOutputStream

返回到客户端的输出流对象

sendError

向客户端发送错误信息

sendRedirect

把响应发送到另一个位置进行处理

setContentType

设置响应的MIME类型

setHeader

设置指定名字的Http文件头信息


 特点Response(Javax.servlet.ServletResponse)作为JSP页面处理结果返回给用户的响应存储在该对象中。并提供了设置响应内容、响应头以及重定向的方法(如cookies,头信息等)

3.session对象(会话 javax.servlet.http.HttpSession)

方法名

描述

getAttribute

获取指定名字的属性

getAttributeNames

获取session中全部属性名字,一个枚举

getCreationTime

返回session的创建时间

getId

获取会话标识符

getLastAccessedTime

返回最后发送请求的时间

getMaxInactiveInterval

返回session对象的生存时间单位千分之一秒

invalidate

销毁session对象

isNew

每个请求是否会产生新的session对象

removeAttribute

删除指定名字的属性

setAttribute

设定指定名字的属性值

  特点:Session(javax.servlet.http.HttpSession)会话对象存储有关此会话的信息,也可以将属性赋给一个会话,每个属性都有名称和值。会话对象主要用于存储和检索属性值。

4.application对象(应用程序 javax.servlet.ServletContext)

方法名

描述

getAttribute

获取应用对象中指定名字的属性值

getAttributeNames

获取应用对象中所有属性的名字,一个枚举

getInitParameter

返回应用对象中指定名字的初始参数值

getServletInfo

返回Servlet编译器中当前版本信息

setAttribute

设置应用对象中指定名字的属性值


 特点:Application(javax.servle.ServletContext)存储了运行JSP页面的servlet以及在同一应用程序中的任何Web组件的上下文信息。

5.config对象(Servlet的配置信息 javax.servlet.ServletConfig)

方法名

描述

getServletContext

返回所执行的Servlet的环境对象

getServletName

返回所执行的Servlet的名字

getInitParameter

返回指定名字的初始参数值

getInitParameterNames

返回该JSP中所有的初始参数名,一个枚举


 特点:Config(javax.servlet.ServletConfig)该对象用于存取servlet实例的初始化参数。

6.page对象(当前JSP的实例,java.lang.object)

它代表JSP被编译成Servlet,可以使用它来调用Servlet类中所定义的方法

特点:Page(Java.lang.Object)表示当前JSP页面的servlet实例

可以用他来获取整个类中的所有方法和成员变量(反射)

7.out对象(数据流 javax.servlet.jsp.jspWriter)(重点)

方法名

描述

printprintln

输出数据

newLine

输出换行字符

flush

输出缓冲区数据

close

关闭输出流

clear

清除缓冲区中数据,但不输出到客户端

clearBuffer

清除缓冲区中数据,输出到客户端

getBufferSize

获得缓冲区大小

getRemaining

获得缓冲区中没有被占用的空间

isAutoFlush

是否为自动输出


1.用于将内容写入JSP页面实例的输出流中,提供了几个方法使你能用于向浏览器回送输出结果。特点:Out(Javax.servlet.jsp.JspWriter)

 

2.out对象是通过调用pageContext对象的getOut方法返回的,其作用和用法与ServletResponse.getWriter方法返回的PrintWriter对象非常相似。

 

3.JSP页面中的out隐式对象的类型为JspWriter,JspWriter相当于一种带缓存功能的PrintWriter,设置JSP页面的page指令的buffer属性可以调整它的缓存大小,甚至关闭它的缓存。

 

4.只有向out对象中写入了内容,且满足如下任何一个条件时,out对象才去调用ServletResponse.getWriter方法,并通过该方法返回的PrintWriter对象将out对象的缓冲区中的内容真正写入到Servlet引擎提供的缓冲区中:

 

  •  设置page指令的buffer属性关闭了out对象的缓存功能
  •  out对象的缓冲区已满
  •  整个JSP页面结束

out隐式对象工作原理

8.pageContext对象(页面上下文 javax.servlet.jsp.PageContext)

方法名

描述

forward

重定向到另一页面或Servlet组件

getAttribute

获取某范围中指定名字的属性值

findAttribute

按范围搜索指定名字的属性,先后查找各个域中的属性

removeAttribute

删除某范围中指定名字的属性

setAttribute

设定某范围中指定名字的属性值

getException

返回当前异常对象

getRequest

返回当前请求对象

getResponse

返回当前响应对象

getServletConfig

返回当前页面的ServletConfig对象

getServletContext

返回所有页面共享的ServletContext对象

getSession

返回当前页面的会话对象


常见的用法:

特点:   pageContext对象的类型是PageContext,叫jsp的上下文对象

  1)可以获取其他八个内置对象

 

                            publicclass 01_hello_jsp {publicvoid _jspService(request,response){创建内置对象HttpSessionsession =....;ServletConfigconfig = ....;把8个经常使用的内置对象封装到PageContext对象中PageContextpageContext  = 封装;调用method1方法method1(pageContext);}publicvoid method1(PageContext pageContext){希望使用内置对象从PageContext对象中获取其他8个内置对象JspWriterout =pageContext.getOut();HttpServletRequestrquest =           pageContext.getRequest();........}}

                使用场景:在自定义标签的时候,PageContext对象频繁使用到!!!

     2)本身是一个域对象

                   ServletContextcontext域

                   HttpServletRequet  request域

                   HttpSession    session域     --Servlet学习的

                   PageContext   page        --jsp学习的

                                    

 

         作用:保存数据和获取数据,用于共享数据

 

         #保存数据

                            )默认情况下,保存到page域

                            pageContext.setAttribute("name");

                            2)可以向四个域对象保存数据

                                     pageContext.setAttribute("name",域范围常量)

 

         #获取数据

                   1)默认情况下,从page域获取

                                     pageContext.getAttribute("name")

                   2)可以从四个域中获取数据

                                     pageContext.getAttribute("name",域范围常量)

等价于    

域对象.getAttribute(“name”)

 

                   域范围常量:(可以使用pageContext.setAttribute(key,value,域范围常量)来设置添加的数据添加到那个域)

                   PageContext.PAGE_SCOPE

                   PageContext.REQUEST_SCOPE

                   PageContext..SESSION_SCOPE

                   PageContext.APPLICATION_SCOPE

         3)自动在四个域中搜索数据(从作用域最低的域开始找)

        

pageContext.findAttribute("name");

顺序: page ->request -> session- >context域(application域)    

4)引入和跳转到其他资源(重点)

PageContext类中定义了一个forward方法和两个include方法来分别简化和替代RequestDispatcher.forward方法和include方法

传递给这些方法的资源路径,如果路径以“/”开头,表示相对于当前WEB应用程序的根目录,否则,表示相对于当前JSP所映射到的访问路径。

 

 

 

9.exception对象(运行时的异常,java.lang.Throwable)

被调用的错误页面的结果,只有在错误页面中才可使用,

即在页面指令中设置:<%@page isErrorPage=“true”%>

 

Exception(Javax.lang.Throwable)在某个页面抛出异常时,将转发至JSP错误页面,提供此对象是为了在JSP中处理错误。只有在错误页面中才可使用<%@page isErrorPage=“true”%>

 

 

 

Jsp内置对象

功能

主要方法

out

向客户端输出数据

print() println() flush() clear() isAutoFlush() getBufferSize()   close() …………

request

向客户端请求数据

getAttributeNames() getCookies() getParameter() getParameterValues() setAttribute() getServletPath() …………..

response

封装了jsp产生的响应,然后被发送到客户端以响应客户的请求

addCookie() sendRedirect() setContentType()

flushBuffer() getBufferSize() getOutputStream()

sendError() containsHeader()……………

application

 

 

config

表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet

getServletContext() getServletName() getInitParameter()   getInitParameterNames()……………

page

Jsp实现类的实例,它是jsp本身,通过这个可以对它进行访问

flush()………

pagecontext

为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中己经命名对象的该问

forward() getAttribute() getException() getRequest() getResponse()   getServletConfig()

getSession() getServletContext() setAttribute()

removeAttribute() findAttribute() ……………

session

用来保存每个用户的信息,以便跟踪每个用户的操作状态

getAttribute() getId()   getAttributeNames() getCreateTime() getMaxInactiveInterval()

invalidate() isNew()

exception

反映运行的异常

getMessage()…………


 

 

五、JSP的四个域对象

pageContext          page(jsp有效)     pageContext.

request               request(一次请求)   HttpServletRequest

Session                session(一次会话)     HTTPSession

Application       Context(当前web应用)   ServletContext

之所以他们是域对象,原因就是他们都内置了map集合,都有setAttribute getAttribute方法。

他们都有自己固定的生命周期和作用域。这四个对象的生命周期(生命周期就是值对象的创建到销毁的期间)。

四个域对象的生命周期:

·        page:jsp页面被执行,生命周期开始,jsp页面执行完毕,声明周期结束。

·        request:用户发送一个请求,开始,服务器返回响应,请求结束,生命周期结束。

·        session:用户打开浏览器访问,创建session(开始),session超时或被声明失效,该对象生命周期结束。

·        application:web应用加载的时候创建。Web应用被移除或服务器关闭,对象销毁。[结束]。

注意:

·        Page只在当前jsp有效,每次请求分别对应不同的request。

·        Request只在当前请求有效,每次请求分别对应不同的request域。

·        Session只在一次会话中有效,会话结束就无法取到数据了。

四个域对象在选择的时候,能用范围小的绝不用范围大的:

page:数据只是暂时存在集合,在jsp页面的其他地方要用,用page(页面中自定义的map)。

Request:数据只是做显示的,看完了就没用了。就存request域,请求转发,Servlet产生的处理结果(数据)交给jsp显示,数据转发可以带数据。

Session:数据给用户看完了,一定还要用,会话结束了就没用了。用户登录,用户信息发给客户端看,看完了,一会访问别的页面还要看用户信息。 购物车,购物车成功了,给用户看购物车,待会随时间可以查看购物车。 请求重定向,因为是两次请求,每一次请求的数据,第二次请求还要看。

application:数据给一个用户用完了,别人还要用。聊天室,聊天记录,需要给所有的用户看。 统计网站在线人数,所有看到的应该是一个数。

总结:

1)域对象作用:

         保存数据  和 获取数据 ,用于数据共享。

 

2)域对象方法:

         setAttribute("name",Object)保存数据

         getAttribute("name")  获取数据

         removeAttribute("name")清除数据

 

3)域对象作用范围:

         page域:只能在当前jsp页面中使用(当前页面)

         request域:只能在同一个请求中使用(转发)

         session域:只能在同一个会话(session对象)中使用(私有的)

         context域:只能在同一个web应用中使用。(全局的)

 

四个域对象在选择的时候,能用范围小的绝不用范围大的。需要定义Map时不如用page,请求Servlet,转发给jsp的数据存request,请求重定向带过去的数据存Session,全局的数据存application。

六、JSP的正确使用方法

         Servlet技术: 开发动态资源。是一个java类,最擅长写java代码

                                     jsp技术: 开发动态资源。通过java代码最擅长输出html代码。

(尽量在jsp页面中少写甚至不写java代码。)

 

                                     各取所长:

                                               在web项目中涉及到逻辑:

                                                        1)接收参数     servlet

                                                        2)处理业务逻辑,返回结果    servlet

                                                        3)显示数据到浏览器      jsp

                                                        4)跳转到其他页面       servlet

 

 

                                      servlet+jsp模式

 

                                      servlet:

                                                        1)接收参数

                                                        2)处理业务逻辑

                                                        3)把结果保存到域对象中

                                                        4)跳转到jsp页面

                                               Jsp:

                                                        1)从域对象取出数据

                                                        2)把数据显示到浏览器

 

                                     servlet的数据    ->   jsp页面

                                     List<Contact>    使用域对象共享数据

 

 

七、EL表达式 Expression  Language

EL表达式的主要作用:

1. 获取(域对象中的)数据:

EL表达式主要用于替换JSP页面中的脚本表达式,以从各种类型的web域中检索java对象、获取数据。(某个web中的对象,访问javabean的属性、访问list集合、访问map集合、访问数组)

EL既可以用来创建算术表达式也可以用来创建逻辑表达式。在JSPEL表达式内可以使用整型数,浮点数,字符串,常量true、false,还有null。


一个简单的语法

典型的,当您需要在JSP标签中指定一个属性值时,只需要简单地使用字符串即可:

<jsp:setProperty name="box" property="perimeter" value="100"/>

JSP EL允许您指定一个表达式来表示属性值。一个简单的表达式语法如下:

${expr}

其中,expr指的是表达式。在JSPEL中通用的操作符是 . 和 {} 。这两个操作符允许您通过内嵌的JSP对象访问各种各样的JavaBean属性。

举例来说,上面的<jsp:setProperty>标签可以使用表达式语言改写成如下形式:

<jsp:setProperty name="box" property="perimeter" 
                 value="${2*box.width+2*box.height}"/>

当JSP编译器在属性中见到"${}"格式后,它会产生代码来计算这个表达式,并且产生一个替代品来代替表达式的值。

您也可以在标签的模板文本中使用表达式语言。比如<jsp:text>标签简单地将其主体中的文本插入到JSP输出中:

<jsp:text><h1>Hello JSP!</h1></jsp:text>

现在,在<jsp:text>标签主体中使用表达式,就像这样:

<jsp:text>
Box Perimeter is: ${2*box.width + 2*box.height}</jsp:text>

在EL表达式中可以使用圆括号来组织子表达式。比如${(1 + 2) * 3}等于9,但是${1+ (2 * 3)} 等于7。

想要停用对EL表达式的评估的话,需要使用page指令将isELIgnored属性值设为true:

<%@ page isELIgnored ="true|false" %>

这样,EL表达式就会被忽略。若设为false,则容器将会计算EL表达式。


EL中的基础操作符

EL表达式支持大部分Java所提供的算术和逻辑操作符:

操作符

描述

.

访问一个Bean属性或者一个映射条目

[]  重点

访问一个数组或者链表的元素      可以传入带敏感字符的变量名

( )

组织一个子表达式以改变优先级

+

-

减或负

*

/ or div

% or mod

取模

== or eq

测试是否相等

!= or ne

测试是否不等

< or lt

测试是否小于

> or gt

测试是否大于

<= or le

测试是否小于等于

>= or ge

测试是否大于等于

&& or and

测试逻辑与

|| or or

测试逻辑或

! or not

测试取反

empty

测试是否空值


 

el表达式的使用

${变量}

输出普通字符串: ${name}

输出对象属性:  ${student.name}  注意: .name 相当于  .getName()方法

输出List集合:   ${list[0].name }   注意: [0]  相当于 get(下标)方法

输出map集合:  ${map[key].name}  注意: [key]相当于get(key)方法

注意:[ ]可在el表达式中输出带敏感字符的变量名${requestScope["Accept-Language"]}

 

JSP EL中的函数

JSP EL允许您在表达式中使用函数。这些函数必须被定义在自定义标签库中。函数的使用语法如下:

${ns:func(param1, param2, ...)}

ns指的是命名空间(namespace),func指的是函数的名称,param1指的是第一个参数,param2指的是第二个参数,以此类推。比如,有函数fn:length,在JSTL库中定义,可以像下面这样来获取一个字符串的长度:

${fn:length("Get my length")}

要使用任何标签库中的函数,您需要将这些库安装在服务器中,然后使用<taglib>标签在JSP文件中包含这些库。


JSP EL隐含对象

JSP EL支持下表列出的隐含对象:

隐含对象

描述

pageScope

page 作用域

requestScope

request 作用域

sessionScope

session 作用域

applicationScope

application 作用域

param

Request 对象的参数,字符串

paramValues

Request对象的参数,字符串集合

header

HTTP 信息头,字符串

headerValues

HTTP 信息头,字符串集合

initParam

上下文初始化参数

cookie

Cookie

pageContext

当前页面的pageContext可以获取任何域对象

您可以在表达式中使用这些对象,就像使用变量一样。接下来会给出几个例子来更好的理解这个概念。


pageContext对象

pageContext对象是JSP中pageContext对象的引用。通过pageContext对象,您可以访问request对象。比如,访问request对象传入的查询字符串,就像这样:

${pageContext.request.queryString}

Scope对象

pageScope,requestScope,sessionScope,applicationScope变量用来访问存储在各个作用域层次的变量。

举例来说,如果您需要显式访问在applicationScope层的box变量,可以这样来访问:applicationScope.box。


param和paramValues对象

param和paramValues对象用来访问参数值,通过使用request.getParameter方法和request.getParameterValues方法。

举例来说,访问一个名为order的参数,可以这样使用表达式:${param.order},或者${param["order"]}。

接下来的例子表明了如何访问request中的username参数:

<%@ page import="java.io.*,java.util.*" %><%
    String title = "Accessing Request Param";
%><html><head><title><% out.print(title); %></title></head><body><center><h1><% out.print(title); %></h1></center><div align="center"><p>${param["username"]}</p></div></body></html>

param对象返回单一的字符串,而paramValues对象则返回一个字符串数组。


header和headerValues对象

header和headerValues对象用来访问信息头,通过使用 request.getHeader方法和request.getHeaders方法。

举例来说,要访问一个名为user-agent的信息头,可以这样使用表达式:${header.user-agent},或者${header["user-agent"]}。

接下来的例子表明了如何访问user-agent信息头:

<%@ page import="java.io.*,java.util.*" %><%
    String title = "User Agent Example";
%><html><head><title><% out.print(title); %></title></head><body><center><h1><% out.print(title); %></h1></center><div align="center"><p>${header["user-agent"]}</p></div></body></html>

 

 

 

 

八、JSP标签(重点)

1. JSP标签的作用

替换jsp脚本

 

1)流程判断(if   for循环)

2)跳转页面(转发,重定向)

2.JSP标签的分类

1)内置标签(动作标签):不需要在jsp页面导入标签

2JSTL标签:需要在jsp页面中导入标签

3)自定义标签开发者自行定义,需要在jsp页面导入标签

 

动作标签:

该部分内容引用自菜鸟教程

与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。

利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。

动作元素只有一种语法,它符合XML标准:

<jsp:action_name attribute="value" />

动作元素基本上都是预定义的函数,JSP规范定义了一系列的标准动作,它用JSP作为前缀,可用的标准动作元素如下:

语法

描述

jsp:include

在页面被请求的时候引入一个文件。

jsp:useBean

寻找或者实例化一个JavaBean

jsp:setProperty

设置JavaBean的属性。

jsp:getProperty

输出某个JavaBean的属性。

jsp:forward

把请求转到一个新的页面。

jsp:plugin

根据浏览器类型为Java插件生成OBJECT或EMBED标记。

jsp:element

定义动态XML元素

jsp:attribute

设置动态定义的XML元素属性。

jsp:body

设置动态定义的XML元素内容。

jsp:text

在JSP页面和文档中使用写入文本的模板


常见的属性

所有的动作要素都有两个属性:id属性和scope属性。

·        id属性:

id属性是动作元素的唯一标识,可以在JSP页面中引用。动作元素创建的id值可以通过PageContext来调用。

·        scope属性:

该属性用于识别动作元素的生命周期。 id属性和scope属性有直接关系,scope属性定义了相关联id对象的寿命。 scope属性有四个可能的值: (a) page, (b)request, (c)session, 和 (d)application。

·         

·         


<jsp:include>动作元素

<jsp:include>动作元素用来包含静态和动态的文件。该动作把指定文件插入正在生成的页面。语法格式如下:

<jsp:include page="相对 URL 地址" flush="true" />

 前面已经介绍过include指令,它是在JSP文件被转换成Servlet的时候引入文件,而这里的jsp:include动作不同,插入文件的时间是在页面被请求的时候。

以下是include动作相关的属性列表。

属性

描述

page

包含在页面中的相对URL地址。

flush

布尔属性,定义在包含资源前是否刷新缓存区。

实例

以下我们定义了两个文件 date.jsp 和 main.jsp,代码如下所示:

date.jsp文件代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%></p>

main.jsp文件代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body>
<h2>include 动作实例</h2><jsp:include page="date.jsp" flush="true" />
</body></html>

现在将以上两个文件放在服务器的根目录下,访问main.jsp文件。显示结果如下:

include 动作实例
今天的日期是: 2016-6-25 14:08:17

<jsp:useBean>动作元素

jsp:useBean 动作用来加载一个将在JSP页面中使用的JavaBean。

这个功能非常有用,因为它使得我们可以发挥 Java 组件复用的优势。

jsp:useBean动作最简单的语法为:

<jsp:useBean id="name" class="package.class" />

在类载入后,我们既可以通过 jsp:setProperty 和 jsp:getProperty 动作来修改和检索bean的属性。

以下是useBean动作相关的属性列表。

属性

描述

class

指定Bean的完整包名。

type

指定将引用该对象变量的类型。

beanName

通过 java.beans.Beans 的 instantiate() 方法指定Bean的名字。

在给出具体实例前,让我们先来看下 jsp:setProperty 和 jsp:getProperty 动作元素:


<jsp:setProperty>动作元素

jsp:setProperty用来设置已经实例化的Bean对象的属性,有两种用法。首先,你可以在jsp:useBean元素的外面(后面)使用jsp:setProperty,如下所示:

<jsp:useBean id="myName" ... />
...<jsp:setProperty name="myName" property="someProperty" .../>

此时,不管jsp:useBean是找到了一个现有的Bean,还是新创建了一个Bean实例,jsp:setProperty都会执行。第二种用法是把jsp:setProperty放入jsp:useBean元素的内部,如下所示:

<jsp:useBean id="myName" ... >
...
   <jsp:setProperty name="myName" property="someProperty" .../></jsp:useBean>

此时,jsp:setProperty只有在新建Bean实例时才会执行,如果是使用现有实例则不执行jsp:setProperty。

jsp:setProperty动作有下面四个属性,如下表:

属性

描述

name

name属性是必需的。它表示要设置属性的是哪个Bean

property

property属性是必需的。它表示要设置哪个属性。有一个特殊用法:如果property的值是"*",表示所有名字和Bean属性名字匹配的请求参数都将被传递给相应的属性set方法。

value

value 属性是可选的。该属性用来指定Bean属性的值。字符串数据会在目标类中通过标准的valueOf方法自动转换成数字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean类型的属性值(比如"true")通过 Boolean.valueOf转换,int和Integer类型的属性值(比如"42")通过Integer.valueOf转换。   value和param不能同时使用,但可以使用其中任意一个。

param

param 是可选的。它指定用哪个请求参数作为Bean属性的值。如果当前请求没有参数,则什么事情也不做,系统不会把null传递给Bean属性的set方法。因此,你可以让Bean自己提供默认属性值,只有当请求参数明确指定了新值时才修改默认属性值。


<jsp:getProperty>动作元素

jsp:getProperty动作提取指定Bean属性的值,转换成字符串,然后输出。语法格式如下:

<jsp:useBean id="myName" ... />
...<jsp:getProperty name="myName" property="someProperty" .../>

下表是与getProperty相关联的属性:

属性

描述

name

要检索的Bean属性名称。Bean必须已定义。

property

表示要提取Bean属性的值

实例

以下实例我们使用了Bean:

package com.runoob.main;
public class TestBean {
   private String message = "菜鸟教程";
 
   public String getMessage() {
      return(message);
   }
   public void setMessage(String message) {
      this.message = message;
   }}

编译以上实例文件 TestBean.java

$ javac TestBean.java

编译完成后会在当前目录下生成一个 TestBean.class 文件,将该文件拷贝至当前 JSP 项目的 WebContent/WEB-INF/classes/com/runoob/main 下( com/runoob/main 包路径,没有需要手动创建)。

下面是一个 Eclipse 中目录结构图:

下面是一个很简单的例子,它的功能是装载一个Bean,然后设置/读取它的message属性。

现在让我们在main.jsp文件中调用该Bean:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body>
<h2>Jsp 使用 JavaBean 实例</h2><jsp:useBean id="test" class="com.runoob.main.TestBean" />
 <jsp:setProperty name="test" 
                    property="message" 
                    value="菜鸟教程..." />
 <p>输出信息....</p>
 <jsp:getProperty name="test" property="message" />
</body></html>

浏览器访问,执行以上文件,输出如下所示:


<jsp:forward>动作元素

 jsp:forward动作把请求转到另外的页面。jsp:forward标记只有一个属性page。语法格式如下所示:

<jsp:forward page="相对 URL 地址" />

以下是forward相关联的属性:

属性

描述

page

page属性包含的是一个相对URL。page的值既可以直接给出,也可以在请求的时候动态计算,可以是一个JSP页面或者一个 Java Servlet.

实例

以下实例我们使用了两个文件,分别是: date.jsp 和 main.jsp。

date.jsp 文件代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><p>
   今天的日期是: <%= (new java.util.Date()).toLocaleString()%></p>

main.jsp文件代码:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body>
<h2>forward 动作实例</h2><jsp:forward page="date.jsp" /></body></html>

现在将以上两个文件放在服务器的根目录下,访问main.jsp文件。显示结果如下:

今天的日期是: 2016-6-25 14:37:25

<jsp:plugin>动作元素

jsp:plugin动作用来根据浏览器的类型,插入通过Java插件 运行Java Applet所必需的OBJECT或EMBED元素。

如果需要的插件不存在,它会下载插件,然后执行Java组件。 Java组件可以是一个applet或一个JavaBean。

plugin动作有多个对应HTML元素的属性用于格式化Java 组件。param元素可用于向Applet或 Bean 传递参数。

以下是使用plugin 动作元素的典型实例:

<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
                           width="60" height="80">
   <jsp:param name="fontcolor" value="red" />
   <jsp:param name="background" value="black" />
 
   <jsp:fallback>
      Unable to initialize Java Plugin
   </jsp:fallback>
 </jsp:plugin>

如果你有兴趣可以尝试使用applet来测试jsp:plugin动作元素,<fallback>元素是一个新元素,在组件出现故障的错误是发送给用户错误信息。


<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素

<jsp:element> 、 <jsp:attribute>、 <jsp:body>动作元素动态定义XML元素。动态是非常重要的,这就意味着XML元素在编译时是动态生成的而非静态。

以下实例动态定义了XML元素:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%><!DOCTYPE html><html><head><meta charset="utf-8"><title>菜鸟教程(runoob.com)</title></head><body><jsp:element name="xmlElement"><jsp:attribute name="xmlElementAttr">
   属性值</jsp:attribute><jsp:body>
   XML 元素的主体</jsp:body></jsp:element></body></html>

浏览器访问以下页面,输出结果如下所示:


<jsp:text>动作元素

<jsp:text>动作元素允许在JSP页面和文档中使用写入文本的模板,语法格式如下:

<jsp:text>模板数据</jsp:text>

以上文本模板不能包含其他元素,只能只能包含文本和EL表达式(注:EL表达式将在后续章节中介绍)。请注意,在XML文件中,您不能使用表达式如 ${whatever > 0},因为>符号是非法的。 你可以使用${whatever gt 0}表达式或者嵌入在一个CDATA部分的值。

<jsp:text><![CDATA[<br>]]></jsp:text>

如果你需要在 XHTML 中声明DOCTYPE,必须使用到<jsp:text>动作元素,实例如下:

<jsp:text><![CDATA[<!DOCTYPE html
PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"DTD/xhtml1-strict.dtd">]]></jsp:text><head><title>jsp:text action</title></head><body>
<books><book><jsp:text>  
    Welcome to JSP Programming</jsp:text></book></books>
</body></html>

 

 

 

 

 

3.   include指令和include动作标签的区别

<%@include file = “”%>指令是静态包含

<jsp:include/> 动作标签是动态包含

原理: 包含与被包含的页面先各自翻译成java源文件,然后再运行时合并在一起。

         (先翻译再合并),动态包含

 

1) 语法不同

静态包含语法: <%@incluefile="被包含的页面"%>

动态包含语法: <jsp:includepage="被包含的页面">

 

2)参数传递不同

         静态包含不能向被包含页面传递参数

         动态包含可以向被包含页面传递参数

        

3)原理不同

         静态包含: 先合并再翻译

         动态包含: 先翻译再合并

4.   JSTL标签

1).JSTL (全名:java  standard  tag libarary   -  java标准标签库  )

 

                            核心标签库c标签库)天天用

                            国际化标签(fmt标签库)

                            EL函数库(fn函数库)

 

已经过时的两种

                            xml标签库(x标签库)

                   sql标签库(sql标签库)      

        

2)        .使用步骤

1)导入jstl支持的jar包(标签背后隐藏的java代码)

                                               注意:使用javaee5.0的项目自动导入jstl支持jar包

                            2)使用taglib指令导入标签库

                                                                <%@tagliburi="tld文件的uri名称"prefix="简写"%>

                 3)在jsp中使用标签             

核心标签库的重点标签:

 

核心标签是最常用的JSTL标签。引用核心标签库的语法如下:

<%@ taglib prefix="c" 
           uri="http://java.sun.com/jsp/jstl/core" %>

 

1.<c:set></c:set>              

         保存数据:<c:set>标签用于把某一个对象存在指定的域范围内,或者设置Web域中的java.util.Map类型的属性对象或JavaBean类型的属性对象的         属性。

 

2.<c:outvalue=""></c:out>

获取数据: <c:out> 标签用于输出一段文本内容到pageContext对象当前保存的“out”对象中。

 

3.<c:iftest=""></c:if>      

    单条件判断:<c:if test=“”>标签可以构造简单的“if-then”结构的条件表达式

 

4. <c:choose>

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

          <c:otherwise></c:otherwise>

</c:choose>

多条件判断:<c:choose>标签用于指定多个条件选择的组合边界,它必须与<c:when>和<c:otherwise>标签一起使用。使用<c:choose>,<c:when>和<c:otherwise>三个标签,可以构造类似“if-else if-else”的复杂条件判断结构。

 

 

5.<c:forEach></c:forEach>

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

循环数据:<c:forEach>标签用于对一个集合对象中的元素进行循环迭代操作,或者按指定的次数重复迭代执行标签体中的内容。

<c:forTokens>用来浏览一字符串中所有的成员,其成员是由定义符号所分隔的

 

        

 

6.<c:redirect></c:redirect>

重定向:<c:redirect>标签用于实现请求重定向

          

 

 

                    

7.<c:remove>标签

用于删除各种Web域中的属性

 

 

8.<c:catch>标签

用于捕获嵌套在标签体中的内容抛出的异常,其语法格式如下:<c:catch           [var="varName"]>nestedactions</c:catch>

                  

9.<c:param>标签         

在JSP页面进行URL的相关操作时,经常要在URL地址后面附加一些参数。<c:param>标签可以嵌套在<c:import>、<c:url>或<c:redirect>标签内,为这些标签所使用的URL地址附加参数。

 

10.<c:import>标签,实现include操作

11.<c:url>标签

用于在JSP页面中构造一个URL地址,其主要目的是实现URL重写。URL重写就是将会话标识号以参数形式附加在URL地址后面

                  

 

格式化标签

JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下:

<%@ taglib prefix="fmt" 
           uri="http://java.sun.com/jsp/jstl/fmt" %>

标签

描述

<fmt:formatNumber>

使用指定的格式或精度格式化数字

<fmt:parseNumber>

解析一个代表着数字,货币或百分比的字符串

<fmt:formatDate>

使用指定的风格或模式格式化日期和时间

<fmt:parseDate>

解析一个代表着日期或时间的字符串

<fmt:bundle>

绑定资源

<fmt:setLocale>

指定地区

<fmt:setBundle>

绑定资源

<fmt:timeZone>

指定时区

<fmt:setTimeZone>

指定时区

<fmt:message>

显示资源配置文件信息

<fmt:requestEncoding>

设置request的字符编码

 

 

JSTL函数

JSTL包含一系列标准函数,大部分是通用的字符串处理函数。引用JSTL函数库的语法如下:

<%@ taglib prefix="fn" 
           uri="http://java.sun.com/jsp/jstl/functions" %>

函数

描述

fn:contains()

测试输入的字符串是否包含指定的子串

fn:containsIgnoreCase()

测试输入的字符串是否包含指定的子串,大小写不敏感

fn:endsWith()

测试输入的字符串是否以指定的后缀结尾

fn:escapeXml()

跳过可以作为XML标记的字符

fn:indexOf()

返回指定字符串在输入字符串中出现的位置

fn:join()

将数组中的元素合成一个字符串然后输出

fn:length()

返回字符串长度

fn:replace()

将输入字符串中指定的位置替换为指定的字符串然后返回

fn:split()

将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回

fn:startsWith()

测试输入字符串是否以指定的前缀开始

fn:substring()

返回字符串的子集

fn:substringAfter()

返回字符串在指定子串之后的子集

fn:substringBefore()

返回字符串在指定子串之前的子集

fn:toLowerCase()

将字符串中的字符转为小写

fn:toUpperCase()

将字符串中的字符转为大写

fn:trim()

移除首位的空白符

 

 

EL函数库(fn函数库)的使用:

<%--contains 是否存在一个变量--%>${fn:contains("aaa","a")}<%--containsIgnoreCase 是否存在一个变量(忽略大小写)--%>${fn:containsIgnoreCase("aaa","a")}<%--fn:endsWith 以什么结尾--%>${fn:endsWith("bca","a")}<%--fn:startsWith 以什么结尾--%>${fn:startsWith("acb","a")}<%--indexOf 是否存在某个字符或字符串--%>${fn:indexOf("acb","a")}<%--length 某个对象的长度(字符长度)--%>${fn:length("acbAAAA哈哈")}<%--substring截取某个字符长度返回一个新字符--%>${fn:substring("acbAAAA哈哈",0,3)}<%--substringAfter第一次出现a的位置开始截取--%>${fn:substringAfter("acbAAAA哈哈","a")}<%--substringBefore最后一个出现‘c’的位置开始截取--%>${fn:substringBefore("bcbAAcAAa","c")}<%--toLowerCase转换为小写--%>${fn:toLowerCase("bcbAAcAAa")}<%--toUpperCase转换为大写--%>${fn:toUpperCase("bcbAAcAAa")}<%--trim转换为大写--%>${fn:trim("   bcbAAcAAa  ")}<%--split以某个字符切分为一个数组    (数组的类型[Ljava.lang.String;@67cc9a9a)--%>${fn:split("1,2,3,45,6",",")}<%--join给每个数组中的元素拼接一个字符--%>${fn:join((fn:split("1,2,3,45,6",",")),"haha")}<%--  escapeXml将某个标签已字符串格式输出整个标签  --%>${fn:escapeXml("<h1>哈哈<h1>")}<%-- 与c标签库中的out标签中的 c:out标签的escapeXml属性相同 --%><c:out escapeXml="true"value="<h1>哈哈<h1>"></c:out>

5. 自定义标签:

jsp自定义标签 Tag文件版

 


1.
WEB-INF/tags/if.tag

<%@taglanguage="java"pageEncoding="UTF-8"%><%@attributename="text"required="true"type="java.lang.Boolean"%><%if(text){%>   <jsp:doBody></jsp:doBody><%}%>


这里要注意tag文件只能放在如下位置:
1.WEB-INF/tags
2.WEB-INF/tags
的子目录
3.WEB-INF/lib
jar包的META-INF/tags
4.WEB-INF/lib
jar包的META-INF/tags下的子目录
5.jar
包中的tag文件需要tld
添加jstl.jarstandard.jarWEB-INF/lib目录,还有一点就是上面标红的部分:不要使用http://java.sun.com/jstl/core这个url,否则会报foreach中的item属性有问题

2.jsp中的使用

<%@pageimport="java.util.ArrayList"%><%@pageimport="java.util.List"%><%@ page language="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><%@ taglib tagdir="/WEB-INF/tags"prefix="my"%><!DOCTYPEhtmlPUBLIC "-//W3C//DTDHTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html;charset=UTF-8"><title>Insert title here</title></head><body><%--自定义if标签 --%><my:iftext="${1==1}"><%--自定义out标签 --%><my:outvalue="<h1>哈哈哈</h1>"></my:out></my:if></body></html>

 

jsp 自定义标签

 

jsp标签有两组api
JspTag ->SimpleTag ->SimpleTagSupport
JspTag ->Tag ->IterationTag->BodyTag
第二组是classic,比较早的使用方式,doStartTag(),doEndTag()N多返回值的那种,使用起来也确实不方便,今天学到了另一个使用第一组api方式的,让人大快人心,贴码
例子是一个Select的标签,支持动态属性设置
1.
编写标签类

publicclass SelectTagHandler extends SimpleTagSupport implements DynamicAttributes {private static final String ATTR_TEMPLATE = "%s='%s'";private static final String OPTION_TEMPLATE = "<optionvalue='%1$s'>%1$s</option>";private List optionsList;private String name;private String size;private Map<String, Object> tagAttrs = new HashMap<String,Object>();publicvoid setName(String name) {this.name = name;}publicvoid setSize(String size) {this.size = size;}publicvoid setOptionsList(List optionsList) {this.optionsList = optionsList;}@Overridepublic void doTag() throws JspException, IOException {PageContext pageContext = (PageContext) getJspContext();JspWriter out = pageContext.getOut();out.print("<select ");out.print(String.format(ATTR_TEMPLATE, "name",this.name));out.print(String.format(ATTR_TEMPLATE, "size",this.size));for(String attrName : tagAttrs.keySet()) {StringattrDefinition = String.format(ATTR_TEMPLATE, attrName,tagAttrs.get(attrName));out.print(attrDefinition);}out.print(">");for(Object option : this.optionsList) {StringoptionTag = String.format(OPTION_TEMPLATE, option.toString());out.println(optionTag);}out.println("</select>");}@Overridepublicvoid setDynamicAttribute(String uri, String name, Object value) throwsJspException {tagAttrs.put(name,value);}
}


看到没,代码如此的简洁,动态属性配置也十分的方便,不用写N多个settergetter方法.

2.编写tld文件WebRoot/tld/select.tld

<?xmlversion="1.0" encoding="UTF-8" ?>
<taglibxmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3g.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd"
version="2.0"><tlib-version>1.2</tlib-version><jsp-version>1.2</jsp-version><short-name>Forms Taglib</short-name><uri>http://hi.baidu.com/tags/forms</uri><description>An example tab library of replacements for the html form tags.</description><tag><name>select</name><tag-class>com.baidu.hi.tag.SelectTagHandler</tag-class><body-content>empty</body-content><attribute><name>optionsList</name><required>true</required><rtexprvalue>true</rtexprvalue><type>java.util.List</type></attribute><attribute><name>name</name><required>true</required></attribute><attribute><name>size</name><required>true</required></attribute><dynamic-attributes>true</dynamic-attributes></tag>
</taglib>


3.jsp中的使用

<%@page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><%@ page import="java.util.*" %>
<%@ taglib  prefix="formTags" uri="/tld/select.tld"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd">
<%@page import="java.util.ArrayList"%><html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
<%List<String> colorList = new ArrayList<String>();colorList.add("red");colorList.add("blue");colorList.add("white");request.setAttribute("colorList",colorList);
%>
<form action="" method="post"><formTags:select name="color" size="1"optionsList="${requestScope.colorList}" style="width:140px"/>
</form>
</body>
</html>


 


查看全文
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

相关文章

  1. 电脑端(win7/8/10/xp)使用教程

    第一步 点击链接下载软件:点击下载 解压文件后得出:1.打开程序后,复制旺旺给你发的ssr开头的连接,注意前后不要带汉字空格!复制后,看桌面右下角的小飞机图标,右键点击小飞机图标,弹出选项,有个批量导入,点一下,就导入就去了。 (注意要先复制ssr连接再批量导入)2.导…...

    2024/5/2 2:30:01
  2. Qt获取当前窗口句柄/获取窗口中控件的句柄

    1. 句柄是什么大家可以看这篇文章,讲的比较详细。https://blog.csdn.net/wenzhou1219/article/details/176594852. Qt如何获取句柄winId()函数。(Qt5里面)如果想获取Qt窗口的句柄用于显示图片;且看我操作HWND m_hwndDisplay = (HWND)this->winId();//获取当前this窗口的…...

    2024/4/21 11:00:22
  3. Android 打飞机小游戏 cocos2d

    从cocos2d官网上下载合适的框架 导入自己的应用程序中。 1、CCDirector:导演类是游戏当中的组织者和领导者,负责调度游戏当中的一切对象和资源;Director是一个单例,在全部游戏中只存在一个实例。Director类似电影中的“导演”,正如其名,它经管Cocos2d-x中的所有场景的调度…...

    2024/4/21 11:00:21
  4. 《Java Web开发教程——入门与提高篇(JSP+Servlet)》前言

    本学期我上课的时候录制了对应本书视频教程,放到优酷上了,在优酷上搜索 李绪成 就可以找到。 《Java Web开发教程——入门与提高篇(JSP+Servlet)》这本书终于出版了! 我从2000年开始使用JSP,2002年开始给学生讲JSP课,那时候关于JSP的书很少,讲了两年的JSP课之后觉得应该写…...

    2024/4/21 11:00:19
  5. CreatorPrimer | 飞机大战(一)

    前两天在Cocos官方公众号上学习了「大掌教」的Cocos Creator 2.x Camera教程,总算是对摄像机组件有了一个初步的认识。乘热打铁,Shawn即刻就使用Camera摄像机练习了一个飞机游戏的,目前主要实现3个功能:无限滚动背景 控制飞机移动 子弹发射下面是游戏视频:视频地址:https…...

    2024/4/21 11:00:18
  6. JSP还有必要学吗 这篇文章告诉你

    java劝退教程-操作系统篇(三)本篇文章,我们来讲讲技术,系统演进的过程对我们java开发带来的影响。本文可能会涉及到一些技术名词,不懂没有关系,先混个眼熟,我们后面会一个个详细介绍。下面会列举三个不同时期的技术,因为同时期也会有各种各样的技术,所以我们只介绍java的…...

    2024/4/21 11:00:17
  7. 《飞机大战》-Java版-01

    首先说一下,这个还有一些的小细节需要完善,就是所谓的BUG嘛~ 不要那我的东西和别个的飞机大战比较,因为没法比哈~ 还有不喜勿喷,只是拿出来玩玩的程序~后面有时间会继续完善和加关卡,有脑洞的可以留下评论哦~不过大体还能玩,目前只做了2关,后面关卡只是时间问题和脑洞…...

    2024/4/20 17:22:00
  8. jsp局部刷新页面、异步加载页面方案

    本文转自:https://blog.csdn.net/u012887385/article/details/54706399局部刷新页面、异步加载页面方案:1.在jsp页面需要刷新的地方增加一个控件<div id=courseList></div>2.新建一个jsp页面:aaa.jsp(用来放置需要刷新的内容)3.将id为courseList的dom标签重新…...

    2024/4/20 17:21:59
  9. [卡卡西0旗木] [代码设计]对象池设计与打飞机演示

    不好意思,最近实在忙的慌。好久没发文章了。不管怎样,先发个图压压惊。<br/> 是的。这就是大名鼎鼎的打飞机。看到那小飞机没有,是我用Cube拼出来的-_-。不过那不是重点。我们今天的重点是讲对象池。我们更多关注的是怎么管理子弹,而不是飞机~~~不过文章最后还是会…...

    2024/4/20 17:21:58
  10. 建站 从白痴到新手(三)阿里云服务器jsp环境的部署和使用

    前面讲到了WordPress博客的搭建,也是基本看教程一步步操作就行了。但是没法开发自己想要的网页。这回就来探索一下可以如何部署服务器,有自己的一个Web开发环境。 于是这里就先用jsp而不是LAMP(因为之前使用过jsp, 先避免其他不必要的麻烦)。首先购买云服务器,这个过程之…...

    2024/4/20 17:21:56
  11. JSP动作标签详解

    一JSP动作元素概述(1)JSP动作元素简介与JSP指令元素不同的是,JSP动作元素在请求处理阶段起作用。JSP动作元素是用XML语法写成的。利用JSP动作可以动态地插入文件、重用JavaBean组件、把用户重定向到另外的页面、为Java插件生成HTML代码。JSP动作元素(action elements),动作元…...

    2024/4/20 17:21:55
  12. Spring Boot基础教程8-web应用开发-模板引擎jsp

    原文参考:http://www.roncoo.com/article/detail/125491一.spring boot的web应用开发,是基于spring mvc二.Spring boot 在spring默认基础上,自动配置添加了以下特性:1. 包含了ContentNegotiatingViewResolver和BeanNameViewResolver beans。2. 对静态资源的支持,包括…...

    2024/4/20 17:21:54
  13. springboot使用jsp完成数据的页面展示

    上一篇文章介绍了使用JdbcTemplate完成对数据库的增删改查,使用了postman工具测试了功能是否实现,这一篇介绍如何调用springboot的后台接口,将数据真正展示出来。这里使用jsp进行页面展示,虽然springboot强烈不推荐使用jsp,而是推荐使用Themeleaf,但是很多人习惯使用jsp(…...

    2024/4/20 17:21:53
  14. [教程]jsp与serverlet的关系

    这篇文章比较旧,但讲的挺清楚的 http://blog.csdn.net/flightme/article/details/4309759 jsp和serverlet的区别简单来说: jsp:是包含java程序片的html文件servlet:是包含html的java文件其实说白了JSP和SERVLET到底什么区别呢,JSP就象宾馆前台的服务员,要长的不错,让顾客…...

    2024/4/20 17:21:58
  15. jsp页面数据回显(select下拉选择框)

    我的个人博客开通了,地址:https://timewentby.com 欢迎访问 1。静态变量方式: <!-- 实现select标签回显 --> 1.<select name="curStatus" value="${curStatus}"> <option value="0">-请选择-</option> &…...

    2024/4/21 11:00:17
  16. 飞机大战(源码+素材)

    素材:https://fy98.cn 最近自学了一些爬虫知识,没有及时更新博客。这两天花时间做了一个类似飞机大战的游戏,再次放出源码以及思路。 需要实现的地方: 主角动作 碰撞效果 敌机状态 分数记录 游戏暂停 子弹效果 子弹伤害 设计思路: 设计游戏框架背景循环图 设计主角动作 操…...

    2024/4/21 11:00:15
  17. java web学习(基础篇)四 JSP MVC架构

    对于Java阵营的动态Web编程技术而言,则经历了所谓的Model 1和Model 2时代。一 Jsp Model 11.传统的Jsp Model 1模型, Jsp是独立的,自主完成所有的任务,如图:2.改进的Jsp Model 1模型,Jsp页面与JavaBeans共同协作完成任务,如图:Model 1模式的实现比较简单,适用于快速开…...

    2024/4/21 11:00:14
  18. android 仿雷霆战机、打飞机等简易u小游戏

    时间不多,不做细说,先上效果图直接上源码码云中国 git 下载地址: 仿雷霆战机、打飞机小游戏...

    2024/4/21 11:00:13
  19. 教程3:jsp和servlet配合的简单登录页面login.jsp

    jsp:嵌套java代码的html页面 servlet:嵌套html代码的java类login.jsp ~~~~~~~~~~~~~~~<form action="/test/bbb">username:<input type="text" name="username"><br>password:<input type="password" name=&qu…...

    2024/4/21 11:00:14
  20. Java swing+Thread 打飞机小游戏

    简单分析: 1.需要界面 由SWing提供,加载 飞机的图片,子弹图片,敌机图片, 2. 敌机随机下落 、子弹的绘画(线程控制) 主机的控制(implements MouseMotionListener,MouseListener) 3.分析需求: 1.背景 --静态 2.敌机 --随机往下落 主机 --鼠标拖动 3.子弹 --发射向…...

    2024/4/21 11:00:11

最新文章

  1. web server apache tomcat11-21-monitor and management 监控与管理

    前言 整理这个官方翻译的系列&#xff0c;原因是网上大部分的 tomcat 版本比较旧&#xff0c;此版本为 v11 最新的版本。 开源项目 从零手写实现 tomcat minicat 别称【嗅虎】心有猛虎&#xff0c;轻嗅蔷薇。 系列文章 web server apache tomcat11-01-官方文档入门介绍 web…...

    2024/5/2 2:30:07
  2. 梯度消失和梯度爆炸的一些处理方法

    在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言&#xff0c;在此感激不尽。 权重和梯度的更新公式如下&#xff1a; w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...

    2024/3/20 10:50:27
  3. Linux mount用法

    在Linux系统中&#xff0c;系统自动挂载了以下挂载点&#xff1a; /: xfs文件系统&#xff0c;根文件系统, 所有其他文件系统的挂载点。 /sys: sysfs文件系统&#xff0c;提供内核对象的信息和接口。 /proc: proc文件系统&#xff0c;提供进程和系统信息。 /dev: devtmpfs文件系…...

    2024/4/30 3:59:48
  4. 学习鸿蒙基础(11)

    目录 一、Navigation容器 二、web组件 三、video视频组件 四、动画 1、属性动画 .animation() 2、 转场动画 transition() 配合animateTo() 3、页面间转场动画 一、Navigation容器 Navigation组件一般作为页面的根容器&#xff0c;包括单页面、分栏和自适应三种显示模式…...

    2024/4/30 13:01:11
  5. 【外汇早评】美通胀数据走低,美元调整

    原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...

    2024/5/1 17:30:59
  6. 【原油贵金属周评】原油多头拥挤,价格调整

    原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...

    2024/4/30 18:14:14
  7. 【外汇周评】靓丽非农不及疲软通胀影响

    原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...

    2024/4/29 2:29:43
  8. 【原油贵金属早评】库存继续增加,油价收跌

    原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...

    2024/4/30 18:21:48
  9. 【外汇早评】日本央行会议纪要不改日元强势

    原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...

    2024/4/27 17:58:04
  10. 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响

    原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...

    2024/4/27 14:22:49
  11. 【外汇早评】美欲与伊朗重谈协议

    原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...

    2024/4/28 1:28:33
  12. 【原油贵金属早评】波动率飙升,市场情绪动荡

    原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...

    2024/4/30 9:43:09
  13. 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试

    原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...

    2024/4/27 17:59:30
  14. 【原油贵金属早评】市场情绪继续恶化,黄金上破

    原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...

    2024/4/25 18:39:16
  15. 【外汇早评】美伊僵持,风险情绪继续升温

    原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...

    2024/4/28 1:34:08
  16. 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势

    原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...

    2024/4/26 19:03:37
  17. 氧生福地 玩美北湖(上)——为时光守候两千年

    原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...

    2024/4/29 20:46:55
  18. 氧生福地 玩美北湖(中)——永春梯田里的美与鲜

    原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...

    2024/4/30 22:21:04
  19. 氧生福地 玩美北湖(下)——奔跑吧骚年!

    原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...

    2024/5/1 4:32:01
  20. 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!

    原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...

    2024/4/27 23:24:42
  21. 「发现」铁皮石斛仙草之神奇功效用于医用面膜

    原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...

    2024/4/28 5:48:52
  22. 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者

    原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...

    2024/4/30 9:42:22
  23. 广州械字号面膜生产厂家OEM/ODM4项须知!

    原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...

    2024/4/30 9:43:22
  24. 械字号医用眼膜缓解用眼过度到底有无作用?

    原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...

    2024/4/30 9:42:49
  25. 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...

    解析如下&#xff1a;1、长按电脑电源键直至关机&#xff0c;然后再按一次电源健重启电脑&#xff0c;按F8健进入安全模式2、安全模式下进入Windows系统桌面后&#xff0c;按住“winR”打开运行窗口&#xff0c;输入“services.msc”打开服务设置3、在服务界面&#xff0c;选中…...

    2022/11/19 21:17:18
  26. 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。

    %读入6幅图像&#xff08;每一幅图像的大小是564*564&#xff09; f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...

    2022/11/19 21:17:16
  27. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...

    win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面&#xff0c;在等待界面中我们需要等待操作结束才能关机&#xff0c;虽然这比较麻烦&#xff0c;但是对系统进行配置和升级…...

    2022/11/19 21:17:15
  28. 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...

    有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows&#xff0c;请勿关闭计算机”的提示&#xff0c;要过很久才能进入系统&#xff0c;有的用户甚至几个小时也无法进入&#xff0c;下面就教大家这个问题的解决方法。第一种方法&#xff1a;我们首先在左下角的“开始…...

    2022/11/19 21:17:14
  29. win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...

    置信有很多用户都跟小编一样遇到过这样的问题&#xff0c;电脑时发现开机屏幕显现“正在配置Windows Update&#xff0c;请勿关机”(如下图所示)&#xff0c;而且还需求等大约5分钟才干进入系统。这是怎样回事呢&#xff1f;一切都是正常操作的&#xff0c;为什么开时机呈现“正…...

    2022/11/19 21:17:13
  30. 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...

    Win7系统开机启动时总是出现“配置Windows请勿关机”的提示&#xff0c;没过几秒后电脑自动重启&#xff0c;每次开机都这样无法进入系统&#xff0c;此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一&#xff1a;开机按下F8&#xff0c;在出现的Windows高级启动选…...

    2022/11/19 21:17:12
  31. 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...

    有不少windows10系统用户反映说碰到这样一个情况&#xff0c;就是电脑提示正在准备windows请勿关闭计算机&#xff0c;碰到这样的问题该怎么解决呢&#xff0c;现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法&#xff1a;1、2、依次…...

    2022/11/19 21:17:11
  32. 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...

    今天和大家分享一下win7系统重装了Win7旗舰版系统后&#xff0c;每次关机的时候桌面上都会显示一个“配置Windows Update的界面&#xff0c;提示请勿关闭计算机”&#xff0c;每次停留好几分钟才能正常关机&#xff0c;导致什么情况引起的呢&#xff1f;出现配置Windows Update…...

    2022/11/19 21:17:10
  33. 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...

    只能是等着&#xff0c;别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚&#xff0c;只能是考虑备份数据后重装系统了。解决来方案一&#xff1a;管理员运行cmd&#xff1a;net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...

    2022/11/19 21:17:09
  34. 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?

    原标题&#xff1a;电脑提示“配置Windows Update请勿关闭计算机”怎么办&#xff1f;win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢&#xff1f;一般的方…...

    2022/11/19 21:17:08
  35. 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...

    关机提示 windows7 正在配置windows 请勿关闭计算机 &#xff0c;然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;关机提示 windows7 正在配…...

    2022/11/19 21:17:05
  36. 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...

    钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...

    2022/11/19 21:17:05
  37. 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...

    前几天班里有位学生电脑(windows 7系统)出问题了&#xff0c;具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面&#xff0c;长时间没反应&#xff0c;无法进入系统。这个问题原来帮其他同学也解决过&#xff0c;网上搜了不少资料&#x…...

    2022/11/19 21:17:04
  38. 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...

    本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法&#xff0c;并在最后教给你1种保护系统安全的好方法&#xff0c;一起来看看&#xff01;电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中&#xff0c;添加了1个新功能在“磁…...

    2022/11/19 21:17:03
  39. 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...

    许多用户在长期不使用电脑的时候&#xff0c;开启电脑发现电脑显示&#xff1a;配置windows更新失败&#xff0c;正在还原更改&#xff0c;请勿关闭计算机。。.这要怎么办呢&#xff1f;下面小编就带着大家一起看看吧&#xff01;如果能够正常进入系统&#xff0c;建议您暂时移…...

    2022/11/19 21:17:02
  40. 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...

    配置windows update失败 还原更改 请勿关闭计算机&#xff0c;电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容&#xff0c;让我们赶快一起来看一下吧&#xff01;配置windows update失败 还原更改 请勿关闭计算机&#x…...

    2022/11/19 21:17:01
  41. 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...

    不知道大家有没有遇到过这样的一个问题&#xff0c;就是我们的win7系统在关机的时候&#xff0c;总是喜欢显示“准备配置windows&#xff0c;请勿关机”这样的一个页面&#xff0c;没有什么大碍&#xff0c;但是如果一直等着的话就要两个小时甚至更久都关不了机&#xff0c;非常…...

    2022/11/19 21:17:00
  42. 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...

    当电脑出现正在准备配置windows请勿关闭计算机时&#xff0c;一般是您正对windows进行升级&#xff0c;但是这个要是长时间没有反应&#xff0c;我们不能再傻等下去了。可能是电脑出了别的问题了&#xff0c;来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...

    2022/11/19 21:16:59
  43. 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...

    我们使用电脑的过程中有时会遇到这种情况&#xff0c;当我们打开电脑之后&#xff0c;发现一直停留在一个界面&#xff1a;“配置Windows Update失败&#xff0c;还原更改请勿关闭计算机”&#xff0c;等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢&#xff0…...

    2022/11/19 21:16:58
  44. 如何在iPhone上关闭“请勿打扰”

    Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...

    2022/11/19 21:16:57