第3章 应用JSP技术开发动态网站【首页】杜老师


0. 创建项目

(1) 创建项目01JavaWeb03, 01学号 web project, Java EE 5.0

(2) 创建首页index.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<%@ page language="java" pageEncoding="GBK"%>
<html>
  <head>
    <title>第3章 应用JSP技术开发动态网站(杜老师)</title>
  </head>
  <body>
    <h1>第3章 应用JSP技术开发动态网站(杜老师)</h1>
    <hr/>
    <span >1. 开发一个JSP程序</span><br/>
    <a href="HelloWorld01.jsp">范例1. HelloWorld</a><br>
    <span >2. JSP基本语法</span><br/>
    <a href="Comments1_01.jsp">范例2. 注释: html注释</a><br>
    <a href="Comments2_01.jsp">范例3. 注释: jsp注释</a><br>
    <a href="JSPScriptlets01.jsp">范例4. JSP Scriptlets 脚本元素</a><br>
    <a href="IncludeDemo01.jsp">范例5. 包含(include)文件</a><br>
    <span >3. JSP动作指令</span><br/>
    <a href="JSPIncludeDemo01.jsp">范例6. 包含动作: 静态、动态文件</a><br>
    <a href="JSPIncludeParamDemo01.jsp">   包含动作(带参数): JSPIncludeParamDemo</a><br>
    <a href="JSPForwardDemo01.jsp">   转发动作: JSPForward</a><br>
    <a href="JSPForwardParamDemo01.jsp">   转发动作(带参数): JSPForwardParamDemo</a><br>
    <span >4. JSP主要内置对象</span><br/>
    <a href="RequestScopeDemo01.jsp">范例7. RequestScopeDemo01</a><br>
    <a href="RequestForm01.html">范例8. RequestForm</a><br>
    <a href="ResponseDemo01.jsp">范例9. ResponseDemo</a><br>
    <a href="SessionDemo01.jsp">范例10. SessionDemo</a><br>
    <a href="ApplicationDemo01.jsp">范例11. ApplicationDemo</a><br>
    <a href="PageContextDemo01.jsp">范例12. PageContextDemo</a><br>
    <span >5. JSTL标签库</span><br/>
    <a href="ELDemo01.jsp">范例13. ELDemo.jsp</a><br>
    <a href="JSTLCoreDemo01.jsp">范例14. JSTLCoreDemo</a><br>
    <a href="JSTLFmtDemo01.jsp">范例15. JSTLFmtDemo</a><br>
    <a href="JSTLFnDemo01.jsp">范例16. JSTLFnDemo</a><br>
    <span >6. 实训</span><br/>
    <a href="loginForm01.jsp">实训. 开发一个用户登录模块</a><br>
    <span >7. 上机题</span><br/>
    <a href="PracticeDemo01.jsp">习题1. for循环输出表格</a><br>
    <a href="PracticeDemo02.jsp">习题2. forEcho输出九九乘法表</a><br>
    <a href="PracticeDemo03.jsp">习题3. forEcho输出班级列表中所有学生信息</a><br>
    <a href="PracticeDemo04.jsp">习题4. 计算1到100之间的偶数和</a><br>
    <a href="PracticeDemo05.jsp">习题5. 页面自动刷新</a><br>
    <a href="PracticeDemo06.jsp">习题6. 简单计算器</a><br>
    <a href="PracticeDemo07.jsp">习题7. 百度搜索</a><br>
    <a href="PracticeDemo08.jsp">习题8. 多国语言页面</a><br>
    <a href="PracticeDemo09.jsp">习题9. 输入时间显示不同时区的时间</a><br>
    <a href="PracticeDemo10.jsp">习题10. 新闻列表</a><br>
 
    <hr/>
    <a href="/html/01JavaWeb.html">返回</a><br>
  </body>
</html>
 
    

本章重点

1
 

1. 开发一个JSP程序

(范例1) 创建页面WebRoot\HelloWorld01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
<%@ page language="java" pageEncoding="gbk"%>
<html>
  <head>
    <title>Hello World! 你好,世界。</title>
  </head>
   <body>
    <%out.write("Hello World! 你好,世界。"); %>
      ...
  </body>
</html>
 
    

2. JSP基本语法

(范例2) 创建页面WebRoot\Comments1_01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            HTML注释
        </title
    </head>
    <body>
        <!-- html注释,在html网页源代码上显示 -->
        <%
            out.println("Hello,World! HTML注释");
        %>
    ...
    </body>
</html>
    

