JavaWeb——课后作业一
1. 说说jetty与tomcat的区别。
相同点:
- tomcat与jetty都是一种servlet的引擎,他们都支持标准的servlet规范和javaEE规范
不同点:
- jetty更快,更灵活,内核更小。默认使用utf-8字符集,不存在中文乱码情况,但不太适合做大型开放。
- tomcat比较传统,功能更强大,特别适合大型项目开发,但经常有中文乱码情况,默认使用ISO_8859_1字符集。
2. 如何修改jetty默认端口?如何修改tomcat默认端口?
2.1 修改jetty默认端口
- 打开jetty安装目录下的start.ini文件
- 如下图把端口修改为:8888
2.2 修改tomcat 默认端口
- 打开tomcat安装目录下的server.xml文件
- 如下图把端口修改为:8080
3. 如何启动jetty服务器?
一般情况下都可以通过安装目录下的start.jar包来启动jetty,除此之外,还可以通过dos命令,先进入jetty的安装文件夹,再输入命令来进行启动。
启动命令为:java -jar start.jar
4. 简述Servlet的生命周期。
(1)加载和实例化
当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求,直接进入步骤(3);如果不存在,就通过构造方法创建一个Servlet实例。
(2) 初始化
实例化后,Servlet容器将调用Servlet的 init() 方法进行初始化(一些准备工作或资源预加载工作)。
(3)服务
初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service() 的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法:doGet()和doPost()。
(4)销毁
重新发布项目,正常关闭tomcat时,会执行destroy() 方法,如果非正常关闭,相当于程序中断,不会执行方法。
//从左到右的次序
1.如果是第一次请求。
--->doGet
构造方法-->init-->service --->destroy
--->doPost
2.如果不是第一次请求
说明这个servlet已经驻留内存了。
--->doGet
service -- ---->destroy
--->doPost
5. Servlet如何处理用户的请求?
- 针对 Servlet 的每次请求,Web 服务器在调用 service() 方法之前,都会创建 HttpServletRequest 和 HttpServletResponse 对象。简称 request 对象和response 对象。浏览器访问 Servlet 的交互过程如下图所示:
- 首先浏览器向 Web 服务器发送一个 HTTP 请求,Web 服务器根据收到的请求,会先创建一个 HttpServletRequest 和 HttpServletResponse 对象,然后再调用相应的 Servlet 程序。
- 在 Servlet 程序运行时,它首先会从 HttpServletRequest 对象中读取数据信息,然后通过 service() 方法处理请求消息,并将处理后的响应数据写入到 HttpServletResponse 对象中。最后,Web 服务器会从 HttpServletResponse 对象中读取到响应数据,并发送给浏览器。
6. 说说get请求和post的请求的区别。
相同点:
- get和post都是http请求方式。(http请求方式远不止这两种)
不同点:
- get 请求重点在从服务器上获取资源,而post 请求重点在向服务器发送数据。
- get 请求过程中其参数在浏览器的地址栏的url中可见,所以隐私性安全性较差,且参数长度有限制,而 post 请求传递的参数放在Request body中,不会在地址栏的url中显示,比GET要安全,且参数长度无限制。
- get 请求比较常见的方式是通过url地址栏请求,而post 请求最常见是通过form表单发送数据请求。
7. 说说相对地址与绝对地址的区别。
- 相对地址相对当前资源的地址。 容易出错,写法简单。
- 绝对地址放之四海而皆准的地址。 肯定不会出错,拼起来比较麻烦 。
-
举例:假设你的网页在如下位置:D:\WORK\web\111.html,而图片在D:\WORK\web\images\111.jpg,有以下两种情况:
①你在网页中直接以D:\WORK\web\images\111.jpg这个路径表示你的图片。<这个就是图片的绝对路径>
②你在网页中以: images\111.jpg来表示你的这个图片。<这个是图片的相对路径>
8. 说说请求重定向与请求转发的区别。
请求重定向(redirect):
- 语法:response.sendRedirect(url); 需要两次请求,地址栏会发生改变,
request对象也会变,且request 里的属性无法保存。
请求转(forward):
- 语法:request.getRequestDispatcher(url).forward(request,response); 需要一次请求,地址栏不会发生改变,request对象不变,且request 里的属性可以保存。
9. jsp有哪九大内置对象?servlet如何获取session和application对象?
-
jsp的九大内置对象:out,page,request,response,session,application,exception,pageContext,config
其中常用的是:request,response,session,application -
获取session对象:
request.getSession().setAttribute(“name”,“大胖”); //如获取大胖这个对象 -
获取application对象:
request.getServletContext().setAttribute(“nation”,“china”); //如获取中国这个对象
10. 什么是单例?单例有哪些设计模式?
- Java中单例的定义为:一个类有且仅有一个实例,并且自行实例化向整个系统提供。
-
单例有懒汉模式和饿汉模式。
形象比喻:饿汉主动找食物吃,懒汉躺在地上等着人喂。
public class MySun {
//懒汉模式
private static MySun sun; //单例对象
private MySun(){ //私有构造方法
}
//静态工厂方法
public static MySun getInstance(){
if(sun==null){
sun = new MySun();
}
return sun;
}
}
①要想让一个类只能构建一个对象,自然不能让它随便去做new操作,因此MySun的构造方法是私有的。
②sun是MySun类的静态成员,也是我们的单例对象。它的初始值可以写成null,也可以写成new new MySun()。
③getInstance()是获取单例对象的方法。如果单例初始值是null,还未构建,则构建单例对象并返回。这个写法属于单例中的懒汉模式。如果单例对象一开始就被new MySun()主动构建,则不再需要判空操作,这种写法属于饿汉模式。
上一篇: L1-013 计算阶乘和
下一篇: 色域任意墨水种类加减法