JSP程序设计第二版--附带实验代码

1. JSP概述

JSP页面的运行原理

(1) 把JSP页面的HTML标记(页面的静态部分)发送给用户的浏览器, 由浏览器中的HTML解释器负责解释执行HTML标记
(2) 负责处理JSP标记, 并将相关的处理结果发送给用户的浏览器
(3) 执行"<%“和”%>"之间的Java程序片(JSP页面的动态部分),并把执行结果交给用户的浏览器显示
(4) 当多个用户请求一个JSP页面时,Tomcat服务器为每个用户启动一个线程, 该线程负责执行常驻内存的字节码文件来响应相关用户的请求. 这些线程由tomcat服务器来管理, 将CPU的使用权在各个线程之间切换, 以保证每个线程都有机会执行字节码文件, 这与传统的CGI为每个用户启动一个进程相比, 效率要高得多.

怎么开启和关闭tomcat服务器

  1. 确保tomcat服务器使用的是JAVA_HOME环境变量设置的JDK
  2. 进入tomcat安装目录, 在bin目录下找到startup.bat, 双击即可启动, 找到shutdown.bat, 双击即可关闭

如果想要修改Tomcat服务器的端口号, 应该修改哪一个文件? 能否将端口号修改为80?

修改tomcat服务器安装目录中conf文件夹中的配置文件: server.xml.只要没有其他应用程序正在占用80端口, 就可以将端口设置为80

2. JSP页面与JSP标记

<%!%>与<%%>之间声明的变量有什么不同

<%!%>声明的变量在整个JSp页面都是有效, 是JSP的成员变量,所有用户共享成员变量
<%%>之间声明的变量是局部变量, 只能在当前JSP页面的猴急程序片以及表达式部分中有效

是否允许一个JSP页面同时含有以下两种page指令

原因: 在一个JSP页面中, 可以使用多个Page指令来指定属性以及他的值,. 需要注意的是: 可以使用多个page指令指定import属性几个值, 但是其他属性只能使用page指令指定一个值

这两条是不允许的
<% @ page contentType="text/html; charset=GB2312" %>
<% @ page contentType = "application/msword" %>

是否允许JSP页面同时含有如下两个page指令

这两条是允许的
<% @ page import="java.util.*" %>
<% @  page import="java.sql.*" %>

假设有两个用户访问下列JSP页面hello.jsp, 请问第一个访问和第二个访问hello.jsp页面的用户看到的页面效果有何不同

<%!%>是方法和变量声明, <%%>是对Java程序片进行执行, 其中<%!%>中的变量是成员变量, 可以多个JSp页面共享, 而<%%>中的只是局部变量

<% ! int sum=10;
		void add(int m){
			sum= sum + m;
}
%>
<% int n = 600;
	add(n); %>
<% =sum %>

第一个用户看到的sum是610, 第二个用户看到的是1210

请简单叙述include指令标记和include动作的不同

include指令标记的作用是在JSP页面出现该指令的位置处, 静态插入一个文件, 即JSP页面与插入的文件合并成为一个新的JSP页面, 然后JSP引擎再将这个新的JSP页面转义成Java文件. 因此在插入文件之后, 必须保证新合成的JSp页面符合JSP语法规则, 即能够成为一个JSp页面文件. include动作标记告诉JSP页面动态加载一个文件, 不把JSP页面中动作指令include所指定的文件与原JSP页面合并成一个新的JSP页面, 而是告诉Java解释器, 这个文件在JSp运行时才被处理. 如果包含的文件是JSP文件, JSp引擎就会执行这个文件, 然后将执行结果发送到客户端, 并且有客户端负责显示这些结果.;如果包含的文件是普通文件, 就将文件内容发送到客户端, 有客户端负责显示

3. TAg文件与Tag标志

用户可以通过浏览器直接访问一个tag 文件吗

不可以, tag文件可以被JSP页面动态调用, 但是用户不能够通过该tag文件所在的web服务目录直接访问这个文件

Tag文件应该存放在怎样的目录中

如果某个Web服务目录下的JSp页面准备调用一个tag文件, 那么必须在该Web服务目录之下, 建立Web服务目录\WEB-INF\tags, 其中WEB-INF, tags都是固定的子目录名称, 而tags下的子目录名字可以由用户给定, 一个tags文件必须保存到tags目录或者旗下的子目录中

4. JSP内置对象

如果表单中提交的信息有汉字应该怎么处理

将获取的字符串用ISO-8859-1进行编码,并且将编码存放到一个字节数组中, 然后再将这个数组转换为字符串对象

response调用sendRedirect(URL url)方法的作用是什么

实现用户的重定向

回答下列问题

