Compare commits

..

42 Commits

Author SHA1 Message Date
pp9e2k3rf 0b687c1c62 Merge pull request 'gtq' (#4) from branch_GTQ into main
1 year ago
gtq a1781695e5 Merge remote-tracking branch 'origin/branch_GTQ' into branch_GTQ
1 year ago
gtq 7730f9a0c0 test
1 year ago
p436ejfyi ecb6e51cf4 Merge pull request '金汉' (#3) from branch_JH into main
1 year ago
p9luapgbk 161aed789a com.hyc.wechat
1 year ago
zsy fb51c0a857 test
1 year ago
zsy 999963117a Merge remote-tracking branch 'origin/main'
1 year ago
zsy b32da7e4f7 test
1 year ago
lq 18ae764bff Merge branch 'main' of https://bdgit.educoder.net/p9luapgbk/chat-room
1 year ago
lq 655428be09 Merge branch 'main' of https://bdgit.educoder.net/p9luapgbk/chat-room
1 year ago
lq d817fbf281 Merge branch 'main' of https://bdgit.educoder.net/p9luapgbk/chat-room
1 year ago
zsy 0d3816ce1e my code
1 year ago
jinhan 4ac36ecb64 注释
1 year ago
jinhan e3cec831cd 注释
1 year ago
jinhan 7db0bcbf0f 注释
1 year ago
gtq 81323a7498 test
1 year ago
jinhan 88dd7e628f 注释
1 year ago
jinhan 951b18b8f6 注释
1 year ago
gtq a48b8934c4 test
1 year ago
gtq 59e00369fd test
1 year ago
jinhan ff2a83cf81 注释
1 year ago
jinhan 4e56f3dba8 注释
1 year ago
gtq 004067a4fb test
1 year ago
jinhan 9af348c80b 注释
1 year ago
jinhan 45ba692694 注释
1 year ago
jinhan 1db9b0c55a 注释
1 year ago
jinhan c76b1f6657 注释
1 year ago
jinhan fad7e91359 注释
1 year ago
gtq f7c3e33dba test
1 year ago
jinhan 2b8f848081 注释
1 year ago
gtq c526f9a191 test
1 year ago
jinhan 433b4031de 注释
1 year ago
jinhan dfe6319516 注释
1 year ago
jinhan 670143ca45 注释
1 year ago
gtq fd8df8c2bc test
1 year ago
gtq e17a8e60ed test
1 year ago
jinhan 716f80ebff zhu
1 year ago
jinhan c80127fb0c zhu
1 year ago
Gtq bd6d225315 test
1 year ago
Gtq a61bf692dc test
1 year ago
Gtq 4edb5b806c test
1 year ago
zsy 689e871db1 test
1 year ago

@ -0,0 +1,6 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="VcsDirectoryMappings">
<mapping directory="" vcs="Git" />
</component>
</project>

@ -1,5 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
<module type="JAVA_MODULE" version="4">
<component name="FacetManager">
<facet type="web" name="Web">
<configuration>
<descriptors>
<deploymentDescriptor name="web.xml" url="file://$MODULE_DIR$/wechat-master/web/WEB-INF/web.xml" />
</descriptors>
<webroots>
<root url="file://$MODULE_DIR$/wechat-master/web" relative="/" />
</webroots>
</configuration>
</facet>
</component>
<component name="NewModuleRootManager" inherit-compiler-output="true">
<exclude-output />
<content url="file://$MODULE_DIR$">

@ -1,18 +1,4 @@
/*
* Copyright (c) 2019.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.hyc.wechat.model.po;

@ -29,55 +29,55 @@
<validator>
<validator-class>
org.apache.taglibs.standard.tlv.JstlCoreTLV
</validator-class>
</validator-class><!-- JDBC??????? -->
<description>
Provides core validation features for JSTL tags.
</description>
</description><!-- ??JSTL????????? -->
</validator>
<tag>
<name>catch</name>
<name>catch</name><!-- ??????????? -->
<tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
<body-content>JSP</body-content>
<description>
Catches any Throwable that occurs in its body and optionally
exposes it.
</description>
</description><!-- ???????????? Throwable?????????? -->
<attribute>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name> <!-- ????????????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
</tag>
<tag>
<name>choose</name>
<tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
<name>choose</name><!-- ??????????? -->
<tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
<body-content>JSP</body-content>
<description>
Simple conditional tag that establishes a context for
mutually exclusive conditional operations, marked by
&lt;when&gt; and &lt;otherwise&gt;
&lt;when&gt; and &lt;otherwise&gt;<!-- ?????????????????????? &lt;when&gt; ? &lt;otherwise&gt; ?? -->
</description>
</tag>
<tag>
<name>if</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
<name>if</name> <!-- ??????????? -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
<body-content>JSP</body-content>
<description>
Simple conditional tag, which evalutes its body if the
supplied condition is true and optionally exposes a Boolean
scripting variable representing the evaluation of this condition
</description>
</description><!-- ??????????????????????????????????????????????? -->
<attribute>
<name>test</name>
<name>test</name><!-- ????????? -->
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>boolean</type>
<type>boolean</type><!-- ??????? -->
</attribute>
<attribute>
<name>var</name>
<name>var</name><!-- ???????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
@ -89,8 +89,8 @@
</tag>
<tag>
<name>import</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class>
<name>import</name> <!-- ????????????? -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class>
<tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
<body-content>JSP</body-content>
<description>
@ -98,61 +98,61 @@
to either the maxPage, a String in 'var', or a Reader in 'varReader'.
</description>
<attribute>
<name>url</name>
<name>url</name><!-- ???????URL -->
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<name>var</name><!-- ???????????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<rtexprvalue>false</rtexprvalue><!-- ??????????? -->
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>scope</name> <!-- ????????????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>varReader</name>
<name>varReader</name><!-- ??????????????Reader?? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>context</name>
<name>context</name><!-- ???????????URL???? -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<name>charEncoding</name>
<name>charEncoding</name><!-- ??????????? -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<name>forEach</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class>
<name>forEach</name> <!-- ???????????? -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.ForEachTag</tag-class>
<tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
<body-content>JSP</body-content>
<description>
The basic iteration tag, accepting many different
collection types and supporting subsetting and other
functionality
</description>
</description><!-- ????????????????????????????? -->
<attribute>
<name>items</name>
<required>false</required>
<name>items</name><!-- ??????????? -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.Object</type>
<type>java.lang.Object</type><!-- ????????Java?? -->
</attribute>
<attribute>
<name>begin</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
<name>begin</name> <!-- ?????????????0???? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>true</rtexprvalue> <!-- ?????????? -->
<type>int</type> <!-- ???????? -->
</attribute>
<attribute>
<name>end</name>
<name>end</name><!-- ?????????????????? -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
@ -164,8 +164,8 @@
<type>int</type>
</attribute>
<attribute>
<name>var</name>
<required>false</required>
<name>var</name><!-- ????????????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
@ -176,7 +176,7 @@
</tag>
<tag>
<name>forTokens</name>
<name>forTokens</name> <!-- ??????????????? -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class>
<body-content>JSP</body-content>
<description>
@ -213,13 +213,13 @@
<type>int</type>
</attribute>
<attribute>
<name>var</name>
<name>var</name> <!-- ???????????token????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>varStatus</name>
<required>false</required>
<name>varStatus</name> <!-- ???????????token????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>

@ -19,7 +19,7 @@
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<tlib-version>1.0</tlib-version><!--o-->
<jsp-version>1.2</jsp-version>
<short-name>c</short-name>
<uri>http://java.sun.com/jstl/core</uri>
@ -33,33 +33,33 @@
<init-param>
<param-name>expressionAttributes</param-name>
<param-value>
out:value
out:default
out:escapeXml
if:test
import:url
import:context
import:charEncoding
forEach:items
forEach:begin
forEach:end
forEach:step
forTokens:items
forTokens:begin
forTokens:end
forTokens:step
param:encode
param:name
param:value
redirect:context
redirect:url
set:property
set:target
set:value
url:context
url:value
when:test
</param-value>
out:value<!-- ?????? -->
out:default<!-- ???????? -->
out:escapeXml <!-- ?????XML?? -->
if:test <!-- if??????? -->
import:url <!-- import???URL -->
import:context <!-- import?????? -->
import:charEncoding <!-- import??????? -->
forEach:items <!-- forEach????? -->
forEach:begin <!-- forEach??????? -->
forEach:end <!-- forEach??????? -->
forEach:step <!-- forEach????? -->
forTokens:items <!-- forTokens????? -->
forTokens:begin <!-- forTokens??????? -->
forTokens:end <!-- forTokens??????? -->
forTokens:step <!-- forTokens????? -->
param:encode <!-- param????? -->
param:name <!-- param????? -->
param:value <!-- param???? -->
redirect:context<!-- redirect?????? -->
redirect:url<!-- redirect???URL -->
set:property <!-- set????? -->
set:target <!-- set??????? -->
set:value <!-- set???? -->
url:context <!-- url?????? -->
url:value <!-- url???? -->
when:test <!-- when??????? -->
</param-value>
<description>
Whitespace-separated list of colon-separated token pairs
describing tag:attribute combinations that accept expressions.
@ -78,9 +78,9 @@
exposes it.
</description>
<attribute>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name> <!-- ????????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
</tag>
@ -103,25 +103,25 @@
Like &lt;%= ... &gt;, but for expressions.
</description>
<attribute>
<name>value</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<name>value</name> <!-- ??????? -->
<required>true</required> <!-- ??????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>default</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>default</name> <!-- ??? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>escapeXml</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>escapeXml</name> <!-- ??????XML???? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
</tag>
<tag>
<name>if</name>
<tag-class>org.apache.taglibs.standard.tag.el.core.IfTag</tag-class>
<name>if</name><!-- ?????? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.IfTag</tag-class>
<body-content>JSP</body-content>
<description>
Simple conditional tag, which evalutes its body if the
@ -129,9 +129,9 @@
scripting variable representing the evaluation of this condition
</description>
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<name>test</name> <!-- ?????? -->
<required>true</required> <!-- ??????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>var</name>
@ -139,14 +139,14 @@
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>scope</name> <!-- ????????????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
</tag>
<tag>
<name>import</name>
<name>import</name> <!-- ????????????? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.ImportTag</tag-class>
<tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
<body-content>JSP</body-content>
@ -155,40 +155,40 @@
to either the maxPage, a String in 'var', or a Reader in 'varReader'.
</description>
<attribute>
<name>url</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<name>url</name> <!-- ????URL -->
<required>true</required> <!-- ??????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name> <!-- ???????????????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>scope</name> <!-- ??????????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>varReader</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>varReader</name> <!-- ???????Reader??????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>context</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>context</name> <!-- ?????????URL???? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
<attribute>
<name>charEncoding</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>charEncoding</name> <!-- ??????????? -->
<required>false</required> <!-- ???????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
</tag>
<tag>
<name>forEach</name>
<tag-class>org.apache.taglibs.standard.tag.el.core.ForEachTag</tag-class>
<name>forEach</name> <!-- ???? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.ForEachTag</tag-class>
<tei-class>org.apache.taglibs.standard.tei.ForEachTEI</tei-class>
<body-content>JSP</body-content>
<description>
@ -197,61 +197,61 @@
functionality
</description>
<attribute>
<name>items</name>
<required>false</required>
<name>items</name><!-- ?????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>begin</name>
<name>begin</name><!-- ??????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>end</name>
<name>end</name><!-- ??????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>step</name>
<required>false</required>
<name>step</name><!-- ????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>var</name>
<name>var</name><!-- ?????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>varStatus</name>
<required>false</required>
<name>varStatus</name> <!-- ???????????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>forTokens</name>
<name>forTokens</name> <!-- ???????token???? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.ForTokensTag</tag-class>
<body-content>JSP</body-content>
<description>
Iterates over tokens, separated by the supplied delimeters
</description>
<attribute>
<name>items</name>
<name>items</name> <!-- ??????? -->
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>delims</name>
<name>delims</name> <!-- ??? -->
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>begin</name>
<name>begin</name> <!-- ??????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>end</name>
<name>end</name> <!-- ??????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
@ -303,56 +303,56 @@
</tag>
<tag>
<name>redirect</name>
<tag-class>org.apache.taglibs.standard.tag.el.core.RedirectTag</tag-class>
<name>redirect</name><!-- ????? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.RedirectTag</tag-class>
<body-content>JSP</body-content>
<description>
Redirects to a new URL.
</description>
<attribute>
<name>var</name>
<name>var</name><!-- ????????????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<name>scope</name> <!-- ??????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>url</name>
<name>url</name> <!-- ?????????URL -->
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>context</name>
<name>context</name><!-- ?????????URL???? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>remove</name>
<tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
<name>remove</name><!-- ?????????????????? -->
<tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
<body-content>empty</body-content>
<description>
Removes a scoped variable (from a particular scope, if specified).
</description>
<attribute>
<name>var</name>
<name>var</name><!-- ??????????? -->
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<name>scope</name> <!-- ????????????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<name>set</name>
<tag-class>org.apache.taglibs.standard.tag.el.core.SetTag</tag-class>
<name>set</name> <!-- ????????????scope????? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.SetTag</tag-class>
<body-content>JSP</body-content>
<description>
Sets the result of an expression evaluation in a 'scope'
@ -385,25 +385,25 @@
</tag>
<tag>
<name>url</name>
<tag-class>org.apache.taglibs.standard.tag.el.core.UrlTag</tag-class>
<name>url</name><!-- ??URL??? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.UrlTag</tag-class>
<body-content>JSP</body-content>
<description>
Prints or exposes a URL with optional query parameters
(via the c:param tag).
</description>
<attribute>
<name>var</name>
<name>var</name> <!-- ??????????URL????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>scope</name>
<name>scope</name> <!-- ?????URL?????? -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<name>value</name>
<name>value</name> <!-- ???????URL -->
<required>true</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
@ -415,17 +415,17 @@
</tag>
<tag>
<name>when</name>
<tag-class>org.apache.taglibs.standard.tag.el.core.WhenTag</tag-class>
<name>when</name><!-- ????????????? -->
<tag-class>org.apache.taglibs.standard.tag.el.core.WhenTag</tag-class>
<body-content>JSP</body-content>
<description>
Subtag of &lt;choose&gt; that includes its body if its
condition evalutes to 'true'
</description>
<attribute>
<name>test</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<name>test</name> <!-- ????????? -->
<required>true</required> <!-- ??????? -->
<rtexprvalue>false</rtexprvalue> <!-- ??????????? -->
</attribute>
</tag>

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Copyright (c) 2019. 黄钰朝
~
@ -21,19 +22,31 @@
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 core library</description>
<display-name>JSTL core</display-name>
<tlib-version>1.1</tlib-version>
<short-name>c</short-name>
<uri>http://java.sun.com/jsp/jstl/core</uri>
<description>JSTL 1.1 core library</description><!-- 说明这是JSTL 1.1版本的核心库 -->
<display-name>JSTL core</display-name><!-- 在显示中用作JSTL核心的名称 -->
<tlib-version>1.1</tlib-version><!-- 标签库版本 -->
<short-name>c</short-name><!-- 标签库的简短名称 -->
<uri>http://java.sun.com/jsp/jstl/core</uri><!-- 标签库的URI用于JSP中引用 -->
<validator>
<validator>
<description>
Provides core validation features for JSTL tags.
</description>
<validator-class>
org.apache.taglibs.standard.tlv.JstlCoreTLV
</validator-class>
</validator-class><!-- 验证器类名称 -->
</validator>
<tag>
@ -41,30 +54,42 @@
Catches any Throwable that occurs in its body and optionally
exposes it.
</description>
<name>catch</name>
<tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
<body-content>JSP</body-content>
<name>catch</name><!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.common.core.CatchTag</tag-class>
<body-content>JSP</body-content> <!-- 标签主体内容类型 -->
<attribute>
<description>
Name of the exported scoped variable for the
exception thrown from a nested action. The type of the
scoped variable is the type of the exception thrown.
</description>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name><!-- 属性名称 -->
<required>false</required><!-- 是否为必需属性 -->
<rtexprvalue>false</rtexprvalue><!-- 是否允许运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Simple conditional tag that establishes a context for
mutually exclusive conditional operations, marked by
&lt;when&gt; and &lt;otherwise&gt;
</description>
<name>choose</name>
<tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class>
<body-content>JSP</body-content>
<name>choose</name><!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.common.core.ChooseTag</tag-class><!-- 标签类名 -->
<body-content>JSP</body-content><!-- 标签主体内容类型 -->
</tag>
<tag>
@ -73,18 +98,31 @@ scoped variable is the type of the exception thrown.
supplied condition is true and optionally exposes a Boolean
scripting variable representing the evaluation of this condition
</description>
<name>if</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class>
<body-content>JSP</body-content>
<name>if</name><!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.IfTag</tag-class><!-- 标签类名 -->
<body-content>JSP</body-content><!-- 标签主体内容类型 -->
<attribute>
<description>
The test condition that determines whether or
not the body content should be processed.
</description>
<name>test</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>boolean</type>
<name>test</name><!-- 属性名称 -->
<required>true</required><!-- 必需属性 -->
<rtexprvalue>true</rtexprvalue><!-- 允许运行时表达式 -->
<type>boolean</type> <!-- 属性类型 -->
</attribute>
<attribute>
<description>
@ -92,17 +130,17 @@ Name of the exported scoped variable for the
resulting value of the test condition. The type
of the scoped variable is Boolean.
</description>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name><!-- 属性名称 -->
<required>false</required><!-- 是否为必需属性 -->
<rtexprvalue>false</rtexprvalue><!-- 是否允许运行时表达式 -->
</attribute>
<attribute>
<description>
Scope for var.
</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>scope</name><!-- 属性名称 -->
<required>false</required><!-- 是否为必需属性 -->
<rtexprvalue>false</rtexprvalue> <!-- 是否允许运行时表达式 -->
</attribute>
</tag>
@ -111,9 +149,9 @@ Scope for var.
Retrieves an absolute or relative URL and exposes its contents
to either the maxPage, a String in 'var', or a Reader in 'varReader'.
</description>
<name>import</name>
<name>import</name><!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.ImportTag</tag-class>
<tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class>
<tei-class>org.apache.taglibs.standard.tei.ImportTEI</tei-class><!-- TEI类 -->
<body-content>JSP</body-content>
<attribute>
<description>
@ -121,7 +159,7 @@ The URL of the resource to import.
</description>
<name>url</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<rtexprvalue>true</rtexprvalue><!-- 允许运行时表达式 -->
</attribute>
<attribute>
<description>
@ -172,6 +210,19 @@ resource.
</attribute>
</tag>
<tag>
<description>
The basic iteration tag, accepting many different
@ -258,35 +309,61 @@ visibility.
<description>
Iterates over tokens, separated by the supplied delimeters
</description>
<name>forTokens</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class>
<body-content>JSP</body-content>
<name>forTokens</name><!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.ForTokensTag</tag-class>
<body-content>JSP</body-content><!-- 标签的主体内容类型 -->
<attribute>
<description>
String of tokens to iterate over.
</description>
<name>items</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
<name>items</name><!-- 要迭代的令牌字符串 -->
<required>true</required><!-- 此属性是必须的 -->
<rtexprvalue>true</rtexprvalue><!-- 允许使用运行时表达式 -->
<type>java.lang.String</type> <!-- 属性类型 -->
</attribute>
<attribute>
<description>
The set of delimiters (the characters that
separate the tokens in the string).
</description>
<name>delims</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<type>java.lang.String</type>
<name>delims</name><!-- 分隔符字符串 -->
<required>true</required><!-- 此属性是必须的 -->
<rtexprvalue>true</rtexprvalue><!-- 允许使用运行时表达式 -->
<type>java.lang.String</type><!-- 属性类型 -->
</attribute>
<attribute>
<description>
Iteration begins at the token located at the
specified index. First token has index 0.
</description>
<name>begin</name>
<required>false</required>
<name>begin</name><!-- 起始索引 -->
<required>false</required><!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
@ -295,8 +372,21 @@ specified index. First token has index 0.
Iteration ends at the token located at the
specified index (inclusive).
</description>
<name>end</name>
<required>false</required>
<name>end</name><!-- 结束索引 -->
<required>false</required><!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue>
<type>int</type>
</attribute>
@ -305,10 +395,10 @@ specified index (inclusive).
Iteration will only process every step tokens
of the string, starting with the first one.
</description>
<name>step</name>
<name>step</name> <!-- 步长 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<type>int</type>
<type>int</type><!-- 属性类型 -->
</attribute>
<attribute>
<description>
@ -316,9 +406,9 @@ Name of the exported scoped variable for the
current item of the iteration. This scoped
variable has nested visibility.
</description>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name><!-- 当前项的作用域变量名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue><!-- 不允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
@ -329,9 +419,9 @@ javax.servlet.jsp.jstl.core.LoopTag
Status. This scoped variable has nested
visibility.
</description>
<name>varStatus</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>varStatus</name><!-- 迭代状态的作用域变量名称 -->
<required>false</required><!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue><!-- 不允许使用运行时表达式 -->
</attribute>
</tag>
@ -340,8 +430,8 @@ visibility.
Like &lt;%= ... &gt;, but for expressions.
</description>
<name>out</name>
<tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class>
<body-content>JSP</body-content>
<tag-class>org.apache.taglibs.standard.tag.rt.core.OutTag</tag-class><!-- 标签实现类 -->
<body-content>JSP</body-content>
<attribute>
<description>
Expression to be evaluated.
@ -387,14 +477,14 @@ true.
<description>
Adds a parameter to a containing 'import' tag's URL.
</description>
<name>param</name>
<name>param</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.core.ParamTag</tag-class>
<body-content>JSP</body-content>
<body-content>JSP</body-content><!-- 标签主体内容类型 -->
<attribute>
<description>
Name of the query string parameter.
</description>
<name>name</name>
<name>name</name><!-- 查询参数名称 -->
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -402,7 +492,7 @@ Name of the query string parameter.
<description>
Value of the parameter.
</description>
<name>value</name>
<name>value</name><!-- 查询参数的值 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -419,7 +509,7 @@ Value of the parameter.
<description>
The URL of the resource to redirect to.
</description>
<name>url</name>
<name>url</name><!-- 重定向的目标URL -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -428,7 +518,7 @@ The URL of the resource to redirect to.
Name of the context when redirecting to a relative URL
resource that belongs to a foreign context.
</description>
<name>context</name>
<name>context</name><!-- 上下文名称 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -440,21 +530,21 @@ resource that belongs to a foreign context.
</description>
<name>remove</name>
<tag-class>org.apache.taglibs.standard.tag.common.core.RemoveTag</tag-class>
<body-content>empty</body-content>
<attribute>
<body-content>empty</body-content><!-- 标签主体内容类型为空 -->
<attribute>
<description>
Name of the scoped variable to be removed.
</description>
<name>var</name>
<required>true</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name><!-- 要移除的作用域变量名 -->
<required>true</required><!-- 此属性是必须的 -->
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<description>
Scope for var.
</description>
<name>scope</name>
<required>false</required>
<name>scope</name><!-- 作用域名 -->
<required>false</required><!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
@ -480,9 +570,9 @@ whatever type the value expression evaluates to.
<description>
Expression to be evaluated.
</description>
<name>value</name>
<name>value</name> <!-- 要评估的表达式 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<rtexprvalue>true</rtexprvalue><!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
@ -490,7 +580,7 @@ Target object whose property will be set. Must evaluate to
a JavaBeans object with setter property property, or to a
java.util.Map object.
</description>
<name>target</name>
<name>target</name><!-- 目标对象 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -498,7 +588,7 @@ java.util.Map object.
<description>
Name of the property to be set in the target object.
</description>
<name>property</name>
<name>property</name><!-- 要设置的目标对象的属性名称 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -506,7 +596,7 @@ Name of the property to be set in the target object.
<description>
Scope for var.
</description>
<name>scope</name>
<name>scope</name> <!-- 作用域 -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
@ -525,7 +615,7 @@ Name of the exported scoped variable for the
processed url. The type of the scoped variable is
String.
</description>
<name>var</name>
<name>var</name><!-- 处理后的URL作用域变量名称 -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
@ -533,7 +623,7 @@ String.
<description>
Scope for var.
</description>
<name>scope</name>
<name>scope</name><!-- 作用域 -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
@ -541,7 +631,7 @@ Scope for var.
<description>
URL to be processed.
</description>
<name>value</name>
<name>value</name><!-- 要处理的URL -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -550,7 +640,7 @@ URL to be processed.
Name of the context when specifying a relative URL
resource that belongs to a foreign context.
</description>
<name>context</name>
<name>context</name><!-- 上下文名称 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>

@ -1,3 +1,4 @@
<?xml version="1.0" encoding="ISO-8859-1" ?>
<!--
~ Copyright (c) 2019. ???
@ -417,3 +418,181 @@
</tag>
</taglib>

@ -19,14 +19,16 @@
PUBLIC "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
"http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
<taglib>
<tlib-version>1.0</tlib-version>
<jsp-version>1.2</jsp-version>
<short-name>fmt</short-name>
<uri>http://java.sun.com/jstl/fmt</uri>
<display-name>JSTL fmt</display-name>
<description>JSTL 1.0 i18n-capable formatting library</description>
<tlib-version>1.0</tlib-version>
<!-- ??????-->
<jsp-version>1.2</jsp-version>
<short-name>fmt</short-name>
<uri>http://java.sun.com/jstl/fmt</uri>
<display-name>JSTL fmt</display-name>
<description>JSTL 1.0 i18n-capable formatting library</description>
<validator>
<validator-class>
org.apache.taglibs.standard.tlv.JstlFmtTLV
</validator-class>

@ -20,149 +20,157 @@
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<description>JSTL 1.1 i18n-capable formatting library</description>
<display-name>JSTL fmt</display-name>
<tlib-version>1.1</tlib-version>
<short-name>fmt</short-name>
<uri>http://java.sun.com/jsp/jstl/fmt</uri>
<validator>
<description>
Provides core validation features for JSTL tags.
</description>
<validator-class>
org.apache.taglibs.standard.tlv.JstlFmtTLV
</validator-class>
</validator>
<tag>
<description>
Sets the request character encoding
</description>
<name>requestEncoding</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>
Name of character encoding to be applied when
decoding request parameters.
</description>
<name>value</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<description>JSTL 1.1 i18n-capable formatting library</description> <!-- 描述JSTL 1.1 国际化支持的格式化库 -->
<display-name>JSTL fmt</display-name> <!-- 标签库的显示名称 -->
<tlib-version>1.1</tlib-version> <!-- 标签库的版本 -->
<short-name>fmt</short-name> <!-- 标签库的简短名称 -->
<uri>http://java.sun.com/jsp/jstl/fmt</uri> <!-- 标签库的URI -->
<tag>
<description>
Stores the given locale in the locale configuration variable
</description>
<name>setLocale</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>
A String value is interpreted as the
printable representation of a locale, which
must contain a two-letter (lower-case)
language code (as defined by ISO-639),
and may contain a two-letter (upper-case)
country code (as defined by ISO-3166).
Language and country codes must be
separated by hyphen (-) or underscore
(_).
</description>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
Vendor- or browser-specific variant.
See the java.util.Locale javadocs for
more information on variants.
</description>
<name>variant</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
Scope of the locale configuration variable.
</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
</tag>
<tag>
<description>
Specifies the time zone for any time formatting or parsing actions
nested in its body
</description>
<name>timeZone</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<description>
The time zone. A String value is interpreted as
a time zone ID. This may be one of the time zone
IDs supported by the Java platform (such as
"America/Los_Angeles") or a custom time zone
ID (such as "GMT-8"). See
java.util.TimeZone for more information on
supported time zone formats.
</description>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
</tag>
<tag>
<description>
Stores the given time zone in the time zone configuration variable
</description>
<name>setTimeZone</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag</tag-class>
<body-content>empty</body-content>
<attribute>
<description>
The time zone. A String value is interpreted as
a time zone ID. This may be one of the time zone
IDs supported by the Java platform (such as
"America/Los_Angeles") or a custom time zone
ID (such as "GMT-8"). See java.util.TimeZone for
more information on supported time zone
formats.
</description>
<name>value</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
Name of the exported scoped variable which
stores the time zone of type
java.util.TimeZone.
</description>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<validator>
<description>
Scope of var or the time zone configuration
variable.
Provides core validation features for JSTL tags. <!-- 描述提供JSTL标签的核心验证功能 -->
</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<validator-class>
org.apache.taglibs.standard.tlv.JstlFmtTLV
</validator-class><!-- 验证器类 -->
</validator>
<tag>
<description>
Sets the request character encoding <!-- 描述:设置请求的字符编码 -->
</description>
<name>requestEncoding</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.RequestEncodingTag</tag-class> <!-- 标签实现类 -->
<body-content>empty</body-content> <!-- 标签主体内容为空 -->
<attribute>
<description>
Name of character encoding to be applied when decoding request parameters. <!-- 描述:在解码请求参数时应用的字符编码名称 -->
</description>
<name>value</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Stores the given locale in the locale configuration variable <!-- 描述:将给定的区域设置存储在区域配置变量中 -->
</description>
<name>setLocale</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetLocaleTag</tag-class> <!-- 标签实现类 -->
<body-content>empty</body-content> <!-- 标签主体内容为空 -->
<attribute>
<description>
A String value is interpreted as the printable representation of a locale, which must contain a two-letter (lower-case) language code (as defined by ISO-639), and may contain a two-letter (upper-case) country code (as defined by ISO-3166). Language and country codes must be separated by hyphen (-) or underscore (_). <!-- 描述字符串值被解释为区域的可打印表示必须包含一个两位小写语言代码根据ISO-639定义并且可以包含一个两位大写国家代码根据ISO-3166定义。语言和国家代码必须用连字符-或下划线_分隔。 -->
</description>
<name>value</name> <!-- 属性名称 -->
<required>true</required> <!-- 此属性是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Vendor- or browser-specific variant. See the java.util.Locale javadocs for more information on variants. <!-- 描述供应商或浏览器特定的变体。有关变体的更多信息请参见java.util.Locale的Javadoc。 -->
</description>
<name>variant</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Scope of the locale configuration variable. <!-- 描述:区域配置变量的作用域 -->
</description>
<name>scope</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue> <!-- 不允许使用运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Specifies the time zone for any time formatting or parsing actions nested in its body <!-- 描述:指定其主体中嵌套的任何时间格式化或解析操作的时区 -->
</description>
<name>timeZone</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.TimeZoneTag</tag-class> <!-- 标签实现类 -->
<body-content>JSP</body-content> <!-- 标签主体内容为JSP -->
<attribute>
<description>
The time zone. A String value is interpreted as a time zone ID. This may be one of the time zone IDs supported by the Java platform (such as "America/Los_Angeles") or a custom time zone ID (such as "GMT-8"). See java.util.TimeZone for more information on supported time zone formats. <!-- 描述时区。字符串值被解释为时区ID。这可以是Java平台支持的时区ID之一如“America/Los_Angeles”或自定义时区ID如“GMT-8”。有关支持的时区格式的更多信息请参见java.util.TimeZone。 -->
</description>
<name>value</name> <!-- 属性名称 -->
<required>true</required> <!-- 此属性是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Stores the given time zone in the time zone configuration variable <!-- 描述:将给定的时区存储在时区配置变量中 -->
</description>
<name>setTimeZone</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.SetTimeZoneTag</tag-class> <!-- 标签实现类 -->
<body-content>empty</body-content> <!-- 标签主体内容为空 -->
<attribute>
<description>
The time zone. A String value is interpreted as a time zone ID. This may be one of the time zone IDs supported by the Java platform (such as "America/Los_Angeles") or a custom time zone ID (such as "GMT-8"). See java.util.TimeZone for more information on supported time zone formats. <!-- 描述时区。字符串值被解释为时区ID。这可以是Java平台支持的时区ID之一如“America/Los_Angeles”或自定义时区ID如“GMT-8”。有关支持的时区格式的更多信息请参见java.util.TimeZone。 -->
</description>
<name>value</name> <!-- 属性名称 -->
<required>true</required> <!-- 此属性是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Name of the exported scoped variable which stores the time zone of type java.util.TimeZone. <!-- 描述存储java.util.TimeZone类型的时区的导出作用域变量的名称。 -->
</description>
<name>var</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue> <!-- 不允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Scope of var or the time zone configuration variable. <!-- 描述var或时区配置变量的作用域。 -->
</description>
<name>scope</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue> <!-- 不允许使用运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Loads a resource bundle to be used by its tag body
@ -179,9 +187,9 @@ form as a fully-qualified class name, that is, it uses
have any file type (such as ".class" or ".properties")
suffix.
</description>
<name>basename</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<name>basename</name> <!-- 属性名称 -->
<required>true</required> <!-- 此属性是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
@ -194,6 +202,11 @@ key of any nested &lt;fmt:message&gt; action.
</attribute>
</tag>
<tag>
<description>
Loads a resource bundle and stores it in the named scoped variable or
@ -211,9 +224,9 @@ form as a fully-qualified class name, that is, it uses
have any file type (such as ".class" or ".properties")
suffix.
</description>
<name>basename</name>
<required>true</required>
<rtexprvalue>true</rtexprvalue>
<name>basename</name> <!-- 属性名称 -->
<required>true</required> <!-- 此属性是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
@ -222,114 +235,129 @@ the i18n localization context of type
javax.servlet.jsp.jstl.fmt.LocalizationC
ontext.
</description>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<name>var</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue> <!-- 不允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Scope of var or the localization context
configuration variable.
configuration variable.<!-- 描述var或本地化上下文配置变量的作用域。 -->
</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>scope</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue> <!-- 不允许使用运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Maps key to localized message and performs parametric replacement
Maps key to localized message and performs parametric replacement<!-- 描述:将键映射到本地化消息,并进行参数替换 -->
</description>
<name>message</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.MessageTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>message</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.MessageTag</tag-class> <!-- 标签实现类 -->
<body-content>JSP</body-content> <!-- 标签主体内容为JSP -->
<attribute>
<description>
Message key to be looked up.
Message key to be looked up.<!-- 描述:要查找的消息键。 -->
</description>
<name>key</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<name>key</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Localization context in whose resource
bundle the message key is looked up.
bundle the message key is looked up.<!-- 描述:在其资源包中查找消息键的本地化上下文。 -->
</description>
<name>bundle</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<name>bundle</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<attribute>
<description>
Name of the exported scoped variable
which stores the localized message.
which stores the localized message.<!-- 描述:存储本地化消息的导出作用域变量的名称。 -->
</description>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue> <!-- 不允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Scope of var.
Scope of var.<!-- 描述var的作用域。 -->
</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>scope</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>false</rtexprvalue> <!-- 不允许使用运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Supplies an argument for parametric replacement to a containing
&lt;message&gt; tag
&lt;message&gt; tag<!-- 描述:为包含的<message>标签提供参数替换的参数 -->
</description>
<name>param</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParamTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>param</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParamTag</tag-class> <!-- 标签实现类 -->
<body-content>JSP</body-content> <!-- 标签主体内容为JSP -->
<attribute>
<description>
Argument used for parametric replacement.
Argument used for parametric replacement.<!-- 描述:用于参数替换的参数。 -->
</description>
<name>value</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<name>value</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
</tag>
<tag>
<description>
Formats a numeric value as a number, currency, or percentage
Formats a numeric value as a number, currency, or percentage<!-- 描述:将数字值格式化为数字、货币或百分比 -->
</description>
<name>formatNumber</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<name>formatNumber</name> <!-- 标签名称 -->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatNumberTag</tag-class> <!-- 标签实现类 -->
<body-content>JSP</body-content> <!-- 标签主体内容为JSP -->
<attribute>
<description>
Numeric value to be formatted.
Numeric value to be formatted.<!-- 描述:要格式化的数字值。 -->
</description>
<name>value</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<name>value</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Specifies whether the value is to be
formatted as number, currency, or
percentage.
percentage.<!-- 描述:指定值是否格式化为数字、货币或百分比。 -->
</description>
<name>type</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<name>type</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Custom formatting pattern.
Custom formatting pattern.<!-- 描述:自定义格式化模式。 -->
</description>
<name>pattern</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<name>pattern</name> <!-- 属性名称 -->
<required>false</required> <!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue> <!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
@ -337,9 +365,9 @@ ISO 4217 currency code. Applied only
when formatting currencies (i.e. if type is
equal to "currency"); ignored otherwise.
</description>
<name>currencyCode</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<name>currencyCode</name><!-- 属性名称 -->
<required>false</required><!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue><!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
@ -347,25 +375,30 @@ Currency symbol. Applied only when
formatting currencies (i.e. if type is equal
to "currency"); ignored otherwise.
</description>
<name>currencySymbol</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<name>currencySymbol</name><!-- 属性名称 -->
<required>false</required><!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue><!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
<description>
Specifies whether the formatted output
will contain any grouping separators.
</description>
<name>groupingUsed</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<name>groupingUsed</name><!-- 属性名称 -->
<required>false</required><!-- 此属性不是必须的 -->
<rtexprvalue>true</rtexprvalue><!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Maximum number of digits in the integer
portion of the formatted output.
portion of the formatted output.<!-- 描述:自定义格式化模式。 -->
</description>
<name>maxIntegerDigits</name>
<name>maxIntegerDigits</name><!--max-->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
@ -373,7 +406,7 @@ portion of the formatted output.
<description>
Minimum number of digits in the integer
portion of the formatted output.
</description>
</description><!--注释货币-->
<name>minIntegerDigits</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
@ -381,11 +414,16 @@ portion of the formatted output.
<attribute>
<description>
Maximum number of digits in the
fractional portion of the formatted output.
fractional portion of the formatted output.<!--货币最大值-->
</description>
<name>maxFractionDigits</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
@ -402,17 +440,22 @@ Name of the exported scoped variable
which stores the formatted result as a
String.
</description>
<name>var</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>var</name><!--属性明1-->
<required>false</required><!---->
<rtexprvalue>false</rtexprvalue><!---->
</attribute>
<attribute>
<description>
Scope of var.
</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<name>scope</name><!---->
<required>false</required><!---->
<rtexprvalue>false</rtexprvalue><!---->
</attribute>
</tag>
@ -428,27 +471,37 @@ Scope of var.
String to be parsed.
</description>
<name>value</name>
<required>false</required>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
Specifies whether the string in the value
Specifies whether the string in the value<!---->
attribute should be parsed as a number,
currency, or percentage.
</description>
<name>type</name>
<required>false</required>
<required>false</required><!---->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
Custom formatting pattern that determines
<!--Custom formatting pattern that determines
how the string in the value attribute is to be
parsed.
</description>
parsed.-->
</description><!---->
<name>pattern</name>
<required>false</required>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
@ -460,24 +513,29 @@ operation, or to which the pattern specified
via the pattern attribute (if present) is
applied.
</description>
<name>parseLocale</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<name>parseLocale</name><!---->
<required>false</required><!---->
<rtexprvalue>true</rtexprvalue><!---->
</attribute>
<attribute>
<description>
Specifies whether just the integer portion of
the given value should be parsed.
<!--Specifies whether just the integer portion of
the given value should be parsed.-->
</description>
<name>integerOnly</name>
<required>false</required>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
Name of the exported scoped variable which
<!--Name of the exported scoped variable which
stores the parsed result (of type
java.lang.Number).
java.lang.Number).-->
</description>
<name>var</name>
<required>false</required>
@ -487,7 +545,7 @@ java.lang.Number).
<description>
Scope of var.
</description>
<name>scope</name>
<name>scope</name><!-- 不允许使用运行时表达式 -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
@ -495,7 +553,7 @@ Scope of var.
<tag>
<description>
Formats a date and/or time using the supplied styles and pattern
<!--Formats a date and/or time using the supplied styles and pattern-->
</description>
<name>formatDate</name>
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.FormatDateTag</tag-class>
@ -505,9 +563,14 @@ Scope of var.
Date and/or time to be formatted.
</description>
<name>value</name>
<required>true</required>
<required>true</required><!-- 不允许使用运行时表达式 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
</attribute>
<attribute>
<description>
Specifies whether the time, the date, or both
@ -515,7 +578,7 @@ the time and date components of the given
date are to be formatted.
</description>
<name>type</name>
<required>false</required>
<required>false</required><!-- 不允许使用运行时表达式 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
@ -528,7 +591,12 @@ time (i.e. if type is missing or is equal to
"date" or "both"); ignored otherwise.
</description>
<name>dateStyle</name>
<required>false</required>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
@ -548,64 +616,69 @@ ignored otherwise.
<description>
Custom formatting style for dates and times.
</description>
<name>pattern</name>
<name>pattern</name><!-- 属性名称 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
</attribute><!-- 描述:自定义格式化模式。 -->
<attribute>
<description>
Time zone in which to represent the formatted
time.
</description>
<name>timeZone</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<rtexprvalue>true</rtexprvalue><!-- 描述:自定义格式化模式。 -->
</attribute>
<attribute>
<description>
Name of the exported scoped variable which
stores the formatted result as a String.
Name of the exported scoped variable which<!-- 描述:自定义格式化模式。 -->
stores the formatted result as a String.
</description>
<name>var</name>
<name>var</name><!-- 属性名称 -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<attribute>
<description>
Scope of var.
</description>
<name>scope</name>
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</description><!---->
<name>scope</name><!-- 属性名称 -->
<required>false</required><!---->
<rtexprvalue>false</rtexprvalue><!-- 描述:自定义格式化模式。 -->
</attribute>
</tag>
<tag>
<description>
<description><!-- 描述:自定义格式化模式。 -->
Parses the string representation of a date and/or time
</description>
<name>parseDate</name>
<name>parseDate</name><!---->
<tag-class>org.apache.taglibs.standard.tag.rt.fmt.ParseDateTag</tag-class>
<body-content>JSP</body-content>
<attribute>
<description>
Date string to be parsed.
</description>
<name>value</name>
<name>value</name><!-- 描述:自定义格式化模式。 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<rtexprvalue>true</rtexprvalue><!---->
</attribute>
<attribute>
<description>
Specifies whether the date string in the
value attribute is supposed to contain a
time, a date, or both.
</description>
<name>type</name>
</description><!-- 描述:自定义格式化模式。 -->
<name>type</name><!-- 属性名称 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<rtexprvalue>true</rtexprvalue><!-- 不允许使用运行时表达式 -->
</attribute>
<attribute>
<attribute><!---->
<description>
Predefined formatting style for days
which determines how the date
@ -615,10 +688,10 @@ date or both a date and time (i.e. if type
is missing or is equal to "date" or "both");
ignored otherwise.
</description>
<name>dateStyle</name>
<name>dateStyle</name><!-- 描述:自定义格式化模式。 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<rtexprvalue>true</rtexprvalue><!-- 不允许使用运行时表达式 -->
</attribute><!---->
<attribute>
<description>
Predefined formatting styles for times
@ -628,28 +701,33 @@ parsed. Applied only when formatting a
time or both a date and time (i.e. if type
is equal to "time" or "both"); ignored
otherwise.
</description>
<name>timeStyle</name>
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</description><!---->
<name>timeStyle</name><!-- 属性名称 -->
<required>false</required><!-- 描述:自定义格式化模式。 -->
<rtexprvalue>true</rtexprvalue><!-- 不允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
<description><!---->
Custom formatting pattern which
determines how the date string is to be
parsed.
</description>
<name>pattern</name>
<name>pattern</name><!-- 属性名称 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
<description>
<description><!---->
Time zone in which to interpret any time
information in the date string.
information in the date string.<!-- 描述:自定义格式化模式。 -->
</description>
<name>timeZone</name>
<required>false</required>
<name>timeZone</name><!-- 属性名称 -->
<required>false</required><!-- 不允许使用运行时表达式 -->
<rtexprvalue>true</rtexprvalue>
</attribute>
<attribute>
@ -660,28 +738,33 @@ the parse operation, or to which the
pattern specified via the pattern
attribute (if present) is applied.
</description>
<name>parseLocale</name>
<name>parseLocale</name><!-- 属性名称 -->
<required>false</required>
<rtexprvalue>true</rtexprvalue>
<rtexprvalue>true</rtexprvalue><!-- 允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Name of the exported scoped variable in
<description><!-- 描述:自定义格式化模式。 -->
Name of the exported scoped variable in
which the parsing result (of type
java.util.Date) is stored.
</description>
<name>var</name>
<name>var</name><!-- 属性名称 -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
<rtexprvalue>false</rtexprvalue><!-- 不允许使用运行时表达式 -->
</attribute>
<attribute>
<description>
Scope of var.
</description>
<name>scope</name>
<description><!-- 描述:自定义格式化模式。 -->
Scope of var.
</description>
<name>scope</name><!-- 属性名称 -->
<required>false</required>
<rtexprvalue>false</rtexprvalue>
</attribute>
<rtexprvalue>false</rtexprvalue><!-- 不允许使用运行时表达式 -->
</attribute><!-- 描述:自定义格式化模式。 -->
</tag>
</taglib>

@ -1,5 +1,9 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Copyright (c) 2019. 黄钰朝
~
@ -16,41 +20,81 @@
~ limitations under the License.
-->
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 描述JSTL 1.1函数库 -->
<description>JSTL 1.1 functions library</description>
<!-- 显示名称 -->
<display-name>JSTL functions</display-name>
<!-- JSTL版本 -->
<tlib-version>1.1</tlib-version>
<!-- 短名称 -->
<short-name>fn</short-name>
<!-- URI -->
<uri>http://java.sun.com/jsp/jstl/functions</uri>
<!-- 定义一个函数 -->
<function>
<!-- 函数描述 -->
<description>
Tests if an input string contains the specified substring.
</description>
<!-- 函数名称 -->
<name>contains</name>
<!-- 函数所属类 -->
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<!-- 函数签名 -->
<function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>
<!-- 函数示例 -->
<example>
&lt;c:if test="${fn:contains(name, searchString)}">
</example>
</function>
<!-- 定义一个函数 -->
<function>
<!-- 函数描述 -->
<description>
Tests if an input string contains the specified substring in a case insensitive way.
</description>
<!-- 函数名称 -->
<name>containsIgnoreCase</name>
<!-- 函数所属类 -->
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<!-- 函数签名 -->
<function-signature>boolean containsIgnoreCase(java.lang.String, java.lang.String)</function-signature>
<!-- 函数示例 -->
<example>
&lt;c:if test="${fn:containsIgnoreCase(name, searchString)}">
</example>
</function>
<!-- 测试输入字符串是否以指定的后缀结尾 -->
<function>
<description>
Tests if an input string ends with the specified suffix.
@ -63,6 +107,8 @@
</example>
</function>
<!-- 转义XML标记 -->
<function>
<description>
Escapes characters that could be interpreted as XML markup.
@ -75,6 +121,8 @@
</example>
</function>
<!-- 返回字符串中指定子字符串第一次出现的索引 -->
<function>
<description>
Returns the index withing a string of the first occurrence of a specified substring.
@ -87,6 +135,10 @@
</example>
</function>
<!-- 将数组的所有元素连接成一个字符串 -->
<!-- 将数组中的所有元素连接成一个字符串 -->
<function>
<description>
Joins all elements of an array into a string.
@ -99,6 +151,8 @@
</example>
</function>
<!-- 返回集合中的项目数,或字符串中的字符数 -->
<function>
<description>
Returns the number of items in a collection, or the number of characters in a string.
@ -111,6 +165,8 @@
</example>
</function>
<!-- 返回一个字符串,该字符串是通过将输入字符串中的所有"before"字符串替换为"after"子字符串得到的 -->
<function>
<description>
Returns a string resulting from replacing in an input string all occurrences
@ -124,6 +180,10 @@
</example>
</function>
<!-- 将字符串分割成一个子字符串数组 -->
<!-- 将字符串分割成子字符串数组 -->
<function>
<description>
Splits a string into an array of substrings.
@ -136,6 +196,8 @@
</example>
</function>
<!-- 测试输入字符串是否以指定的前缀开头 -->
<function>
<description>
Tests if an input string starts with the specified prefix.
@ -148,6 +210,8 @@
</example>
</function>
<!-- 返回字符串的子集 -->
<function>
<description>
Returns a subset of a string.
@ -160,6 +224,8 @@
</example>
</function>
<!-- 返回字符串在特定子字符串之后的子集 -->
<function>
<description>
Returns a subset of a string following a specific substring.
@ -172,6 +238,8 @@
</example>
</function>
<!-- 返回字符串在特定子字符串之前的子集 -->
<function>
<description>
Returns a subset of a string before a specific substring.
@ -184,6 +252,8 @@
</example>
</function>
<!-- 将字符串中的所有字符转换为小写 -->
<function>
<description>
Converts all of the characters of a string to lower case.
@ -196,6 +266,8 @@
</example>
</function>
<!-- 将字符串中的所有字符转换为大写 -->
<function>
<description>
Converts all of the characters of a string to upper case.
@ -208,6 +280,8 @@
</example>
</function>
<!-- 去除字符串两端的空白字符 -->
<function>
<description>
Removes white spaces from both ends of a string.
@ -221,3 +295,301 @@
</function>
</taglib>
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Copyright (c) 2019. 黄钰朝
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License.
-->
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 描述JSTL 1.1函数库 -->
<description>JSTL 1.1 functions library</description>
<!-- 显示名称 -->
<display-name>JSTL functions</display-name>
<!-- JSTL版本 -->
<tlib-version>1.1</tlib-version>
<!-- 短名称 -->
<short-name>fn</short-name>
<!-- URI -->
<uri>http://java.sun.com/jsp/jstl/functions</uri>
<!-- 定义一个函数 -->
<function>
<!-- 函数描述 -->
<description>
Tests if an input string contains the specified substring.
</description>
<!-- 函数名称 -->
<name>contains</name>
<!-- 函数所属类 -->
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<!-- 函数签名 -->
<function-signature>boolean contains(java.lang.String, java.lang.String)</function-signature>
<!-- 函数示例 -->
<example>
&lt;c:if test="${fn:contains(name, searchString)}">
</example>
</function>
<!-- 定义一个函数 -->
<function>
<!-- 函数描述 -->
<description>
Tests if an input string contains the specified substring in a case insensitive way.
</description>
<!-- 函数名称 -->
<name>containsIgnoreCase</name>
<!-- 函数所属类 -->
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<!-- 函数签名 -->
<function-signature>boolean containsIgnoreCase(java.lang.String, java.lang.String)</function-signature>
<!-- 函数示例 -->
<example>
&lt;c:if test="${fn:containsIgnoreCase(name, searchString)}">
</example>
</function>
<!-- 测试输入字符串是否以指定的后缀结尾 -->
<function>
<description>
Tests if an input string ends with the specified suffix.
</description>
<name>endsWith</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>boolean endsWith(java.lang.String, java.lang.String)</function-signature>
<example>
&lt;c:if test="${fn:endsWith(filename, ".txt")}">
</example>
</function>
<!-- 转义XML标记 -->
<function>
<description>
Escapes characters that could be interpreted as XML markup.
</description>
<name>escapeXml</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String escapeXml(java.lang.String)</function-signature>
<example>
${fn:escapeXml(param:info)}
</example>
</function>
<!-- 返回字符串中指定子字符串第一次出现的索引 -->
<function>
<description>
Returns the index withing a string of the first occurrence of a specified substring.
</description>
<name>indexOf</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>int indexOf(java.lang.String, java.lang.String)</function-signature>
<example>
${fn:indexOf(name, "-")}
</example>
</function>
<!-- 将数组的所有元素连接成一个字符串 -->
<!-- 将数组中的所有元素连接成一个字符串 -->
<function>
<description>
Joins all elements of an array into a string.
</description>
<name>join</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String join(java.lang.String[], java.lang.String)</function-signature>
<example>
${fn:join(array, ";")}
</example>
</function>
<!-- 返回集合中的项目数,或字符串中的字符数 -->
<function>
<description>
Returns the number of items in a collection, or the number of characters in a string.
</description>
<name>length</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>int length(java.lang.Object)</function-signature>
<example>
You have ${fn:length(shoppingCart.products)} in your shopping cart.
</example>
</function>
<!-- 返回一个字符串,该字符串是通过将输入字符串中的所有"before"字符串替换为"after"子字符串得到的 -->
<function>
<description>
Returns a string resulting from replacing in an input string all occurrences
of a "before" string into an "after" substring.
</description>
<name>replace</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String replace(java.lang.String, java.lang.String, java.lang.String)</function-signature>
<example>
${fn:replace(text, "-", "&#149;")}
</example>
</function>
<!-- 将字符串分割成一个子字符串数组 -->
<!-- 将字符串分割成子字符串数组 -->
<function>
<description>
Splits a string into an array of substrings.
</description>
<name>split</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String[] split(java.lang.String, java.lang.String)</function-signature>
<example>
${fn:split(customerNames, ";")}
</example>
</function>
<!-- 测试输入字符串是否以指定的前缀开头 -->
<function>
<description>
Tests if an input string starts with the specified prefix.
</description>
<name>startsWith</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>boolean startsWith(java.lang.String, java.lang.String)</function-signature>
<example>
&lt;c:if test="${fn:startsWith(product.id, "100-")}">
</example>
</function>
<!-- 返回字符串的子集 -->
<function>
<description>
Returns a subset of a string.
</description>
<name>substring</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String substring(java.lang.String, int, int)</function-signature>
<example>
P.O. Box: ${fn:substring(zip, 6, -1)}
</example>
</function>
<!-- 返回字符串在特定子字符串之后的子集 -->
<function>
<description>
Returns a subset of a string following a specific substring.
</description>
<name>substringAfter</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String substringAfter(java.lang.String, java.lang.String)</function-signature>
<example>
P.O. Box: ${fn:substringAfter(zip, "-")}
</example>
</function>
<!-- 返回字符串在特定子字符串之前的子集 -->
<function>
<description>
Returns a subset of a string before a specific substring.
</description>
<name>substringBefore</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String substringBefore(java.lang.String, java.lang.String)</function-signature>
<example>
Zip (without P.O. Box): ${fn:substringBefore(zip, "-")}
</example>
</function>
<!-- 将字符串中的所有字符转换为小写 -->
<function>
<description>
Converts all of the characters of a string to lower case.
</description>
<name>toLowerCase</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String toLowerCase(java.lang.String)</function-signature>
<example>
Product name: ${fn.toLowerCase(product.name)}
</example>
</function>
<!-- 将字符串中的所有字符转换为大写 -->
<function>
<description>
Converts all of the characters of a string to upper case.
</description>
<name>toUpperCase</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String toUpperCase(java.lang.String)</function-signature>
<example>
Product name: ${fn.UpperCase(product.name)}
</example>
</function>
<!-- 去除字符串两端的空白字符 -->
<function>
<description>
Removes white spaces from both ends of a string.
</description>
<name>trim</name>
<function-class>org.apache.taglibs.standard.functions.Functions</function-class>
<function-signature>java.lang.String trim(java.lang.String)</function-signature>
<example>
Name: ${fn.trim(name)}
</example>
</function>
</taglib>

@ -1,5 +1,8 @@
<?xml version="1.0" encoding="UTF-8" ?>
<!--
~ Copyright (c) 2019. 黄钰朝
~
@ -16,29 +19,58 @@
~ limitations under the License.
-->
<!-- 定义一个标签库 -->
<taglib xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<!-- 标签库的描述 -->
<description>
Restricts JSP pages to the JSTL tag libraries
</description>
</description>
<!-- 标签库的显示名称 -->
<display-name>permittedTaglibs</display-name>
<!-- 标签库的版本号 -->
<tlib-version>1.1</tlib-version>
<!-- 标签库的简称 -->
<short-name>permittedTaglibs</short-name>
<!-- 标签库的URI -->
<uri>http://jakarta.apache.org/taglibs/standard/permittedTaglibs</uri>
<!-- 验证器 -->
<validator>
<!-- 验证器的类 -->
<validator-class>
javax.servlet.jsp.jstl.tlv.PermittedTaglibsTLV
</validator-class>
<!-- 初始化参数 -->
<init-param>
<!-- 参数的描述 -->
<description>
Whitespace-separated list of taglib URIs to permit. This example
TLD for the Standard Taglib allows only JSTL 'el' taglibs to be
imported.
</description>
<!-- 参数的名称 -->
<param-name>permittedTaglibs</param-name>
<!-- 参数的值 -->
<param-value>
http://java.sun.com/jsp/jstl/core
http://java.sun.com/jsp/jstl/fmt

@ -24,7 +24,12 @@
Validates JSP pages to prohibit use of scripting elements.
</description>
<tlib-version>1.1</tlib-version>
<!--版本序号-->
<short-name>scriptfree</short-name>
<!--段字符-->
<uri>http://jakarta.apache.org/taglibs/standard/scriptfree</uri>
<validator>
@ -40,6 +45,11 @@
</description>
<param-name>allowDeclarations</param-name>
<param-value>false</param-value>
<!--类别方式-->
</init-param>
<init-param>
<description>
@ -52,10 +62,19 @@
<description>
Controls whether or not top-level expressions are considered valid.
</description>
<param-name>allowExpressions</param-name>
<param-name>allowExpressions</param-name><!-- 属性类型 -->
<param-value>false</param-value>
</init-param>
<init-param>
<init-param><!-- 当前项的作用域变量名称 -->
<description>
Controls whether or not expressions used to supply request-time
attribute values are considered valid.

File diff suppressed because it is too large Load Diff

@ -34,7 +34,7 @@
</br>
<strong><p align="center">${message}</p></strong>
</br>
</div>
</div><!--ok-->
</div>
<hr>
</body>

File diff suppressed because it is too large Load Diff

@ -21,132 +21,220 @@
Time: 3:51
To change this template use File | Settings | File Templates.
--%>
<%--
页面指令,设置页面的内容类型、字符集、脚本语言和页面编码。
contentType 指定了返回给客户端的内容类型为 HTML并使用 UTF-8 编码。
language 指定了页面中使用的脚本语言为 Java。
pageEncoding 明确指定了页面本身的编码为 UTF-8虽然通常与 contentType 中的 charset 相同,但在这里为了清晰起见还是单独设置了。
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%--
引入 JSTL 核心标签库,前缀为 c。
这允许我们在 JSP 页面中使用 JSTL 标签,如 <c:set>、<c:if> 等。
--%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%--
使用 <c:set> 标签设置一个名为 host 的变量,其值为 "localhost:8080/wechat"。
这个变量稍后在页面中用于构建 URL。
--%>
<c:set var="host" value="localhost:8080/wechat"/>
<%--设置主机名--%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>wechat</title>
<link rel="shortcut icon" type=image/x-icon href=https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico>
<meta charset="utf-8"> <%-- 设置页面的字符集为 UTF-8 --%>
<title>wechat</title> <%-- 页面标题 --%>
<%-- 引入微信图标 --%>
<link rel="shortcut icon" type="image/x-icon" href="https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico">
<%-- 引入 Bootstrap CSS 框架 --%>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<%-- 引入 jQuery 库 --%>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1.js"></script>
<%--
发送请求脚本的占位符,目前为空。
可以在这里添加 JavaScript 代码来处理发送请求的逻辑。
--%>
<!--BEGIN——发送请求脚本-->
<!--END——发送请求脚本-->
</head>
<body>
<%-- 页面背景容器 --%>
<div class="background">
<%-- 页面头部--%>
<%-- 页面头部 --%>
<div class="login-head" style="height: 100px">
<%-- 使用 Bootstrap 的 jumbotron 类来创建一个醒目的容器 --%>
<div class="jumbotron" style="padding-bottom: 20px;padding-top:20px;margin:0px">
<%-- 包含微信 logo 和标语的区域 --%>
<div class="logo">
<a href="${pageContext.request.contextPath}/index.jsp"
style="color: #999;font-size: 44px;text-decoration: none"><img
src="${pageContext.request.contextPath}/static/img/logo.png" alt="logo"
style="width: 100px;margin: 10px">微信,是一种生活方式</h2>
</a>
style="color: #999;font-size: 44px;text-decoration: none">
<img src="${pageContext.request.contextPath}/static/img/logo.png" alt="logo"
style="width: 100px;margin: 10px">
<%-- 注意:这里的 <h2> 标签被错误地关闭了,应该使用 </a> 来关闭 <a> 标签,而不是 </h2> --%>
微信,是一种生活方式</a> <%-- 这里应该使用正确的 HTML 结构,但原代码有误,已按原样注释 --%>
</a> <%-- 这是一个多余的闭合标签,应该删除 --%>
</div>
</div>
</div>
<%--
使用 <c:if> 标签检查 message 变量是否不为 null。
如果不为 null则使用 JavaScript 显示一个警告框。
--%>
<script>
<c:if test="${message!=null}">
alert("系统提示:${message}");
</c:if>
</script>
<%-- 输入框容器 --%>
<div class="input-box">
<%-- 输入字段的容器,带有自定义样式 --%>
<div class="color-input-field">
<form action="http://${host}/wechat/user?method=login.do" method="post">
<%--
表单,提交到 http://${host}/wechat/user?method=login.do。
使用 POST 方法提交。
--%>
<form action="http://${host}/wechat/user?method=login.do" method="post">
<%--
一个隐藏的提交按钮,可能用于触发某些 JavaScript 事件,但在这里被设置为不显示。
--%>
<input id="index" type="submit" style="display: none">
<h2 class="input-box-title">邮箱登陆</h2>
<input type="text" required="required" class="form-control" id="email"
value="${param.email}" name="email" placeholder="请输入登陆邮箱" >
<br/>
<input id="password" type="password" required="required" class="form-control" name="password"
placeholder="请输入密码">
<div class="remember-me">
<input id="option" name="auto_login" type="checkbox" value="true">记住登陆
</div>
<input type="submit" class="submit-button" value="登陆">
<br>
<div class="switch-button">
<a href="${pageContext.request.contextPath}/register.jsp">立即注册</a>
<a href="http://${host}/wechat/user?method=login.do&email=visitor" onclick="visitor()">| 游客模式</a>
</div>
<%-- 输入框标题 --%>
<h2 class="input-box-title">邮箱登陆</h2>
<%-- 邮箱输入框,带有占位符和必填验证 --%>
<input type="text" required="required" class="form-control" id="email"
value="${param.email}" name="email" placeholder="请输入登陆邮箱">
<br/>
<%-- 密码输入框,带有占位符和必填验证 --%>
<input id="password" type="password" required="required" class="form-control" name="password"
placeholder="请输入密码">
<%-- 记住登陆选项 --%>
<div class="remember-me">
<input id="option" name="auto_login" type="checkbox" value="true">记住登陆
</div>
<%-- 提交按钮 --%>
<input type="submit" class="submit-button" value="登陆">
<br>
<%-- 切换按钮,包含注册链接和游客模式链接 --%>
<div class="switch-button">
<a href="${pageContext.request.contextPath}/register.jsp">立即注册</a>
<%--
游客模式链接,带有 onclick 事件处理器(尽管这里没有定义 visitor() 函数,可能需要在 JavaScript 中定义)。
注意:这里的 URL 拼接方式可能会导致安全问题,建议使用更安全的参数传递方式。
--%>
<a href="http://${host}/wechat/user?method=login.do&email=visitor" onclick="visitor()">| 游客模式</a>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
<!-- 网页的结束body标签通常表示HTML文档的主体内容结束 -->
</body>
<!-- 定义CSS样式 -->
<style type="text/css">
/* 设置背景样式 */
.background {
height: -webkit-fill-available;
min-height: 750px;
text-align: center;
font-size: 14px;
background-color: #f1f1f1;
z-index: -1;
height: -webkit-fill-available; /* 高度填充可用空间针对webkit浏览器 */
min-height: 750px; /* 最小高度 */
text-align: center; /* 文本居中 */
font-size: 14px; /* 字体大小 */
background-color: #f1f1f1; /* 背景颜色 */
z-index: -1; /* 堆叠顺序,设置为-1表示在其他元素之下 */
}
/* 设置logo样式 */
.logo {
position: absolute;
top: 56px;
margin-left: 50px;
position: absolute; /* 绝对定位 */
top: 56px; /* 距离顶部56px */
margin-left: 50px; /* 距离左侧50px */
}
/* 设置表单控件样式 */
.form-control {
padding: 10px;
min-height: 55px;
max-height: 70px;
font-size: 22px;
padding: 10px; /* 内边距 */
min-height: 55px; /* 最小高度 */
max-height: 70px; /* 最大高度 */
font-size: 22px; /* 字体大小 */
}
/* 设置输入框标题样式 */
.input-box-title {
text-align: center;
margin: 0 auto 50px;
padding: 10px;
font-weight: 400;
color: #969696
text-align: center; /* 文本居中 */
margin: 0 auto 50px; /* 上下外边距自动底部外边距50px */
padding: 10px; /* 内边距 */
font-weight: 400; /* 字体粗细 */
color: #969696 /* 字体颜色 */
}
/* 设置颜色输入框样式 */
.color-input-field {
padding: 50px;
font-size: 22px;
height: 625px;
width: 500px
padding: 50px; /* 内边距 */
font-size: 22px; /* 字体大小 */
height: 625px; /* 高度 */
width: 500px /* 宽度 */
}
/* 设置输入框容器样式 */
.input-box {
width: fit-content;
margin: 104px auto;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 0 8px rgba(0, 0, 0, .1);
vertical-align: middle;
width: fit-content; /* 宽度适应内容 */
margin: 104px auto; /* 上下外边距104px左右外边距自动 */
background-color: #fff; /* 背景颜色 */
border-radius: 4px; /* 边框圆角 */
box-shadow: 0 0 8px rgba(0, 0, 0, .1); /* 盒子阴影 */
vertical-align: middle; /* 垂直对齐方式 */
}
/* 设置提交按钮样式 */
.submit-button {
margin-top: 20px;
background-color: #1AAD19;
color: #FFFFFF;
padding: 9px 18px;
border-radius: 5px;
outline: none;
border: none;
width: 100%;
margin-top: 20px; /* 上外边距 */
background-color: #1AAD19; /* 背景颜色 */
color: #FFFFFF; /* 字体颜色 */
padding: 9px 18px; /* 内边距 */
border-radius: 5px; /* 边框圆角 */
outline: none; /* 移除默认轮廓 */
border: none; /* 无边框 */
width: 100%; /* 宽度100% */
}
/* 设置记住我选项样式 */
.remember-me {
float: left;
font-weight: 400;
color: #969696;
margin-top: 20px;
float: left; /* 左浮动 */
font-weight: 400; /* 字体粗细 */
color: #969696; /* 字体颜色 */
margin-top: 20px; /* 上外边距 */
}
/* 设置切换按钮容器样式 */
.switch-button {
text-align: left;
text-align: left; /* 文本左对齐 */
}
</style>
</html>
<!-- 网页的结束html标签表示HTML文档结束 -->
</html>

@ -21,55 +21,69 @@
Time: 21:23
To change this template use File | Settings | File Templates.
--%>
<%-- 设置页面的内容类型为HTML并指定字符集和页面编码为UTF-8 --%>
<%@ page contentType="text/html;charset=UTF-8" language="java" pageEncoding="UTF-8" %>
<%-- 引入JSTL核心标签库并设置前缀为c --%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%-- 设置一个名为host的变量其值为localhost:8080/wechat --%>
<c:set var="host" value="localhost:8080/wechat"/>
<%--设置主机名--%>
<%-- 注释:设置主机名 --%>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>wechat</title>
<link rel="shortcut icon" type=image/x-icon href=https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico>
<%-- 设置网页的快捷图标favicon --%>
<link rel="shortcut icon" type="image/x-icon" href="https://res.wx.qq.com/a/wx_fed/assets/res/NTI4MWU5.ico">
<%-- 引入Bootstrap的CSS样式 --%>
<link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
<%-- 引入jQuery库 --%>
<script src="${pageContext.request.contextPath}/static/js/jquery-3.4.1.js"></script>
<script>
// 定义注册函数
function register() {
// 获取邮箱和密码输入框的值
var email = document.getElementById("email").value;
var password = document.getElementById("password").value;
// 验证邮箱是否填写
if(email==null||email==''){
alert("请填写邮箱");
return;
}
// 验证密码是否填写
if(password==null||password===''){
alert("请填写密码");
return;
}
// 验证是否同意用户使用协议
if(!document.getElementById("agree").checked){
alert("请先同意用户使用协议");
return;
}
// 触发表单提交
document.getElementById("submit").click();
}
</script>
</head>
<body>
<%-- 如果message变量不为空则弹出系统提示 --%>
<script>
<c:if test="${message!=null}">
alert("系统提示:${message}");
</c:if>
</script>
<div class="background">
<%-- 页面头部--%>
<%-- 页面头部 --%>
<div class="login-head" style="height: 100px">
<div class="jumbotron" style="padding-bottom: 20px;padding-top:20px;margin:0px">
<div class="logo">
<%-- 链接到首页并显示微信logo和标语 --%>
<a href="${pageContext.request.contextPath}/index.jsp"
style="color: #999;font-size: 44px;text-decoration: none"><img
src="${pageContext.request.contextPath}/static/img/logo.png" alt="logo"
style="width: 100px;margin: 10px">微信,是一种生活方式</h2>
style="color: #999;font-size: 44px;text-decoration: none">
<img src="${pageContext.request.contextPath}/static/img/logo.png" alt="logo"
style="width: 100px;margin: 10px">
<h2>微信,是一种生活方式</h2>
</a>
</div>
</div>
@ -77,101 +91,119 @@
<div class="input-box">
<div class="color-input-field">
<h2 class="input-box-title">注册账号</h2>
<form action="http://${host}/wechat/user?method=register.do" method="post">
<%-- 表单提交到注册处理URL使用POST方法 --%>
<form action="http://${host}/wechat/user?method=register.do" method="post">
<%-- 隐藏一个提交按钮用于在JavaScript中触发提交 --%>
<input id="index" type="submit" style="display: none">
<input id="email" type="text" required="required" class="form-control" name="email"
value="${data.email}" placeholder="请输入邮箱号">
<br/>
<input id="password" type="password" required="required" class="form-control" name="password"
value="${data.password}" placeholder="请输入密码(6-20位英文字母数字或下划线)">
<div class="remember-me">
<input id="agree" type="checkbox" name="agreement" value="true"
style="margin-bottom: 13px">我已阅读并同意<a href="agreement.html">《微信服务协议》</a>
</div>
<%-- 邮箱输入框 --%>
<input id="email" type="text" required="required" class="form-control" name="email"
value="${data.email}" placeholder="请输入邮箱号">
<br/>
<%-- 密码输入框 --%>
<input id="password" type="password" required="required" class="form-control" name="password"
value="${data.password}" placeholder="请输入密码(6-20位英文字母数字或下划线)">
<div class="remember-me">
<%-- 同意协议复选框 --%>
<input id="agree" type="checkbox" name="agreement" value="true"
style="margin-bottom: 13px">
我已阅读并同意<a href="agreement.html">《微信服务协议》</a>
</div>
<%-- 隐藏的真实提交按钮 --%>
<input type="submit" id="submit" style="display: none">
<input onclick="register()" type="button" class="submit-button" value="注册">
<br>
<div class="switch-button">
已有账号?<a href="${pageContext.request.contextPath}/login.jsp">请登陆</a>
<a href="http://${host}/wechat/user?method=login.do&email=visitor" >| 游客模式</a>
</div>
<%-- 注册按钮点击后调用JavaScript的register函数 --%>
<input onclick="register()" type="button" class="submit-button" value="注册">
<br>
<div class="switch-button">
<%-- 提供登录和游客模式的链接 --%>
已有账号?<a href="${pageContext.request.contextPath}/login.jsp">请登陆</a>
<a href="http://${host}/wechat/user?method=login.do&email=visitor"> | 游客模式</a>
</div>
</form>
</div>
</div>
</div>
</body>
</html>
<!-- 样式定义开始 -->
<style type="text/css">
/* 定义背景样式 */
.background {
height: -webkit-fill-available;
min-height: 750px;
text-align: center;
font-size: 14px;
background-color: #f1f1f1;
z-index: -1;
height: -webkit-fill-available; /* 在webkit浏览器中高度自动填充可用空间 */
min-height: 750px; /* 最小高度为750px */
text-align: center; /* 文本居中 */
font-size: 14px; /* 字体大小为14px */
background-color: #f1f1f1; /* 背景颜色为浅灰色 */
z-index: -1; /* 元素的堆叠顺序为-1通常用于放在其他元素之后 */
}
/* 定义logo样式 */
.logo {
position: absolute;
top: 56px;
margin-left: 50px;
position: absolute; /* 绝对定位 */
top: 56px; /* 距离顶部56px */
margin-left: 50px; /* 距离左侧50px */
}
/* 定义表单控件样式 */
.form-control {
padding: 10px;
min-height: 55px;
max-height: 70px;
font-size: 22px;
padding: 10px; /* 内边距为10px */
min-height: 55px; /* 最小高度为55px */
max-height: 70px; /* 最大高度为70px */
font-size: 22px; /* 字体大小为22px */
}
/* 定义输入框标题样式 */
.input-box-title {
text-align: center;
margin: 0 auto 50px;
padding: 10px;
font-weight: 400;
color: #969696
text-align: center; /* 文本居中 */
margin: 0 auto 50px; /* 上边距为0左右自动居中下边距为50px */
padding: 10px; /* 内边距为10px */
font-weight: 400; /* 字体粗细为400 */
color: #969696; /* 字体颜色为深灰色 */
}
/* 定义颜色输入框样式 */
.color-input-field {
padding: 50px;
font-size: 22px;
height: 625px;
width: 500px
padding: 50px; /* 内边距为50px */
font-size: 22px; /* 字体大小为22px */
height: 625px; /* 高度为625px */
width: 500px; /* 宽度为500px */
}
/* 定义输入框容器样式 */
.input-box {
width: fit-content;
margin: 104px auto;
background-color: #fff;
border-radius: 4px;
box-shadow: 0 0 8px rgba(0, 0, 0, .1);
vertical-align: middle;
width: fit-content; /* 宽度适应内容 */
margin: 104px auto; /* 上下边距为104px左右自动居中 */
background-color: #fff; /* 背景颜色为白色 */
border-radius: 4px; /* 边框圆角为4px */
box-shadow: 0 0 8px rgba(0, 0, 0, .1); /* 盒子阴影效果 */
vertical-align: middle; /* 垂直对齐方式为中间 */
}
/* 定义提交按钮样式 */
.submit-button {
margin-top: 20px;
background-color: #1AAD19;
color: #FFFFFF;
padding: 9px 18px;
border-radius: 5px;
outline: none;
border: none;
width: 100%;
margin-top: 20px; /* 上边距为20px */
background-color: #1AAD19; /* 背景颜色为绿色 */
color: #FFFFFF; /* 字体颜色为白色 */
padding: 9px 18px; /* 内边距为9px上下和18px左右 */
border-radius: 5px; /* 边框圆角为5px */
outline: none; /* 去除默认轮廓线 */
border: none; /* 无边框 */
width: 100%; /* 宽度为父容器的100% */
}
/* 定义记住我选项样式 */
.remember-me {
float: left;
font-weight: 400;
color: #969696;
margin-top: 20px;
float: left; /* 左浮动 */
font-weight: 400; /* 字体粗细为400 */
color: #969696; /* 字体颜色为深灰色 */
margin-top: 20px; /* 上边距为20px */
}
/* 定义切换按钮样式 */
.switch-button {
text-align: left;
text-align: left; /* 文本左对齐 */
}
</style>
</html>
<!-- 样式定义结束 -->

Loading…
Cancel
Save