(范例3) 创建页面WebRoot\Comments2_01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            JSP注释
        </title
    </head>
    <body>
        <%-- JSP注释 在html网页源代码不显示,输出Hello,World!语句 --%>
        <%
            out.println("Hello,World!你好。");
        %>
      ...
    </body>
</html>
    

(范例4) 创建页面WebRoot\JSPScriptlets01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            JSP 脚本元素: 声明变量, 表达式, 语句
        </title
    </head>
    <body>
    <h1>JSP 脚本元素: 声明变量, 表达式, 语句(JSP Scriptlets实现)</h1>
        <%!
            int visit1 = 1;         //声明变量visit1,初始值为1
            int visit2 = 1001;          //声明变量visit2,初始值为1
        %>
         
        你是本页面第<%=visit1++ %>个访客(JSP表达式实现)<br/>
        你是本页面第<% visit2++; out.println(visit2++);%>个访客
    </body>
</html>
    

(范例5) 创建页面WebRoot\IncludeDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            IncludeDemo
        </title
    </head>
    <body>
        <%@include file="Included01.jsp"%>  <%--导航部分,包含一个导航文件--%>
        本公司是一家以生成XXX为主的企业。
    </body>
</html>
    

WebRoot\Include01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
<%@page language="java" pageEncoding="gbk"%>
<%--导航页面 --%>
<p>
    <a href="index.jsp">首页</a> |
    <a href="blog.html">博客</a> |
    <a href="email.html">邮箱</a> |
    <a href="relation.html">联系我们</a>
</p>
    

3. JSP动作指令

(范例6) 创建[包含动作: 静态、动态文件]页面WebRoot\JSPIncludeDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            JSP页面包含
        </title
    </head>
    <body>
        <h2>包含静态文件</h2>
        <jsp:include page="JSPIncluded01.txt"/>
        <%--动态的包含一个静态文件--%>
        <h2>包含动态文件</h2>
        <jsp:include page="JSPIncluded01.jsp" />
        <%--动态的包含一个动态文件--%>
    </body>
</html>
    

WebRoot\JSPIncluded01.txt

1
2
3
我是文本文件,我被静态的包含进来了<br/>
<%="当前时间为:" + new Date().toLocaleString()%><br/>
    

WebRoot\JJSPIncluded01.jsp

1
2
3
4
<%@page language="java" import="java.util.*" pageEncoding="gbk"%>
我是JSP文件,我被动态的包含进来了<br>
<%="当前时间为:" + new Date().toLocaleString()%><br>
    

创建[包含动作(带参数)]页面WebRoot\JSPIncludeParamDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            JSPIncludeParamDemo
        </title
    </head>
    <body>
      <%
            response.setCharacterEncoding("gbk");
        %>
        <%--动态的包含一个JSP文件,并传递参数--%>
    <%-- 参数名为name,参数值xiaoxiao--%>
        <jsp:include page="JSPIncludeParamDemo2.jsp">
            <jsp:param name="name" value="xiaoxiao笑笑"/>
        </jsp:include>
    </body>
</html>
    

WebRoot\JSPIncludeParamDemo2.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            JSPIncludeParamDemo2
        </title
    </head>
    <body>
        <%--接受参数--%>
        <%
            request.setCharacterEncoding("gbk");
            String name = request.getParameter("name");
        %>
        <%-- 输出参数值--%>
        被包含页面:name为<%=name %>
    </body>
</html>
    

创建[转发动作: JSPForward]页面WebRoot\JSPForwardDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            JSP跳转Demo
        </title
    </head>
    <body>
        <%--执行跳转,跳转到HelloWorld01.jsp --%>
        <jsp:forward page="HelloWorld01.jsp" />
    </body>
</html>
    

创建[转发动作(带参数)]页面WebRoot\JSPForwardParamDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            JSPIncludeParamDemo
        </title
    </head>
    <body>
      <%
            response.setCharacterEncoding("gbk");
        %>
        <%--动态的包含一个JSP文件,并传递参数--%>
    <%-- 参数名为name,参数值xiaoxiao--%>
        <jsp:forward page="JSPIncludeParamDemo2.jsp">
            <jsp:param name="name" value="xiaoxiao笑笑"/>
        </jsp:forward>
    </body>
</html>
    

4. JSP主要内置对象

(范例7) 创建[]页面WebRoot\RequestScopeDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            RequestScopeDemo01
        </title
    </head>
    <body>
        <%
            request.setAttribute("姓名","二师兄"); //保存name属性在request范围
            request.setAttribute("年龄","30");//保存age属性在request范围
            request.setAttribute("性别","男");//保存sex属性在request范围
         %>
         <%--使用forward动作指令进行跳转,跳转到RequestScopeDemo02.jsp页面--%>
         <jsp:forward page="RequestScopeDemo2_01.jsp"></jsp:forward>
    </body>
