轻量级javaee第2章练习1
书上的练习都要试一试
1、说出JSP和Servlet的区别是什么?Servlet是什么?
答:JSP是Servlet的简化,区别在于,JSP会进行自我的初始化,所以有很多可以直接使用的内容,无需手动创建,而使用Servlet的话,那些都要以代码的方式手动创建。JSP更偏向于HTML,Servlet更偏向于java代码。
Servlet在我的理解中就是一个module,就是和客户端建立连接的类,然后把html代码作为数据传输给客户端,中间做一些处理而已,但是还是有很多我不理解的地方,比如一些作用范围。。。。唉,毕竟是别人写的东西,而且那么庞大。。。
二者都用于动态生成HTML页面
2、使用JSP直接做一个项目,不管什么表现层业务逻辑组件或者持久层组件。(包括使用自定义标签,jsp标签之类的,Servlet,Listener,Filter),做一个可以用的Study主页。可以评论。还可以做一个排行榜网页。按标签、属性分类。
自习室网页版
3、p74按照书上,徒手建立一个Web应用。
就是建立一个文件夹,文件夹里面放一个MEB-INF文件夹,WEB-INF文件夹里再放一个web.xml和一个classes文件夹,还有一个lib文件夹。这样一个简单的Web项目就做好了。。。
其实我很好奇,现在还有谁拿着网页上淘宝,,,,
4、什么是JAAS授权认证p76。Web应用首页是不是和index.jsp有关系?
答:JAAS我还不知道,百度了,也根本看不懂。。。
不过Web应用首页确实约定为index.html/.jsp/.htm之类的,反正名字是index,虽然可以修改,但是按照约定来会更好一些。
然后如果只输入网址,而没有指定页面的具体位置,那么就会默认打开index文件。如果指定了名称则打开对应名称的页面,比如
http://localhost:8888/webDemo/a.jsp就是展示a.jsp
而
http://localhost:8888/webDemo,如果有index文件则展示index文件,如果没有,就会报错。,。。
5、jetty是什么?
答:也是也tomcat差不多的一个servlet容器。
6、查看一下Tomcat的conf路径下的web.xml文件
答:基本看不懂。。。。
7、查看一下Tomcat的work路径对应的Web应用。
会自动生成一个包,然后会自动生成servlet然后编译
8、查看一下p77下面说的目录和文件
答:
9、p79上面的catch块的内容看不懂。
答:我现在也还是看不懂2022年5月2日
10、说出JSP的4种基本语法是什么?
答:
(1)jsp注释
JSP注释和HTML注释的区别是,JSP注释不会被发送到客户端,而HTML注释会发送到客户端。
(2)jsp声明
(3)jsp输出表达式
(4)jsp小脚本
11、模仿p80的例子做一个练习。
在a.jsp的基础上扩展出来的,结果和书上一样,JSP注释,到客户端后就会变成一行空行。
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<html>
<head>
<title>欢迎</title>
</head>
<body>
欢迎学习Java Web知识
<!-- 增加JSP注释 -->
<%--JSP注释部分 --%>
<!-- 增加HTML注释部分 -->
<!-- HTML注释部分 -->
</body>
</html>
12、模仿p81的例子做一个练习。
代码书上都有,我照着抄了一遍而已
13、为什么count会一直+1?每次刷新不会重新执行public int count吗?刷新只会重新调用service方法?
重载和停止再开启,才会让count重新变为0,那么就是说servlet的是一直存在的,不会被重新启动,不是我的Module,他的_jspService()每次访问都会被调用。而不是重新生成一个java实例。。。
如果代码有变动的话,就会重新生成实例,否则访问根本不会报错!还是不懂
然后就算jsp代码是错误的,还是有很大概率正常访问,我猜测是编译失败,所以如果访问到了页面,就是和最后一次编译成功的版本一样。
14、按照p81下面的说明,查看下_jsp.java文件。
答:我自己声明的方法和变量,都被放在最顶端,
15、尝试在jsp种声明抽象方法,看看会报什么错误。
答:无法编译的错误
16、模仿p82的例子做一个练习。并且尝试在输出表达式语法后加上分号,看看会报什么错误?
答:
17、每个html页面上声明的<!DOCTYPE>是干嘛用的?还有中的xmlns是什么?
答:(1)告诉浏览器,这个网页的一些信息,看看应该用什么来解析这个网页
HTML文件里开头的!Doctype有什么作用?
(2)xmlns 属性规定文档的 xml 命名空间。(我看不懂。。。。)
<html xmlns=“http://www.w3.org/1999/xhtml” 声明一个网址,或者说声明了一个文件夹,,,,就是声明命名空间?不懂。。
18、模仿p83的例子做一个练习
答:我直接把书上的代码抄了一遍。。。
19、不知道jsp脚本在servlet中是什么样子。
答:到work下看看就知道了。。比较复杂,jsp是浓缩的精华。我先把需要学习的先学,后面再扩展。。
20、尝试在小脚本中声明变量(局部和全局都试一下,public,private,static)声明方法试一下
答:声明全局变量后就会报错
21、尝试在jsp中执行数据库查询。并且查看网页源代码是什么样的。还有对应servlet代码是怎么样的。
答:代码抄书上的。。。
对应Servlet的代码如下,没啥太大的区别,就是把<% %>之中的代码原原本本放进去了而已。
22、说出jsp的三个编译指令是什么?
答:
(1)<%@ page 设置contentType和language之类的会用到
(2)<%@ include 应该是静态导入页面
(3)tablib将在标签库处详细讲解
23、说出page指令各个属性的意义?
答:language 声明当前JSP页面使用的脚本语言的种类
extends 指定JSP页面编译所产生的Java类所集成的父类
import 用来导入包
session 设置这个JSP页面是否需要HTTPSession(不太理解),后面有一个例子提到了,说设置为session = false的话,就是进入这个页面无需再次建立session
buffer:不懂。。
autoFlush也不懂。。
info:设置用于Servlet.getServletInfo()的返回值,不设置也会有一个默认值
errorPage设置报错了的话,跳转到哪个页面,不设置的话,就会直接输出报错信息
isErrorPage 设置本页面是否为错误处理程序,设置为true会有一个额外的类用于调用,false的话,是没有这个类的
contentType 用于设置生成网页的文件格式和编码字符集,
pageEncoding:指定生成网页的编码字符集
session属性是什么意思?什么作用?
buffer属性是什么意思?什么作用?
24、尝试用info设置jsp程序的信息,然后用Servlet.getServletInfo()和getServletInfo()输出。再尝试不设置info属性,输出一下看看是什么信息?p87例子练习再换回out的方式。
答:抄写书上的代码
25、尝试自己打包一个jar包然后在自己写的程序中import自己包里的类。
答:
<%@ page contentType="text/html; charset=GBK" language="java" errorPage="" %>
<!-- 指定info信息 -->
<%@ page info="this is a jsp" %>
<%@ page import="Test.Test" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>测试page指令的info属性</title>
</head>
<body>
<!-- 输出info信息 -->
<% out.println(getServletInfo());%>
<%= new Test().getString() %>
</body>
</html>
完全可以
26、p88如果不设置isErrorPage="true"会怎样?再试一下删除errorPage属性
答:设置为true会有这个
不设置或者设置为false就是这样
27、p89什么静态的include?动态的include?什么叫做被嵌入的文件经常需要改变?什么时候使用include?什么时候使用jsp:include?他们的区别是什么?
答:静态的include是直接把代码硬编码在一起,如果是动态的include则是依旧是一个引用的形式。
经常需要改变的话,如果使用静态include就会一直需要重新硬编码。如果采用动态的include的话,就算一直变,也没关系。
应该是在被嵌入文件不需要经常改动的时候使用静态include,这样免去了每次查找引用的时间,可以提高运行效率。
如果被嵌入文件经常改变的话,使用静态的include反倒要一直查找,然后硬编码,这样不如动态的include,动态的include每次只需要查找。
区别其实就在动态和静态这两个描述中。
28、模仿p89的例子做一个练习
答:直接抄写了书上的代码。
29、p90的out.write和out.print什么区别?
答:看如下博客JSP out.print()和out.write()区别详解
主要的区别就是。在字符串为null的时候,print输出“null”而write会报错。
out.write()这个方法只能输出字符、字符数组、字符串等字符相关的数据
而out.print()会将所有类型的数据转换成字符串,然后输出。
30、说出jsp的七个动作指令分别是什么?
答:
(1)jsp:forward:执行页面
31、p90的那段话没看懂,编译指令和动作指令的区别是什么?处理指令通常可以替换成jsp脚本是什么意思?什么是处理指令?
32、什么是JavaBean?什么是Applet?
33、模仿p90下方的例子做一个练习(forward指令)
34、p91下方的例子
35、flush属性的作用没看懂p92
36、说出forward和include的区别和联系是什么?
37、说出p94的四种scope的具体范围,该页面是什么意思?本次请求又是什么意思?本次session又是什么意思?应用内一直有效又是什么意思?
38、试一下p94下方的例子,尝试不提供setName和getName试一试?尝试不提供变量但是提供方法试一试
39、p95是必须自己把src中的.java文件编译后,将.class文件放入classes目录中然后重启后才会生效的意思吗?
40、p95下方的例子
41、说出jsp脚本中的9个内置对象分别是什么?
42、p97中关于config内置对象的说明看不懂?JSP页面通常无须配置,也就不存在配置信息。因此,该对象更多的在Servlet中有效??
43、尝试在isErrorPage属性为false中使用exception
44、page和pageContext是什么区别?
45、request的parameter和Attribute什么区别?
46、什么时候使用response?什么叫重定向?
47、p97中对于一次会话的说法,关闭浏览器才算会话结束??可是对于一个网站来说关闭所有网页不就应该算是会话结束吗?
48、查看一下isErrorPage=true的页面中是否有exception局部变量
49、简略说出Web服务器运行原理
50、jsp/servlet之间如何交换数据?
51、page和普通的jsp脚本中的变量有什么区别?
52、练习一下让多个JSP、Servlet共享数据p100p101
53、p101的@WebServlet注解是干嘛用的?
54、p101Servlet中没有内置对象但是jsp中有内置对象这种说法好怪?是不是不用jsp编译的servlet没有内置对象吗?
55、尝试获得Web应用配置参数p102。这个配置参数是什么意思?web.xml中的东西?
56、p103的2.6.2节config对象看不懂,为什么这里又把JSP和Servlet分开了??配置在web.xml中难道jsp取不到?servlet取得到?
57、p104我看不太懂,servlet-name中的config是有一个Servlet名字叫做config.java吗?还有为什么要把jsp页面配置在Web应用中?还有后面的servlet-mapping是干嘛的?
如果不配置成这样,jsp就无法访问name和age变量了吗?
58、打开普通JSP页面所生成的Servlet类看看。p105
59、p106的例子练习一下。并且查看一下error.jsp生成的servlet中的exception声明。和isErrorPage=false的servlet做个对比。
60、p107的例子练习一下。
61、p108例子练习+上将两个变量名修改为一样,看看会不会覆盖?
62、p110上面getParameterNames()为什么不是和getParameterValues()一样返回数组
63、GET和POST请求的区别是什么?分别如何使用?分别什么情况使用?
64、p110的例子练习一下