(1) 一个用户在不同的web服务目录中的session对象相同吗?
不相同
(2) 一个用户在同一个web目录下的不同子目录中的session对象相同吗
相同
(3) 如果用户长时间不关闭浏览器, 用户的session对象可能消失吗?
可能消失
(4)用户关闭浏览器之后,用户的session一定消失吗?
一定消失

5.JSp的文件操作

File对象能读写文件吗

不能

File对象怎么获取文件的长度

调用public long length()获取

准备读取文件A.java, 正确的是?

一下两个

FileInputStream in = new FileInputStream("A.java");
FileReader fr = new FileReader(new File("A.java"));

6. 在JSP中使用数据库

什么是JDBC(Java Database Connecivity)

jdbc提供访问数据库的API,即一些由Java类和接口组成,是Java运行平台的核心库的一部分.

7. JSP与JavaBean

设Web服务目录mymoon中的JSP页面使用的一个bean,该bean的包名为blue.sky,请说明, 应当怎样保存bean的字节码

把创建bean的字节码保存到mymoon\WEB-INF\classes\blue\sky中

创建一个名字为moon的bean, 该bean含有一个String类型, 名字为number的属性.如果创建moon的java类没有提供public String getNumber()方法, 在JSp页面中是否允许使用getProperties标记获取moon属性的值?

不允许

tom.jiafei.cirlce是创建bean的类, 下列A-D中哪一个标记是正确创建session周期bean 的标记?

<jsp: useBean id = "cirlce" class="tom.jiafei.circle" scope="session">

假设创建bean的类有一个int型的属性number,下列A-D中哪一个方法是设置该属性值的方法

public void setNumber(int number){
	this.number = number;
}

8. Java Servlet基础

9. MVC与数据库操作

在JSP中, MVC操作模式中的数据模型的角色有谁担当, 控制器, 视图呢?

数据模型由JavaBean担当, 控制器又Servlet担当, 视图由JSP页面担当

MVC有什么好处

MVC的结构可以使Web程序更加具有对象化特征, 也更加容易维护

附加实验代码

<%@ page import="java.util.TreeSet" %>
<%@ page import="java.util.Iterator" %>
<%@ page import="java.io.File" %>
<%@ page import="java.io.FileReader" %>
<%@ page import="java.lang.reflect.Field" %>
<%@ page import="java.io.BufferedReader" %><%-- Created by IntelliJ IDEA. --%>


<!--                  实验1开始                -->
<%--<%@ page  contentType="text/html; ISO-8859-1" language="java"%>--%>
<%--<html>--%>
<%--<body bgcolor="yellow">--%>
<%--<font size="3">--%>
<%--    <%--%>
<%--        for (int i = 1; i < 10; i ++)--%>
<%--            for (int j = 1; j <= i ;j ++){--%>
<%--                int mul = i * j;--%>
<%--                out.print(i+"*"+j+"="+mul);--%>
<%--            }--%>
<%--        out.print("<br>");--%>
<%--        %>--%>
<%--</font>--%>
<%--</body>--%>
<%--</html>--%>
<%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%>
<%--<html>--%>
<!--                  实验1结束              -->



<%--<h2>实验二----输入单词程序开始</h2>--%>
<%--<body bgcolor="yellow">--%>
<%--<font size="3">--%>
<%--    <form action="showDirectory.jsp" method="post">\--%>
<%--            请输入单词(用空格间隔):<input type="text" name="word"><br>--%>
<%--            <input type="submit" name="submit" value="送出">--%>
<%--    </form>--%>
<%--</font>--%>
<%--</body>--%>
<%--</html>--%>
<%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%>
<%--<html>--%>
<%--<h2>      实验2---展示单词列表程序</h2>--%>
<%--<body bgcolor="yellow">--%>
<%--<font size="3">--%>
<%--    <%!--%>
<%--        TreeSet<String> dictionary = new TreeSet<>();--%>
<%--        public void addWord(String s){--%>
<%--            String word[]  = s.split(" ");--%>
<%--            for (int i = 0; i < word.length; i ++){--%>
<%--                dictionary.add(word[i]);--%>
<%--            }--%>
<%--        }--%>
<%--    %>--%>
<%--    <%--%>
<%--        String str = request.getParameter("word");--%>
<%--        addWord(str);--%>
<%--        Iterator<String> te = dictionary.iterator();--%>
<%--        while (te.hasNext()){--%>
<%--            String word = te.next();--%>
<%--            out.print(" "+word);--%>
<%--        }--%>
<%--        --%>
<%--    %>--%>
<%--</font>--%>
<%--</body>--%>
<%--</html>--%>
<%--<h2>实验二----输入单词程序结束</h2>--%>









<!--------------------实验3开始----------------------->
<!--leader.txt静态文本实验-->
<%--<%@ page contentType="text/html; ISO-8859-1" language="java"%>--%>
<%--<a href="first.jsp">链接到页面1</a>--%>
<%--<a href="second.jsp">链接到页面2</a>--%>
<%--<a href="third.jsp">链接到页面3</a>--%>