</html>
    

WebRoot\RequestScopeDemo2_01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            在request范围获得属性
        </title
    </head>
    <body>
        <%--在request范围获得属性--%>
        <%
            String xm = (String)request.getAttribute("姓名"); //获得request范围name属性
            String nl = (String)request.getAttribute("年龄");
            String xb = (String)request.getAttribute("性别");
            out.println("姓名:" + xm + "<br/>");
            out.println("年龄:" + nl + "<br/>");
            out.println("性别:" + xb);
         %>
    </body>
</html>
    

(范例8) 创建[]页面WebRoot\RequestForm01.html, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
    <head>
        <meta http-equiv="content-type" content="text/html; charset=gbk" />
        <title>注册表单</title>
    </head>
    <body>
        <form action="RequestDemo01.jsp" method="post">
            <table>
                <tr>
                    <td>用户名</td>
                    <td><input type="text" name="户名" /></td>
                </tr>
                <tr>
                    <td>密码</td>
                    <td><input type="password" name="密码" /></td>
                </tr>
                <tr>
                    <td>确认密码</td>
                    <td><input type="password" name="确认密码" /></td>
                </tr>
                <tr>
                    <td>姓名</td>
                    <td><input type="text" name="姓名" /></td>
                </tr>
                <tr>
                    <td>年龄</td>
                    <td><input type="text" name="年龄" /></td>
                </tr>
                <tr>
                    <td>性别</td>
                    <td><input type="radio" name="性别" value="男" />男
                        <input type="radio" name="性别" value="女" />女
                    </td>
                </tr>
                <tr>
                    <td><input type="submit" value="注册"></td>
                    <td><input type="reset" value="重置"></td>
                </tr>
            </table>
        </form>
    </body>
</html>
    

WebRoot\RequestDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            RequestDemo
        </title
    </head>
    <body>
        <%
            request.setCharacterEncoding("gbk");//设置参数编码格式
            String username = request.getParameter("户名");//获得username参数值
            String upassword = request.getParameter("密码");//获得upassword参数值
            String repassword = request.getParameter("确认密码");//获得repassword参数值
            String name = request.getParameter("姓名");//获得name参数值
            String age = request.getParameter("年龄");//获得age参数值
            String sex = request.getParameter("性别");//获得sex参数值
         %>
         用户名:<%=username %><br/>
         密码:<%=upassword %><br/>
         确认密码:<%=repassword %><br/>
         姓名:<%=name%><br/>
         年龄:<%=age %><br/>
         性别:<%=sex %>
    </body>
</html>
    

(范例9) 创建[]页面WebRoot\ResponseDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@page language="java" pageEncoding="gb2312"%>
<html>
    <head>
        <title>
            ResponseDemo
        </title
    </head>
    <body>
      <h1>第3章 JSP</h1>
      <hr/>
        <P>将当前页面保存为word文档吗?</P>
        <!-- HTML表单,页面提交到ResponseDemo.jsp -->
        <FORM action="ResponseDemo01.jsp" method="get" name=form>
            <INPUT TYPE="submit" value="yes2222" name="t1">
            <INPUT TYPE="submit" value="参数值" name="t2">
            <INPUT TYPE="submit" value="yes" name="tijiao">
            <INPUT TYPE="submit" value="no" name="tijiao">
        </FORM>
        <%
            String str = request.getParameter("tijiao");//获得submit参数值
            if(str == null){                            //判断submit参数值是否为空
                str="";                                                
            }                                                      
            if(str.equals("yes")){                      //如果submit参数值为yes
                response.setContentType("application/msword;charset=GB2312");//设置文件格式为word
            }
            if (str.equals("no")){                      //如果submit参数值为no
                response.sendRedirect("ResponseDemo01.jsp");//response的重定向
            }
            String str1 = request.getParameter("t2");//获得submit参数值
            if(str1 == null){                           //判断submit参数值是否为空
                str1="";                                                   
            }                                                      
        %>
        <%=str1 %>
    </body>
</html>
    

(范例10) 创建[内在对象session]页面WebRoot\SessionDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            SessionDemo
        </title
    </head>
    <body>
    <h1>内在对象session</h1>
        <%
            long creatTime = session.getCreationTime();         //取得session生成的时间
            out.println("session生成的时间:" + creatTime + "<br/>");//输出session生成的时间
            String sessionID = session.getId();                 //取得session的ID
            out.println("session的ID:" + sessionID+ "<br/>");      //输出session的ID
            long lastTime = session.getLastAccessedTime();      //取得最后通过session发送请求时间
            out.println("最后通过session发送请求时间:" + lastTime+ "<br/>");    //输出最后通过session发送请求时间
            boolean isnew = session.isNew();                    //判断session是不是新的
            out.println("是否为新的:" + isnew);                  //输出session是不是新的
        %>
    </body>
