《JavaWeb程序開發入門》課后題


第一章

1、請編寫一個格式良好的XML文檔,要求包含足球隊一支,隊名為Madrid,球員5人:Ronaldo、Casillas、Ramos、Modric、Benzema;籃球隊一支,隊名為Lakers,隊員2人:Oneal,Bryant。要含有注釋。

2、在XML Schema文檔中,定義一個雇員的年齡為18~58周歲之間。請寫出相應的元素聲明。

------第1題答案------

<?xml version="1.0" encoding="gb2312" standalone="yes"?>
<球隊列表>
	<!-- 足球隊Madrid -->
	<球隊 類型="足球隊">
		<隊名>Madrid</隊名>
		<隊員>
			<姓名>Ronaldo</姓名>
			<姓名>Casillas</姓名>
			<姓名>Ramos</姓名>
			<姓名>Modric</姓名>
			<姓名>Benzema</姓名>
		</隊員>
	</球隊>
	<!-- 籃球隊Lakers -->
	<球隊 類型="籃球隊">
		<隊名>Lakers</隊名>
		<隊員>
			<姓名>Oneal</姓名>
			<姓名>Bryant</姓名>
		</隊員>
	</球隊>
</球隊列表>

------第2題答案------

<xs:element name="age">
<xs:simpleType>
  <xs:restriction base="xs:integer">
    <xs:minInclusive value="18"/>
    <xs:maxInclusive value="58"/>
  </xs:restriction>
</xs:simpleType>
</xs:element>

第二章

1、如何將web應用發布到tomcat上localhost主機,請寫出至少3種實現方式?

2、請問在chapter02應用的web.xml文件中進行哪些配置,可以將welcome.html頁面配置成該應用的默認頁面?

------第1題答案------

1、直接將web應用部署到tomcat/webapps下

2、將web應用通過tomcat/conf/server.xml進行配置

3、創建一個xml文件,並配置web應用信息,將xml文件放置tomcat\conf\Catalina\localhost

------第2題答案------

在web-app標簽中進行如下配置即可:

<welcome-file-list>
        <welcome-file>welcome.html</welcome-file>
</welcome-file-list>

第三章

1、簡述HTTP1.1協議的通信過程?

2、簡述POST請求和GET請求有什么不同? 

------第1題答案------

1、客戶端與服務器端建立TCP連接。

2、客戶端可以向服務器端發送多個請求,並且在發送下個請求時,無需等待上次請求的返回結果。

3、服務器必須按照接受客戶端請求的先后順序依次返回響應結果。

4、客戶端發出關閉TCP連接的請求

5、服務器端關閉TCP連接

------第2題答案------

1、 POST傳輸數據大小無限制

2、POST比GET請求方式更安全

第四章

1、 編寫一個servlet,實現統計網站被訪問次數的功能。

2、請編寫一段程序,使程序能讀取該servlet的配置信息,從中獲得參數名為encoding對應的參數值,並輸出到頁面上。 

------第1題答案------

步驟如下:

1)新建一個類ShowTimesServlet繼承HttpServlet,重寫doGet和doPost方法

2)在doPost方法中調用doGet方法,在doGet方法中實現統計網站被訪問次數的功能,用戶每請求一次servlet,使訪問次數times加1

3)獲取ServletContext,通過它的功能記住上一次訪問后的次數

具體代碼實現如下:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class ShowTimesServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		ServletContext context = getServletContext();
		Integer times = (Integer) context.getAttribute("times");
		if (times == null) {
			times = new Integer(1);
		} else {
			times = new Integer(times.intValue() + 1);
		}
		//設置編碼,不然中文會變成亂碼
		resp.setContentType("text/html;charset=GB2312");
        //得到輸出流對象
        PrintWriter out=resp.getWriter();
       
        out.println("<html><head><title>");
        out.println("頁面訪問統計");
        out.println("</title></head><body>");
        out.println("當前頁面被訪問了");
        out.println("<font color=red size=20>"+times+"</font>次");
        //設置屬性,將times保存到當前的上下文中
        context.setAttribute("times",times);
	}
	protected void doPost(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		this.doGet(req, resp);
	}
}