<%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%>
<%--<html>--%>
<%--<body bgcolor="yellow">--%>
<%--<P> 这是页面1--%>
<%--<%@ include file="leader.txt"%>--%>
<%--</body>--%>
<%--</html>--%>
<%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%>
<%--<html>--%>
<%--<body bgcolor="yellow">--%>
<%--<P> 这是页面2--%>
<%--    <%@ include file="leader.txt"%>--%>
<%--</body>--%>
<%--</html>--%>
<%--<%@ page contentType="text/html; ISO-8859-1" language="java" %>--%>
<%--<html>--%>
<%--<body bgcolor="yellow">--%>
<%--<P> 这是页面3--%>
<%--    <%@ include file="leader.txt"%>>--%>
<%--</body>--%>

<%--</html>--%>
<!--------------------实验3结束----------------------->

<!--------------------实验4开始----------------------->
<%@page contentType="text/html; ISO-8859-1" language="java" %>
<html>
<body>
    读取名字是ok.txt的文件
    <jsp:include page="readFile.jsp">
        <jsp:param name="file" value="xxxx"/>
    </jsp:include>
</body>
</html>

<%@ page contentType="text/html; ISO-8859-1" language="java" %>
<html>
<body>
<P> <FONT size="4">this is ReadFile.jsp</FONT>
<%
        String s = request.getParameter("file");
        File file = new File(s);
        if (file.exists()){
            out.print("<BR>文件"+s+"的内容是:");
            FileReader in = new FileReader(file);
            BufferedReader bin = new BufferedReader(in);
            String line = null;
            while ((line=bin.readLine() )!= null){
                out.print("<br>"+line);
            }
        }else{
            %>
           <jsp:forward page="error.jsp">
    <jsp:param name="mess" value="File Not Found"/>
    </jsp:forward>
        <%}%>
    
</body>
</html>
<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<html>
<body>
    <
</body>
</html>
<!--------------------实验4结束----------------------->


<!--------------------实验5开始----------------------->
<%@ page contentType="text/html; ISO-8859-1"  language="java"%>
<h2>动态加载tag的jsp文件</h2>
<%@ taglib prefix="rili" tagdir="/WEB-INF/tags" %>
<html>
<body>

    <P>调用tag文件来显示日历
        <rili:showCalendar year="2012" month="12"/>

</body>
</html>

<%@ tag pageEncoding="GB2312" %>
<%@ tag import="java.util.*" %>
<%@ page import="java.util.regex.Pattern" %>
<%@ page import="javax.sound.midi.Soundbank" %>
<%@ attribute name="year" required="true" %>
<%@ attribute name="month" required="true" %>
<%
    int y = 1999, m = 1;
    String [] day = new String[42];
    try{
        y = Integer.parseInt(year);
        m = Integer.parseInt(month);
        Calendar rili = Calendar.getInstance();
        rili.set(y, m-1 ,1);//0表示1月, 11表示12月
        int 星期几  = rili.get(Calendar.DAY_OF_WEEK)-1;
        int dayAmount = 0;
        if (m == 1 || m==3 || m==5 || m==7 || m==8 || m == 12){
            dayAmount=31;
        }
        if (m == 4 || m == 6 || m == 9 || m == 11){
            dayAmount=30;
        }
        if (m == 2){
            if ((y % 4 == 0 && y % 100 != 0) || y % 400 == 0){
                dayAmount=29;
            }else{
                dayAmount=28;
            }

        }
        for (int i = 0; i < 星期几; i++){
            day[i] = "--";
        }
        for (int i = 星期几, n=1; i < 星期几+dayAmount; i ++){
            day[i] = String.valueOf(n);
            n ++;
        }
        for (int i = 0; i < 星期几; i++){
            day[i]="--";
        }
    }catch (Exception e){
        e.printStackTrace();
        out.print("年份或者月份不合理");
    }
%>
<h3><%=year%>年<%=month%>>月的日历:</h3>
<table border="1">
    <tr><th>星期一</th><th>星期二</th><th>星期三</th><th>星期四</th><th>星期五</th><th>星期六</th><th>星期天</th></tr>
    <%
        for (int n = 0; n < day.length; n +=7){
            %>
    <tr>
    <%
        for (int i = n ; i < n+7; i ++){
            %>
        <td>

            <%= day[i]%>
        </td>

       <% }

        }
    %>
    </tr>

        }
    %>