</html>
    

(范例11) 创建[内在对象application]页面WebRoot\ApplicationDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            ApplicationDemo
        </title
    </head>
    <body>
    <h1>内在对象application</h1>
        <%
            int magorVersion = application.getMajorVersion();         //主要的Servlet API版本
            int minorVersion = application.getMinorVersion();         //次要的Servlet API版本
            String info = application.getServerInfo();                //服务器版本
             
            String mimeStr = application.getMimeType("ApplicationDemo01.jsp"); //获得指定文件的MIME类型
            ServletContext contextStr = application.getContext("ApplicationDemo01.jsp"); //获得指定Local的Application context
            String pathStr = application.getRealPath("/"); //获得指定path的绝对路径
                              
        %>
        <%="主要的Servlet API版本:" + magorVersion %><br/>
        <%="次要的Servlet API版本:" + minorVersion %><br/>
        <%="服务器版本:" + info %><br>
        <%="文件的MIME类型:" + mimeStr %><br/>
        <%="Application context:" + contextStr %><br/>
        <%="绝对路径:" + pathStr %>
         
    </body>
</html>
    

(范例12) 创建[]页面WebRoot\PageContextDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>
            PageContextDemo
        </title
    </head>
    <body>
    <%
        pageContext.setAttribute("一把手","任总");      //设置page范围name属性
        request.setAttribute("一把手","郝总");         //设置request范围name属性
        session.setAttribute("一把手","袁总");        //设置session范围name属性
        application.setAttribute("一把手","胡总");   //设置application范围name属性
    %>
    <%
        //获得page范围name属性
        String pageStr = (String)pageContext.getAttribute("一把手",pageContext.PAGE_SCOPE);
        //获得request范围name属性
        String requestStr = (String)pageContext.getAttribute("一把手",pageContext.REQUEST_SCOPE);
        //获得session范围name属性
        String sessionStr = (String)pageContext.getAttribute("一把手",pageContext.SESSION_SCOPE);
        //获得application范围name属性
        String applicationStr =
                    (String)pageContext.getAttribute("一把手",pageContext.APPLICATION_SCOPE);
    %>
    <%="page范围:[一把手]属性值: " + pageStr%><br>
    <%="request范围:[一把手]属性值: " + requestStr%><br>
    <%="session范围:[一把手]属性值: " + sessionStr%><br>
    <%="application范围:[一把手]属性值: " + applicationStr%> 
    </body>
</html>
    

5. JSTL标签库

(范例13) 创建[使用EL]页面WebRoot\ELDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
<%@page language="java" pageEncoding="gbk"%>
<html>
    <head>
        <title>ELDemo</title>  
    </head>
    <body>
        <table border="1">
            <tr>
                <td>运算</td>
                <td>结果</td>
            </tr>
            <tr>
                <%--加法运算符--%>
                <td>\${1 + 12}</td>
                <td>${1 + 12}</td>
            </tr>
            <tr>
                <%--减法运算符--%>
                <td>\${21 - 1}</td>
                <td>${21 - 1}</td>
            </tr>
            <tr>
                <%--等于运算符--%>
                <td>\${1 == 1}</td>
                <td>${1 == 1}</td>
            </tr>
            <tr>
                <%--不等于运算符--%>
                <td>\${1 != 1}</td>
                <td>${1 != 1}</td>
            </tr>
            <tr>
                <td>\${6 >= 53}</td>
                <td>${6 >= 53}</td>
            </tr>
            <%-- 逻辑运算符--%>
            <tr>
                <td>\${true && true}</td>
                <td>${true && true}</td>
            </tr>
            <tr>
                <td>\${true && false}</td>
                <td>${true && false}</td>
            </tr>
            <tr>
                <td>\${4 > 2 ? "正确":"错误"}</td>
                <td>${4 > 2 ? "正确":"错误"}</td>
            </tr>
        </table>
    </body>
</html>
    

(范例14) 创建[使用JSTLCore]页面WebRoot\JSTLCoreDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
<head>
    <title>JSTLCoreDemo核心标签库演示</title>
