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的成本。用自己的理解,即增肥容易减肥难。
  3. 然而,当支持大规模企业级应用时,Jetty也许便需要扩展,在这场景下Tomcat便是更优的。

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

2.1修改jetty的默认端口号

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

2.2修改tomcat的默认端口号

与jetty的端口号修改大致相同

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

3.如何启动jetty服务器

进入CMD命令行

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

4.简述Servlet的生命周期

4.1实例化

加载 Servlet后 服务器会创建一个 Servlet 实例 调用它的 构造方法

4.2初始化

调用 Servlet的 init()方法进行初始化,在初始化阶段 init() 方法简单地创建或加载一些数据,这些数据将被用于 Servlet 的整个生命周期。

4.3请求处理

对于到达服务器的客户机请求,服务器创建针对此次请求的一个“请求”对象和一个“响应”对象。服务器调用 Servlet 的 service() 方法,该方法用于传递“请求”和“响应”对象。service() 方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机。service() 方法可以调用其它方法来处理请求,例如 doGet()、doPost() 或其它的方法。(每次请求都执行该步骤)

4.4 销毁

当服务器不再需要 Servlet, 或重新装入 Servlet 的新实例时,服务器会调用 Servlet 的 destroy() 方法。(只执行一次)。

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的请求的区别。

Get是向服务器发索取数据的一种请求,而Post是向服务器提交数据的一种请求。

  1. Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改。

  2. Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。

  3. GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。Request.QueryString来获取Get方式提交来的数据。

  4. Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。

  5. Post比Get安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用post

  6. POST表示可能修改变服务器上的资源的请求,在服务器端,用Post方式提交的数据Request.Form来获取。

7.绝对地址和相对地址

绝对地址:资源文件的完整储存路径 如:E:\javaweb\jetty-distribution-9.4.18.v20190429.zip\jetty-distribution-9.4.18.v20190429

相对地址:资源文件相对于项目来说 在项目里的存储地址

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

请求重定向

客户端行为,response.sendRedirect() 从本质上讲等同于两次请求,前一次的请求对象不会保存,地址栏的URL会变

客户端请求服务器,服务器返回重定向,客户端再自动请求重定向的地址。

请求转发

服务器行为,request.getRequestDispather().forward(req,resp) 是一次请求,转发后请求对象会保存,地址栏的URL地址不会变

客户端请求服务器,服务器内部请求其他地址

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

Request常用的方法:getParameter(String strTextName) 获取表单提交的信息.

getProtocol() 获取客户使用的协议。

String strProtocol=request.getProtocol();

getServletPath() 获取客户提交信息的页面。String strServlet=request.getServletPath();

getMethod() 获取客户提交信息的方式 String strMethod=request.getMethod();

getHeader() 获取HTTP头文件中的accept,accept-encoding和Host的值,String strHeader=request.getHeader();

getRermoteAddr() 获取客户的IP地址。String strIP=request.getRemoteAddr();
getRemoteHost() 获取客户机的名称。String clientName=request.getRemoteHost();

getServerName() 获取服务器名称。 String serverName=request.getServerName();

getServerPort() 获取服务器的端口号。 int serverPort=request.getServerPort();

getParameterNames() 获取客户端提交的所有参数的名字。

获取:session对象:调用 request对象中的 getsession()方法

获取:application 对象:调用 getServletContext(); 方法


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

单例:顾名思义就是只有一个实例,并且她自己负责创建自己的对象,这个类提供了一种访问其唯一的对象的方式,可以直接访问,不需要实例化该类的对象。下面我们来看下有哪几种实现方式吧。

懒汉式,顾名思义就是实例在用到的时候才去创建,“比较懒”,用的时候才去检查有没有实例,如果有则返回,没有则新建。有线程安全和线程不安全两种写法,区别就是synchronized关键字。

package aa.bb.cc;

public class LANHAN {
    private  static  LANHAN  xxx;//懒汉式 还没有创建实例
    private  LANHAN (){}//私有构造方法
    public  static  LANHAN  getInstance(){
        if ( xxx==null){
            xxx=new LANHAN();
        } return  xxx;
    } 
}

饿汉式:从名字上也很好理解,就是“比较勤”,实例在初始化的时候就已经建好了,不管你有没有用到,都先建好了再说。好处是没有线程安全的问题,坏处是浪费内存空间。

package aa.bb.cc;

public class EHAN { 
    private  static  EHAN instance = new EHAN(); //饿汉式 先创建对象
    private  EHAN(){}//私有化构造方法
    public  static  EHAN getInstance(){
        return  instance;
    }
}//用的时候直接调用示实例 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值