《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、为视图提供查询模型状态的方法
《JavaWeb程序开发入门》课后题的更多相关文章
- 微信小程序开发入门教程
做任何程序开发要首先找到其官方文档,微信小程序目前还在邀请内测阶段,目前官方放出了部分开发文档,经过笔者一天的查看和尝试,感觉文档并不全面,但是通过这些文档已经能够看出其大概面貌了.闲话不多说,我们先 ...
- scala程序开发入门
scala程序开发入门,快速步入scala的门槛: 1.Scala的特性: A.纯粹面向对象(没有基本类型,只有对象类型).Scala的安装与JDK相同,只需要解压之后配置环境变量即可:B.Scala ...
- 微信小程序开发入门(一)
小程序学习入门--(一) 最近自己学习微信小程序的过程当中自己总结出来的知识点,我会不断地更新和完善! 小程序的开发工具 一台电脑 熟悉HTML.CSS.JS基本语法 开发工具: 微信web开发者工 ...
- 微信小程序开发入门与实践
基础知识---- MINA 框架 为方便微信小程序开发,微信为小程序提供了 MINA 框架,这套框架集成了大量的原生组件以及 API.通过这套框架,我们可以方便快捷的完成相关的小程序开发工作. MIN ...
- 微信小程序-开发入门
微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值 ...
- 微信小程序开发入门篇
本文档将带你一步步创建完成一个微信小程序,并可以在手机上体验该小程序的实际效果. 开发准备工作 获取微信小程序的 AppID 登录 https://mp.weixin.qq.com ,就可以在网站的& ...
- 微信小程序开发入门:10分钟从0开始写一个hello-world
小程序开发需要三个描述整体程序的app文件 和 一个描述多个页面的 pages文件夹. (1)三个app文件分别是app.js,app.json,app.wxss. app.js文件是脚本文件处理一些 ...
- 程序开发入门工具之CodeBlocks
程序开发基础工具之CodeBlocks 作为程序开发工作者,我们会接触很多的程序开发软件:但实用以及容易掌握的程序开发软件对于初学者的学习能力是有一定的加成的.今天我就作为一个程序开发者给大家推荐一个 ...
- 微信小程序-开发入门(一)
微信小程序已经火了一段时间了,之前一直也在关注,就这半年的发展来看,相对原生APP大部分公司还是不愿意将主营业务放到微信平台上,以免受制于腾讯,不过就小程序的应用场景(用完即走和二维码分发等)还是很值 ...
随机推荐
- 工作笔记—新浪微博Oauth2.0授权 获取Access Token (java)
java发送新浪微博,一下博客从注册到发布第一条微博很详细 利用java语言在eclipse下实现在新浪微博开发平台发微博:http://blog.csdn.net/michellehsiao/art ...
- 通过ZwQuerySystemInformation获取EPROCESS
google一下,发现很多都是直接通过ZwQuerySystemInformation通过11号获取进程结构SYSTEM_PROCESS_INFORMATION,对于详细的进程信息表达不够.所以想要通 ...
- 机器学习数据集,主数据集不能通过,人脸数据集介绍,从r包中获取数据集,中国河流数据集
机器学习数据集,主数据集不能通过,人脸数据集介绍,从r包中获取数据集,中国河流数据集 选自Microsoft www.tz365.Cn 作者:Lee Scott 机器之心编译 参与:李亚洲.吴攀. ...
- AllJoyn+Android开发案例-android跨设备调用方法
AllJoyn+Android开发案例-android跨设备调用方法 项目须要涉及AllJoyn开源物联网框架.前面主要了解了一些AllJoyn主要的概念.像总线,总线附件,总线对象,总线接口这种概念 ...
- Android apk签名的两种方法
编辑推荐:稀土掘金,这是一个针对技术开发者的一个应用,你可以在掘金上获取最新最优质的技术干货,不仅仅是Android知识.前端.后端以至于产品和设计都有涉猎,想成为全栈工程师的朋友不要错过! 为了保证 ...
- 使用Jenkins搭建持续集成(CI)环境
转自:http://www.cnitblog.com/luckydmz/archive/2012/01/03/77007.html 首先从官网http://jenkins-ci.org/下载 Java ...
- Shell函数的7种用法介绍
1. 在shell文件内部定义函数并引用: 复制代码代码如下: [~/shell/function]# cat factorial.sh #!/bin/bashfunction factorial{f ...
- DNS-320 B2 语言包
神一样的NAS啊,这个语言包在这里http://tsd.dlink.com.tw/downloads2008detailgo.asp,选择sc的就可以了. 真是神一样的配置~ 佩服死d-link了
- iOS多个storyboard间跳转
Stroyboard 可以被看作一个管理View画面的集合.也就是说一个iOS专案裡面并没有限制只能有一个Storyboard.所以在你的APP专案中,你可以把功能相近的View放到同一个APP之中, ...
- HTTP Status 500 - Unable to create directory
分析原因: 例如:java web项目 上传图片创建文件夹cd /data/apps/static-web/sjk/driver/attachment/编号/文件名称.jpg 在创建文件目录 /dat ...