------第2題答案------

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class MyServlet extends HttpServlet {
	protected void doGet(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
		PrintWriter out = response.getWriter();
		ServletConfig config = getServletConfig();
		String param = config.getInitParameter("encoding");
		out.println("encoding=" + param);
	}
	protected void doPost(HttpServletRequest request,
		HttpServletResponse response) throws ServletException, IOException {
		this.doGet(request, response);
	}
}

第五章

請按照以下要求設計一個實現下載資源防盜鏈的類。

1) 創建一個DownManagerServlet類,繼承HttpServlet類。

2) 在doGet()方法中,判斷是否可以進行資源下載

------答案------

步驟如下:

1)創建一個DownManagerServlet類,使其繼承HttpServlet類並重寫該類的doGet()方法。

2)在doGet()方法中,使用HttpServletRequest對象的getHeader("referer")方法得到字段referer的值,並判斷是否可以進行資源下載。

3)如果不能下載,則進入下載頁。

具體代碼實現如下:

public class DownManagerServlet extends HttpServlet {
    public void doGet(HttpServletRequest request, HttpServletResponse response)
	throws ServletException, IOException {
	response.setContentType("text/html;charset=utf-8");
	PrintWriter out = response.getWriter();
        // 獲取referer頭的值
	String referer = request.getHeader("referer");
        // 獲取訪問地址
	String sitePart = "http://" + request.getServerName();
	if (referer != null && referer.startsWith(sitePart)) {
		// 處理正在下載的請求
		out.println("dealing download ...");
	} else {
		// 非法下載請求跳轉到download.html頁面
		RequestDispatcher rd = request.getRequestDispatcher("/download.html");
		rd.forward(request, response);
	}
    }
}

第六章

1、 請使用Cookie技術實現顯示用戶上次訪問時間的功能。

2、請設計一個類,使用Session技術實現購物車功能。 

------第1題答案------

步驟如下:

1)創建一個LastAccessServlet類,使其繼承HttpServlet類並重寫該類的doGet()方法。

2)在doGet()方法中,使用request.getCookies()得到所有cookie形成的cookie數組,並進行遍歷。

3)如果遍歷過程中找到cookie信息中存在lastAccess屬性則輸出,否則創建cookie對象,設置值為當前時間並發送給客戶端。

4)cookie的存活時間為1小時,訪問當前應用中的所有資源客戶端都回送cookie信息。

具體代碼實現如下:

package cn.itcast.chapter06.cookie.example;
import java.io.IOException;
import java.util.Date;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LastAccessServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public void doGet(HttpServletRequest request,
    HttpServletResponse response)throws ServletException, IOException {
	response.setContentType("text/html;charset=utf-8");
        /*
         * 設定一個 cookie 的name : lastAccessTime
         * 讀取客戶端發送cookie 獲得用戶上次的訪問時間顯示*/
        String lastAccessTime = null;
        // 獲取所有的cookie,並將這些cookie存放在數組中
        Cookie[] cookies = request.getCookies();
        for (int i = 0; cookies != null && i < cookies.length; i++) {
            if ("lastAccess".equals(cookies[i].getName())) {
                // 如果cookie的名稱為lastAccess,則獲取該cookie的值
                lastAccessTime = cookies[i].getValue();
                break;
            }
        }
        // 判斷是否存在名稱為lastAccess的cookie
        if (lastAccessTime == null) {
            response.getWriter().print("您是首次訪問本站!!!");
        } else {
            response.getWriter().print("您上次的訪問時間"+lastAccessTime);
        }
        // 創建cookie,將當前時間作為cookie的值發送給客戶端
        Cookie cookie = new Cookie("lastAccess",new Date().toLocaleString());
        cookie.setMaxAge(60*60);//保存1小時
        //訪問chapter06下資源時回送cookie
        cookie.setPath("/chapter06");
        // 發送 cookie
        response.addCookie(cookie);
    }
}

------第2題答案------

步驟如下:

1)創建一個PurchaseServlet類,使其繼承HttpServlet類並重寫該類的doGet()方法。