</head>
<body>
    <%
        ArrayList list = new ArrayList();//线性表实例,用来存放军衔信息
        list.add("士官");                 //添加一个士官军衔
        list.add("少尉");                 //添加一个少尉军衔
        list.add("中尉");             //添加一个中尉军衔
        list.add("上尉");             //添加一个上尉军衔
        pageContext.setAttribute("list",list);//将list信息保存在page范围
     %>
     <table border="1">
        <tr>
            <td>序号</td>
            <td>名称</td>
        </tr>
         <c:forEach var="军衔" items="${pageScope.list}" varStatus="变量状态">
            <tr>
                <td><c:out value="${变量状态.index + 1}"></c:out></td><%-- 显示列表序号 --%>
                <c:choose>
                        <c:when test="${(变量状态.index + 1) % 2 == 0}"><%-- 如果序号为偶数 --%>
                            <td bgcolor="#CCCCCC"><c:out value="${军衔}"/></td>
                        </c:when>
                        <c:otherwise>
                            <td><c:out value="${军衔}"/></td>
                        </c:otherwise>
                </c:choose>
            </tr>
         </c:forEach>
     </table>
</body>
</html>
    

(范例15) 创建[使用JSTLFmt]页面WebRoot\JSTLFmtDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib  prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<html>
<head>
    <title>JSTLFmtDemo格式标签库演示</title>
</head>
<body>
    <%--设定区域为中国内地--%>
    <fmt:setLocale value="zh_cn"/>
    <%-- 格式化为数字形式 --%>
    格式化为数字:<fmt:formatNumber value="0.3" type="number"/><br>
    <%-- 格式化为货币形式 --%>
    格式化为货币:<fmt:formatNumber value="0.3" type="currency"/><br>
    <%-- 格式化为百分比形式 --%>
    格式化为百分比:<fmt:formatNumber value="0.3" type="percent"/><br>
    <%--格式化日期,日期为当前日期--%>
    中国内地时间格式:<fmt:formatDate value="<%=new Date()%>"/><br>
    <%--设定区域为中国台湾--%>
    <fmt:setLocale value="zh_tw"/>
    <%--格式化日期,日期为当前日期--%>
    <%! Date d = new Date(); %>
    中国台湾时间格式:<fmt:formatDate value="<%=d%>"/>
</body>
</html>
    

(范例16) 创建[使用JSTLFn]页面WebRoot\JSTLFnDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<html>
<head>
    <title>JSTLFnDemo</title>
</head>
<body>
    <c:set var="str" value="Hello World!"/><%--设置变量str --%>
    是否包含He子字符串:${fn:contains(str,"He")}<br>
    是否包含he子字符串(忽略大小写):${fn:containsIgnoreCase(str,"He")}<br>
    是否以llo字符串开头:${fn:startsWith(str,"llo")}<br>
    是否以ld字符串结束:${fn:endsWith(str,"ld")}
</body>
</html>
    

6. 实训

(1) 创建[登录]页面WebRoot\loginForm01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@page language="java" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>登录页面</title>
  </head>
  <body>
    <form action="loginConf.jsp" method="post">
        <table>
            <tr>
                <td colspan="2"><font color="red">${requestScope.error }</font></td>
            </tr>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username"/></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="upassword"/></td>
            </tr>
            <tr>
                <td><input type="submit" value="登录"></td>
                <td><input type="reset" value="重置"></td>
            </tr>
        </table>
    </form>
  </body>
</html>
    

(2) 创建[登录判断]页面WebRoot\loginConf.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<%@page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<html>
    <head>
        <title>
            登录判断页面
        </title
    </head>
    <body>
        <c:choose>
            <%--如果用户输入的用户名是root,则为合法用户名 --%>
            <c:when test="${param.username == 'root'}">
                <%--判断用户密码是否合法,合法就直接跳转到登录成功页面--%>
                <c:if test="${param.upassword == 'admin'}">
                    <jsp:forward page="LoginSuccess.jsp"></jsp:forward>
                </c:if>
                <jsp:forward page="LoginFailure.jsp"></jsp:forward>
            </c:when>
            <%--如果用户输入的用户名不是root,则为非法用户名,直接调转到登录失败页面--%>
            <c:otherwise>
                <jsp:forward page="LoginFailure.jsp"></jsp:forward>
            </c:otherwise>
        </c:choose>
    </body>
</html>
    

(3) 创建[登录成功]页面WebRoot\LoginSuccess.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
<%@page language="java" pageEncoding="gbk"%>
<html>
  <head>
    <title>登录成功页面</title>
  </head>
  <body>
    <h1>登录成功</h1>
  </body>
</html>
    

