1.jetty与tomcat的区别。
-
相同点:
jetty服务器和tomcat类似都是jsp/servlet容器,都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范 -
不同点
1)jetty更下,更快,更灵活,内核更小。默认使用utf-8字符集,不存在中文乱码情况。不太适合做大型开放。
2)tomcat比较传统,功能更强大,特别适合大型项目开发。缺点:经常有中文乱码,默认使用ISO_8859_1字符集。tomcat服务器中文乱码的解决方案:
-
1.request.setCharacterEncoding();修改
-
2.使用过滤器。(推荐使用过滤器) 但是过滤器只能解决 post请求的乱码
-
3.在Tomcat安装目录下的conf目录下的server.xml添加URLEncoding=“utf-8” 但只能解决get请求的乱码
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URLEncoding="utf-8"/>
2.如何修改jetty默认端口?如何修改tomcat默认端口?
- 修改jetty默认端口
- 修改tomcat默认端口
3.如何启动jetty服务器?
cmd进入文件夹,然后输入java -jar start.jar
4.简述Servlet的生命周期。
1.如果是第一次请求。
--->doGet
构造方法-->init-->service --->destroy
--->doPost
2.如果不是第一次请求
说明这个servlet已经驻留内存了,直接执行Service方法。
--->doGet
service -- ---->destroy
--->doPost
5.Servlet如何处理用户的请求?
单例多线程的方式处理请求
6.说说get请求和post的请求的区别。
GET:从服务器上获取数据,也就是所谓的查,仅仅是获取服务器资源,不进行修改。
POST:向服务器提交数据,这就涉及到了数据的更新,也就是更改服务器的数据。
GET在浏览器回退时是无害的,而POST会再次提交请求。
GET产生的URL地址可以被Bookmark,而POST不可以。
GET请求会被浏览器主动cache,而POST不会,除非手动设置。
GET请求只能进行url编码,而POST支持多种编码方式。
GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
GET请求在URL中传送的参数是有长度限制的,而POST么有。
对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
GET参数通过URL传递,POST放在Request body中。
7.说说相对地址与绝对地址的区别。
- 相对地址
相对当前资源的地址。 容易出错,写法简单
/photo - 绝对地址
放之四海而皆准的地址。 肯定不会出错,拼起来比较麻烦
C://User/HTML/photo
8.说说请求重定向与请求转发的区别。
-
重定向
什么情况下特别适合使用请求重定向呢?最常见的情形就是权限认证失败后,必须请求重定向到登录页面,重新登录。
B一个web资源收到客户端A请求后,B他会通知A客户端去访问另外一个web资源C,这个过程叫重定向 -
请求转发
B一个web资源收到客户端A请求后,B他会请求C客户端,C客户端去转发到B,通过B客户端A客户端访问另外一个web资源C,这个过程叫请求转发相同点
-
页面都会实现跳转
不同点
-
请求转发的时候,url不会产生变化
-
重定向时候,url地址栏会发生变化;
9.jsp有哪九大内置对象?servlet如何获取session和application对象?
-
jsp九大内置对象
out,page,request,response,session,application,exception,pageContext,config
常用的是:
request,response,session,application
, 只需要掌握这四个就够了。研究下在servlet中怎么获取这四个最常用的对象。
- request,response本身参数自带
- request.getSession获取session;
- request.getServletContext().setAttribute(“nation”,“china”); 获取application
10.什么是单例?单例有哪些设计模式?
保证整个系统中一个类只有一个对象的实例,实现这种功能的方式就叫单例模式。
常见的单例模式实现方式有五种:饿汉式、懒汉式、双重检测锁式、静态内部类式和枚举单例,饿汉式和懒汉式又最为常见!
饿汉式:
线程安全,调用效率高。但是不能延时加载,由于该模式在加载类的时候对象就已经创建了,所以加载类的速度比较慢,但是获取对象的速度比较快,且是线程安全的。
public class SingletonDemo1 {
//线程安全的
//类初始化时,立即加载这个对象
private static SingletonDemo1 instance = new SingletonDemo1();
private SingletonDemo1() {
}
//方法没有加同步块,所以它效率高
public static SingletonDemo1 getInstance() {
return instance;
}
}
懒汉式:
线程不安全,由于该模式是在运行时加载对象的,所以加载类比较快,但是对象的获取速度相对较慢,且线程不安全。
public class SingletonDemo2 {
//线程不安全的
private static SingletonDemo2 instance = null;
private SingletonDemo2() {
}
//运行时加载对象
public static SingletonDemo2 getInstance() {
if (instance == null) {
instance = new SingletonDemo2();
}
return instance;
}
}
单例模式所属类的构造方法是私有的,所以单例类是不能被继承的。