</table>
<!--------------------实验5结束----------------------->
<!--------------------实验6开始----------------------->
<%@ page contentType="text/html; ISO-8859-1" language="java" %>
<html>
<body>
    <form action="receiveNumber" method="post">
        输入运算数, 选择运算符号: <br>
        <input type="text" name="numberOne" size="6">
        <select name="operator">
            <option value="+">+</option>
            <option value="-">-</option>
            <option value="*">*</option>
            <option value="/">/</option>
        </select>
        <input type="text" name="numberTwo" size="6"><br>
        <input type="submit" name="submit" value="提交你的选择">
    </form>
</body>
</html>


<%@ page contentType="text/html; ISO-8859-1" language="java" %>
<%@ taglib prefix="computer" tagdir="/WEB-INF/tags" %>
<html>
<body>
<%
    String a = request.getParameter("numberOne");
    String b = request.getParameter("numberTwo");
    String operator = request.getParameter("operator");
    if (a == null  || b == null){
        a = ""; b = "";
    }
    if (a.length() > 0 && b.length() > 0){
        %>
    <computer: Computer numberA = "<%=a%>" numberB = "<%=b%>" operator="<%=operator%>"
               计算结果: <%=a%><%=operator%><%=b%>=<%=result%>
    <%}
%>

                       <a href="inputNumber.jsp">返回输入数据界面</c    omputer:>
</body>
</html>



<%@ tag pageEncoding="GB2312" %>
<%@ attribute name="numberA" required="true"%>
<%@ attribute name="numberB" required="true"%>
<%@ attribute name="result" required="true"%>
<%@ variable name-given="result" scope="AT_END"%>

<%
    try{
        double a = Double.parseDouble(numberA);
        double b = Double.parseDouble(numberB);
        double r = 0;
        if (operator.equals("+")){
            r= a+b;
        }else if(operator.equals("-")){
            r=a-b;
        }else if(operator.equals("*")){
            r=a*b;
        }else if(operator.equals("/")){
            r=a/b;
        }
        jspContext.setAttribute("result", String.valueOf(r));
    }catch (Exception e){
        e.printStackTrace();
        jspContext.setAttribute("result", "发生异常:"+e);
    }
%>
<!--------------------实验6结束----------------------->
<!--------------------实验7开始----------------------->

<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<html>
<body>
    <font>
        <form action = "draeCircle.jsp" method="post">
            输入园的半径: <input type="text" name="radius" size="6">
            <input type="submit" name="submit">
        </form>
    </font>

</body>
</html>
<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<%@ page import="java.awt.*"%>
<%@ page import="java.util.*"%>
<%@ page import="java.io.*"%>
<%@ page import="java.awt.image.*"%>
<%@ page import="java.awt.geom.*"%>
<%@ page import="com.sun.image.codec.jpeg.*"%>
<%@ page import="java.nio.Buffer" %>
<html>
<body>
<%
    String R = request.getParameter("radius");
    try{
        double number  = Double.parseDouble(R);
        if (number < 0 || number > 100){
            response.setContentType("text/plain;charset=GB2312");
            out.print(number+"作为园的半径不合理");
        }
        else if (number > 0 && number <= 100){
            response.setContentType("image/jpeg");
            int width = 100, height = 100;
            BufferedImage image = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            Graphics graphics = image.createGraphics();
            graphics.setColor(Color.WHITE);
            graphics.fillRect(0, 0, width, height);
            Graphics2D graphics2D = (Graphics2D) graphics;
            Ellipse2D circle = new Ellipse2D.Double(0, 0, number, number);
            graphics2D.setColor(Color.BLUE);
            graphics2D.fill(circle);
            graphics.dispose();
            OutputStream outputStream = response.getOutputStream();
            JPEGImageEncoder encoder = JPEGImageEncoder.createJPEGEncoder(outputStream);
            encoder.encode(image);
        }
    }catch (Exception e){
        e.printStackTrace();
        response.sendRedirect("inputRadius.jsp");
    }
%>
</body>
</html>
<!--------------------实验7结束----------------------->
<!--------------------实验8开始----------------------->
<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<html>

<P>选择所有图书
<table>
    <tr><td><a href="orderForm.jsp ? bookMess=Java面向对象"></a> </td></tr>

</table>
</html>

<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<%@ page import="java.util.*"%>
<%
    String book = request.getParameter("bookMess");
    if (book != null){
        StringTokenizer fenxi = new StringTokenizer(book, "@");
        String bookName = fenxi.nextToken();
        String bookISBN = fenxi.nextToken();
        session.setAttribute(bookISBN, book);
    }
%>
<html>

<%@ page contentType="text/html; ISO-8859-1" language="java"%>
<%
    Enumeration keys = session.getAttributeNames();
    while (keys.hasMoreElements()){
        String key = (String) keys.nextElement();
        book = session.getAttribute(key);
        if (book != null){
            StringTokenizer fexi = new StringTokenizer(book, "@");
            
        }
    }
%>
</html>
<!--------------------实验8结束----------------------->
  • 4
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值