(4) 创建[登录失败]页面WebRoot\LoginFailure.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
<%@page language="java" pageEncoding="gbk"%>
<html>
  <head>
    <title>登录失败页面</title>
  </head>
  <body>
    <h1>登录失败</h1>
  </body>
</html>
    

7. 上机题

习题1. for循环输出表格

创建[for循环输出表格]页面WebRoot\PracticeDemo01.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>循环生成10行10列的表格</title>
  </head>
  <body>
  <center>
  <h1>循环生成10行10列的表格</h1>
      <table border="1">
        <%--外层循环控制行数,里层循环控制列数--%>
        <c:forEach var="hang" begin="1" end="10">
            <tr>
            <c:forEach var="lie" begin="1" end="10">
                <td><c:out value="a"/></td>
            </c:forEach>
            </tr>
        </c:forEach>
      </table>
  </center>
  </body>
</html>
    

习题2. forEcho输出九九乘法表

创建[forEcho输出九九乘法表]页面WebRoot\PracticeDemo02.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>生成九九乘法表</title>
  </head>
  <body>
  <center>
  <h1>生成九九乘法表</h1>
      <table border="1">
        <%--外层循环控制行数,里层循环控制列数,列数总是等于行数--%>
        <c:forEach var="hang" begin="1" end="9">
            <tr>
            <c:forEach var="lie" begin="1" end="${hang}">
            <%--使用out标签进行输出--%>
                <td><c:out value="${lie}"/>*<c:out value="${hang}"/>=<c:out value="${hang * lie}"/></td>
            </c:forEach>
            </tr>
        </c:forEach>
      </table>
  </center>
  </body>
    

习题3.forEcho输出班级列表中所有学生信息

创建[forEcho输出班级列表中所有学生信息]页面WebRoot\PracticeDemo03.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<%@ page language="java" import="java.util.*" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>输出所有学生信息</title>
  </head>
  <body>
  <%
    List students = new ArrayList();
    students.add("李立明");
    students.add("刘新");
    students.add("顾小华");
    students.add("张大伟");
    pageContext.setAttribute("students",students);
  %>
  <center>
  <h1>输出所有学生信息</h1>
      <table border="1">
        <c:forEach var="student" varStatus="stus" items="${pageScope.students}">
            <tr>
            <td><c:out value="${stus.index + 1}"></c:out></td>
            <td><c:out value="${student}"/></td>
            </tr>
        </c:forEach>
      </table>
  </center>
  </body>
    

习题4. 计算1到100之间的偶数和

创建[计算1到100之间的偶数和]页面WebRoot\PracticeDemo04.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>输出1到100的偶数和</title>
  </head>
  <body>
    <%--设置变量sum,该变量用来保存相加的和--%>
    <c:set var="sum" scope="page" value="0"/>
     
    <%--设置变量item,该变量的初始值是0,结束值是100,步长为2,然后循环相加,并把值设置到sum--%>
    <c:forEach var="item" begin="0" end="100" step = "2" >
       <c:set var="sum" value="${sum + item}"/>
    </c:forEach>
     
    <%--输出sum--%>
    1到100的偶数和为:<c:out value="${sum}"/>
  </body>
</html>
    

习题5. 页面自动刷新

创建[页面自动刷新]页面WebRoot\PracticeDemo05.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>页面自动刷新</title>
  </head>
  <body>
    <%-- 使用response对象的setIntHeader实现页面自动刷新--%>
    <%
        response.addIntHeader("Refresh",10);
    %>
    <h4>该页面10秒后自动刷新</h4>
  </body>
</html>
    

习题6. 简单计算器

(1) 创建[简单计算器]页面WebRoot\PracticeDemo06.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<%@ page language="java" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>简单计算器</title>
    <script type="text/javascript">
        function validate(form){
            var errors = "";
            var number1 = form.number1.value;
            var number2 = form.number2.value;
             
            if( number1== null || number1== "" || number2== null || number2== "" ) {
                errors += "请输入操作数";
            }else if(!/^\d{1,9}$/.test(number1) || !/^\d{1,9}$/.test(number2)){
                errors +="请输入正确的操作数(操作数不能大于9位)";
            }
             
            if(errors == ""){
                return true;
            }else{
                alert(errors);
                return false;
            }
        }
    </script>
  </head>
   
  <body>
  <center>
  <h1>简单计算器</h1>
  <hr>
    <form action="PracticeDemo06Result.jsp" method="post" name="form" onsubmit="return validate(this)">
        <input type="text" name="number1"/>
        <select name="ope">
            <option value="add">+</option>
            <option value="minus">-</option>
            <option value="multiply">*</option>
            <option value="divide">/</option>
        </select>
        <input type="text" name="number2"/>
        <input type="submit" value="计算"/>
        <input type="reset" value="重置"/>
        </form>
    </center>
  </body>