2)在doGet()方法中,使用request.getSession()實現購物車。

3)將session的id保存到cookie中。

4)重定向到購物車頁面。

具體代碼實現如下:

public class PurchaseServlet extends HttpServlet {
    public void doGet(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {
        // 獲得用戶購買的商品
        String id = req.getParameter("id");
        if (id == null) {
            // 如果id為null,重定向到ListBookServlet頁面
            String url = "/chapter06/ListBookServlet";
            resp.sendRedirect(url);
            return;
        }
        Book book = BookDB.getBook(id);
        // 創建或者獲得用戶的Session對象
        HttpSession session = req.getSession();
        // 從Session對象中獲得用戶的購物車
        List<Book> cart = (List) 
        session.getAttribute("cart");
        if (cart == null) {
            // 首次購買,為用戶創建一個購物車(List集合模擬購物車)
            cart = new ArrayList<Book>();
            // 將購物城存入Session對象
            session.setAttribute("cart", cart);
        }
        // 將商品放入購物車
        cart.add(book);
        // 創建Cookie存放Session的標識號
        Cookie cookie = new Cookie("JSESSIONID", session.getId());
        cookie.setMaxAge(60 * 30);
        cookie.setPath("/chapter06");
        resp.addCookie(cookie);
        // 重定向到購物車頁面
        String url = "/chapter06/CartServlet";
        resp.sendRedirect(url);
    }
}

第七章

1、 請使用include標簽編寫兩個JSP頁面,

要求:輸出b.jsp頁面的內容,等待5秒,再輸出a.jsp頁面。

2、 已知一個datetime.jsp頁面用於顯示當前時間。請編寫jsp   

文件用於顯示“歡迎來到傳智播客,現在的時間是:”+當前時間。 

------第1題答案------

a.jsp代碼:

<%@ page contentType="text/html;charset=UTF-8"%>
<%Thread.sleep(5000);%>
a.jsp內的中文<br>

b.jsp代碼:

<%@ page contentType="text/html;charset=UTF-8"%>
b.jsp內的中文<br>
<jsp:include page="a.jsp" flush="true" />

------第2題答案------

<%@page language="java" contentType="text/html; charset=UTF-8"%>
<html>
    <head>
        <title>歡迎你</title>
    </head>
    <body>
        歡迎來到傳智播客,現在的時間是:
        <%@ include file="datetime.jsp"%>
    </body>
</html>

第八章

1、請編寫一個類,實現通過對象得到完整的“包.類”名稱的功能。

2、設計一個程序使用BeanUtils工具為Person對象(JavaBean類)賦值。

    1)直接生成User對象。

    2)使用BeanUtils工具為name屬性賦值”youjun”,age賦值為31。

    3)使用BeanUtils工具取出屬性值,並在控制台輸出。

------第1題答案------

package cn.itcast.javabean;
class Cs{}
public class GetClassNameDemo {
	public static void main(String[] args) {
		Cs cs = new Cs ();
		System.out.println(Cs. getClass().getName());
	}
}

------第2題答案------

 

package cn.itcast.chapter08.beanutils;
import org.apache.commons.beanutils.BeanUtils;
import cn.itcast.chapter08.javabean.Person;
public class BeanUtilsDemo01 {
    public static void main(String[] args) throws Exception{
        Person p = new Person();
        //使用BeanUtils為屬性賦值
        BeanUtils.setProperty(p, "name", "youjun");
        BeanUtils.setProperty(p, "age", 31);
        //使用BeanUtils獲取屬性值
        String name = BeanUtils.getProperty(p, "name");
        String age = BeanUtils.getProperty(p, "age");
        System.out.println("名字是"+name+",今年"+age+"歲");
    }
} 

第九章

1、簡述什么是MVC設計模式?

2、簡述MVC設計模式中模型(Model)模塊的作用? 

 ------第1題答案------

 MVC模式將軟件程序分為3個核心模塊:模型(Model)、視圖(View)和控制器(Controller)

 ------第2題答案------

 1、管理應用程序的業務數據

2、定義訪問控制和修改這些數據的業務規則

3、為視圖提供查詢模型狀態的方法

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM