Javaweb---问题总结

Javaweb—问题总结

1.说说Jetty与tomcat的区别

​ Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。
由于它们的实现都遵循Java Servlet规范,一个java Web应用部署于两款容器的任意一个皆可。
但选择哪个更优?也许这得看场景。

那Jetty与Tomcat比较,有哪些差异?

  1. Jetty更轻量级。这是相对Tomcat而言的。
    由于Tomcat除了遵循Java Servlet规范之外,自身还扩展了大量JEE特性以满足企业级应用的需求,所以Tomcat是较重量级的,而且配置较Jetty亦复杂许多。但对于大量普通互联网应用而言,并不需要用到Tomcat其他高级特性,所以在这种情况下,使用Tomcat是很浪费资源的。这种劣势放在分布式环境下,更是明显。换成Jetty,每个应用服务器省下那几兆内存,对于大的分布式环境则是节省大量资源。而且,Jetty的轻量级也使其在处理高并发细粒度请求的场景下显得更快速高效。
  2. jetty更灵活,体现在其可插拔性和可扩展性,更易于开发者对Jetty本身进行二次开发,定制一个适合自身需求的Web Server。相比之下,重量级的Tomcat原本便支持过多特性,要对其瘦身的成本远大于丰富Jetty的成本。

总结:
Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。

Jetty和tomcat的比较

相同点:

  1. Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。

不同点:

    1. ** 架构比较 **

      Jetty的架构比Tomcat的更为简单
      Jetty的架构是基于Handler来实现的,主要的扩展功能都可以用Handler来实现,扩展简单。
      Tomcat的架构是基于容器设计的,进行扩展是需要了解Tomcat的整体设计结构,不易扩展。

    2. 性能比较

      Jetty和Tomcat性能方面差异不大
      Jetty可以同时处理大量连接而且可以长时间保持连接,适合于web聊天应用等等。
      Jetty的架构简单,因此作为服务器,Jetty可以按需加载组件,减少不需要的组件,减少了服务器内存开销,从而提高服务器性能。
      Jetty默认采用NIO结束在处理I/O请求上更占优势,在处理静态资源时,性能较高

    3. ** 少数非常繁忙;**

      Tomcat适合处理少数非常繁忙的链接,也就是说链接生命周期短的话,Tomcat的总体性能更高。

      Tomcat默认采用BIO处理I/O请求,在处理静态资源时,性能较差。

    4. **其它比较 **

      Jetty的应用更加快速,修改简单,对新的Servlet规范的支持较好。
      Tomcat目前应用比较广泛,对JavaEE和Servlet的支持更加全面,很多特性会直接集成进来。

2.如何修改jetty默认端口?如何修改tomcat默认端口?

1、修改jetty的默认端口号
要修改jetty的默认端口号 找到jetty文件所在目录下的 start.ini配置文件,打开文件 在里面找到这一行代码 jetty.http.port=8080 修改8080 就是修改他的端口号。

2、修改tomcat的默认端口号
与jetty的端口号修改大致相同

找到tomcat文件目录下的server.xml 文件,打开文件 找到 Connector port= 8080 这行代码 修改即可。

3.如何启动jetty服务器?

进入CMD命令行

在jetty目录下 输入 java -jar start.jar 就可以启动jetty服务器

4.简述Servlet的生命周期

生命周期一般分为三个阶段:

  • 初始化阶段:调用 init() 方法;
  • 响应客户请求阶段:调用 service() 方法(doGet() 和doPost() );
  • 终止阶段:调用 destroy() 方法;

doGet() 是通过 http 和 header 来传输数据,doPost() 是通过 http 和 body 来传输数据;

5.Servlet如何处理用户的请求?