</html>
    

(2) 创建[简单计算器]页面WebRoot\PracticeDemo06Result.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>简单计算器</title>
  </head>
   <body>
  <center>
  <h1>简单计算器</h1>
  <hr>
    <c:if test="${param.ope == 'add'}">
        ${param.number1 } + ${param.number2 } = ${param.number1 + param.number2 }
    </c:if>
     
    <c:if test="${param.ope == 'minus'}">
        ${param.number1 } - ${param.number2 } = ${param.number1 - param.number2 }
    </c:if>
     
    <c:if test="${param.ope == 'multiply'}">
        ${param.number1 } * ${param.number2 } = ${param.number1 * param.number2 }
    </c:if>
     
    <c:if test="${param.ope == 'divide'}">
        <c:choose>
            <c:when test="${param.number2 == 0}">
                <font color="red">零不能做为除数</font>
            </c:when>
            <c:otherwise>
                ${param.number1 } / ${param.number2 } = ${param.number1 / param.number2 }
            </c:otherwise>
        </c:choose>
         
    </c:if>
    </center>
  </body>
</html>
    

习题7. 百度搜索

(1) 创建[百度搜索]页面WebRoot\PracticeDemo07.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%@ page language="java" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>百度搜索功能</title>
  </head>
  <body>
  <center>
  <form method="post" action="PracticeDemo07Result.jsp">
    <table>
        <tr>
            <td colspan="2">使用百度搜索</td>
        </tr>
        <tr>
            <td>关键字</td>
            <td><input type="text" name="keyword"></td>
        </tr>
        <tr>
            <td></td>
            <td><input type="submit" value="搜索"></td>
        <tr>
    </table>
    </form>
   </center
  </body>
</html>
    

(2) 创建[使用redirect跳转,并传递参数]页面WebRoot\PracticeDemo07Result.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>使用redirect跳转,并传递参数</title>
  </head>
  <body>
    <%--乱码处理--%>
    <%
        request.setCharacterEncoding("gbk");
    %>
    <c:redirect url="http://www.baidu.com/s">
        <%--传递参数 参数值为用户提交的参数--%>
        <c:param name="wd" value="${param.keyword}"/>
    </c:redirect>
  </body>
</html>
    

习题8. 多国语言页面

(1) 创建[多国语言页面]页面WebRoot\PracticeDemo08.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
<%@ page language="java" pageEncoding="utf-8"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%--判断接收到的下拉列表的值,页面在默认没有选择的情况下设置区域值为zh_CN--%>
<c:choose>
    <c:when test="${empty param.languageSelect}">
        <fmt:setLocale value="zh_CN"/>
    </c:when>
    <c:when test='${param.languageSelect == "en_US"}'>
        <fmt:setLocale value="en_US"/>
    </c:when>
    <c:when test='${param.languageSelect == "zh_CN"}'>
        <fmt:setLocale value="zh_CN"/>
    </c:when>
    <c:when test='${param.languageSelect == "zh_TW"}'>
        <fmt:setLocale value="zh_TW"/>
    </c:when>
</c:choose>
 
<%--设置数据来源--%>
<fmt:setBundle basename="PracticeDemo08" scope="session"/>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
  <title><fmt:message key="title"/></title>
    <script language="javascript">
    function selectsubmit(){   
            document.form.submit();
    }
    </script>
  </head>
  <body>
    <form action="PracticeDemo08.jsp" method="post" name="form">
    <%--设置下拉列表,当下拉列表的选择发生改变时,会调用javascript的selectsubmit函数--%>
    <select name="languageSelect" onchange="selectsubmit();">
        <option value="choose">
            <%--读取资源文件中的值--%>
            <fmt:message key="form.choose"/>
        </option>
        <option value="en_US" >
            <%--读取资源文件中的值--%>
            <fmt:message key="form.option1"/>
        </option>
        <option value="zh_CN">
            <%--读取资源文件中的值--%>
            <fmt:message key="form.option2"/>
        </option>
        <option value="zh_TW">
            <%--读取资源文件中的值--%>
            <fmt:message key="form.option3"/>
        </option>
    </select>
  </form>
  <%--读取资源文件中的值--%>
  <fmt:message key="message"/>
  </body>
</html>
    

(2) 创建[英文]多国语言属性文件 src\PracticeDemo08_en_US.properties

1
2
3
4
5
6
7
form.choose = Please choose your language
form.option1 = English
form.option2 = Simplified_Chinese
form.option3 = Traditional_Chinese
message = Hello World!
title = English
    

(3) 创建[简体中文]多国语言属性文件 src\PracticeDemo08_zh_CN.properties

1
2
3
4
5
6
7
form.choose = \u8BF7\u9009\u62E9\u8BED\u8A00\u7684\u79CD\u7C7B
form.option1 = \u82F1\u6587
form.option2 = \u7B80\u4F53\u4E2D\u6587
form.option3 = \u7E41\u4F53\u4E2D\u6587
message = \u4F60\u597D\u4E16\u754C
title = \u4E2D\u6587\u9875\u9762
    

(4) 创建[繁体中文]多国语言属性文件 src\PracticeDemo08_zh_TW.properties

1
2
3
4
5
6
7
form.choose = \u8ACB\u9078\u64C7\u8A9E\u8A00\u7684\u7A2E\u985E
form.option1 = \u82F1\u6587
form.option2 = \u7C21\u9AD4\u4E2D\u6587
form.option3 = \u7E41\u9AD4\u4E2D\u6587
message = \u4F60\u597D\u4E16\u754C
title = \u7E41\u9AD4\u4E2D\u6587
    

习题9. 输入时间显示不同时区的时间

(1) 创建[输入时间显示不同时区的时间]页面WebRoot\PracticeDemo09.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<%@ page language="java" pageEncoding="gbk"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>用户输入页</title>
  </head>
  <body>
    <form action="PracticeDemo09Result.jsp" method="post">
        输入时间:<br>
        <input type="text" name="userTime">格式如(14:22:56)<br>
        <input type="submit" value="提交">
    </form>
  </body>
</html>
    

(2) 创建[显示页]页面WebRoot\PracticeDemo09Result.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib  prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<%@ taglib  prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>显示页</title>
  </head>
  <body>
   
  <%--将接受到的参数值保存在变量userTime变量中--%>   
  <c:set var="userTime" value="${param.userTime}"/>
  <%--将变量值按照格式转换从时间类型--%>
  <fmt:parseDate value="${userTime}" type="time" pattern="HH:mm:ss" var="ctime"/>
  <%--设置语言区域,并将时间按不同的语言区域显示--%>
  <fmt:setLocale value="zh_CN"/>
  中国内地:<fmt:formatDate value="${ctime}" type="time"/><br>
  <fmt:setLocale value="zh_TW"/>
  中国台湾:<fmt:formatDate value="${ctime}" type="time"/><br>
  <fmt:setLocale value="en_US"/>
  美国:<fmt:formatDate value="${ctime}" type="time"/><br>
  </body>
</html>
    

习题10. f新闻列表

(1) 创建[新闻列表]页面WebRoot\PracticeDemo10.jsp, gb2312 -- gbk

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<%@ page language="java" pageEncoding="gbk"%>
<%@ taglib prefix="my" uri="http://net.hncu.math.myselfFunctions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>显示新闻</title>
  </head>
  <body>
  <h3>今日新闻热点</h3>
    ${my:newsList("java继承容易犯的错误","http://www.baidu.com")}<br>
    ${my:newsList("我开始喜欢Java了","http://www.baidu.com")}<br>
    ${my:newsList("OO思想里被遗忘数十年的远见","http://www.baidu.com")}<br>
  </body>
</html>
    

(2) 在src创建test包,创建[NLFunction.java]

1
2
3
4
5
6
7
8
9
10
11
12
13
package test;
public class NLFunction {
    public static String newsList(String text,String link){
        StringBuilder sb = new StringBuilder();
        sb.append("<a href='");
        sb.append(link);
        sb.append("'>") ;
        sb.append(text);
        sb.append("</a>");
        return sb.toString();
    }
}
    

(3) 修改WebRoot\WEB-INF\web.xml如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
   
  <jsp-config>
    <taglib>
        <taglib-uri>http://net.hncu.math.myselfFunctions</taglib-uri>
        <taglib-location>/WEB-INF/myself-taglib.tld</taglib-location>
  </taglib>
  </jsp-config>
</web-app>
    

(4) 在WebRoot\WEB-INF\创建[myself-taglib.tld]如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?xml version="1.0" encoding="UTF-8" ?>
    version="2.0">
    <description>myFunction</description>
    <tlib-version>1.0</tlib-version>
    <short-name>my</short-name>
    <function>
        <name>newsList</name>
        <function-class>test.NLFunction</function-class>
        <function-signature>
            java.lang.String newsList( java.lang.String,java.lang.String )
        </function-signature>
    </function>
</taglib>
    
返回章节目录