首先浏览器向 Web 服务器发送了一个 HTTP 请求,Web 服务器根据收到的请求,会先创建一个 HttpServletRequest 和 HttpServletResponse 对象,然后再调用相应的 Servlet 程序。 
在 Servlet 程序运行时,它首先会从 HttpServletRequest 对象中读取数据信息,然后通过 service() 方法处理请求消息,并将处理后的响应数据写入到 HttpServletResponse 对象中。最后,Web 服务器会从 HttpServletResponse 对象中读取到响应数据,并发送给浏览器。 
需要注意的是,在 Web 服务器运行阶段,每个 Servlet 都只会创建一个实例对象,针对每次 HTTP 请求,Web 服务器都会调用所请求 Servlet 实例的 service(HttpServletRequest request,HttpServletResponse response)方法,并重新创建一个 request 对象和一个 response 对象。

6.说说Get请求和post的请求的区别?

1.get用于获取数据,而post一般用于提交数据
2.POST的安全性要比GET的安全性高。注意:这里所说的安全性和上面GET提到的“安全”不是同个概念。
3.GET请求只能进行url编码,而POST支持多种编码方式。
4.GET请求在URL中传送的参数是有长度限制的,而POST没有。
5.对参数的数据类型,GET只接受ASCII字符,而POST没有限制。

总结:

​ Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求,在FORM(表单)中,Method默认为"GET",实质上,GET和POST只是发送机制不同,并不是一个取一个发!

7.说说相对地址与绝对地址的区别

相对地址:
相对地址相对当前资源的地址。 容易出错,写法简单
绝对地址:
绝对地址放之四海而皆准的地址。 肯定不会出错,拼起来比较麻烦

8.说说请求重定向与请求转发的区别

  • 重定向
    B一个web资源收到客户端A请求后,B他会通知A客户端去访问另外一个web资源C,这个过程叫重定向。

Javaweb---问题总结_第1张图片

  • 请求转发
    B一个web资源收到客户端A请求后,B他会请求C客户端,C客户端去转发到B,通过B客户端A客户端访问另外一个web资源C,这个过程叫请求转发。

Javaweb---问题总结_第2张图片

  • 重定向和转发的区别?
    • 相同点:
      页面都会实现跳转
    • 不同点:
      • 请求转发的时候,url不会产生变化
      • 重定向时候,url地址栏会发生变化;

9.jsp有哪九大内置对象呢?servlet如何获取session和application对象?

  • 九大内置对象:
Jsp内置对象 功能
out 向客户端输出数据
request 向客户端请求数据
response 封装了jsp产生的响应,然后被发送到客户端以响应客户的请求
application 从servlet的配置对象中获得servlet上下文
config 表示Servlet的配置,当一个Servlet初始化时,容器把某些信息通过此对象传递给这个Servlet
page Jsp实现类的实例,它是jsp本身,通过这个可以对它进行访问
pagecontext 为JSP页面包装页面的上下文。管理对属于JSP中特殊可见部分中己经命名对象的该问
session 用来保存每个用户的信息,以便跟踪每个用户的操作状态
exception 反映运行的异常
  • 获取session和application对象:
session 可以通过 request.getSession(); 来获取;
application 可以通过 this.getServletContext() 来获取。

10.什么是单例?单例有哪些设计模式?

  • 单例:确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。
    特点:
    1,一个类只能有一个实例
    2,自己创建这个实例
    3,整个系统都要使用这个实例

  • 懒汉式,顾名思义就是实例在用到的时候才去创建,“比较懒”,用的时候才去检查有没有实例,如果有则返回,没有则新建。

public class Singleton {
private static Singleton instance = null;
public static synchronized Singleton getInstance() {
//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次
//使用时生成实例,提高了效率!
if (instance==null)
instance=new Singleton();
return instance; }
}

有线程安全和线程不安全两种写法,区别就是synchronized关键字。

  • 饿汉式:,实例在初始化的时候就已经建好了,不管你有没有用到,都先建好了再说。
public class Singleton {
private Singleton(){}
//在自己内部定义自己一个实例,是不是很奇怪?
//注意这是private 只供内部调用
private static Singleton instance = new Singleton();
//这里提供了一个供外部访问本class的静态方法,可以直接访问
public static Singleton getInstance() {
return instance;
}
}

优点:没有线程安全的问题

缺点:浪费内存空间。

你可能感兴趣的:(JavaWeb)