JavaWeb中的问题 ---- Servlet和Jsp

servlet和jsp中的问题:

  1. 说说jetty与tomcat的区别。

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

  3. 如何启动jetty服务器?

  4. 简述Servlet的生命周期。

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

  6. 说说get请求和post的请求的区别。

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

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

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

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

一、说说jetty与tomcat的区别。

Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。它们有相似的地方,又有很多不同之处。
相同点:

  • tomcat和jetty都是一种servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。

不同点:

  • Jetty服务器相比于Tomcat服务器来说是一种轻量级的服务器,速度比较快,比较灵活,但不适合做大型项目开放。默认使用 utf-8 字符集,所以不会出现中文乱码的问题。
  • Tomcat是一个比较传统的web服务器,功能更强大,适合做大中型项目开发,默认使用 ISO_8859_1 字符集,会出现中文乱码的问题。

Tomcat 中文乱码的解决方案:

  1. request.setCharacterEncoding(),设置编码的属性值。
  2. 使用过滤器。(推荐使用过滤器)但过滤器只能解决 post 请求的乱码。
  3. server.xml中添加 URIEncoding=utf-8属性,解决get请求的乱码。

二、如何修改jetty默认端口?如何修改tomcat默认端口?

修改Jetty服务器的默认端口: 找到你Jetty服务器的磁盘安装位置,打开找到 start.ini 文件,打开修改相应的端口即可。
在这里插入图片描述
修改 Tomcat 服务器默认端口:
找到 Tomcat 的磁盘安装位置,打开Tomcat --> conf --> server.xml,修改其中的默认端口配置即可。
在这里插入图片描述

三、如何启动jetty服务器?

在 DOS 下开启 Jetty 服务器的步骤:
我们在打开 Jetty 服务器的磁盘安装位置:会发现一个 start.jar 文件。
在这里插入图片描述
然后切换磁盘到 Jetty 服务器的安装目录,输入 java jar start.jar ,服务器就成功开启了。
在这里插入图片描述

四、简述Servlet的生命周期。

Servlet 生命周期可被定义为从创建直到毁灭的整个过程。以下是 Servlet 遵循的过程:

  • Servlet 通过调用 init () 方法进行初始化。
  • Servlet 调用 service() 方法来处理客户端的请求。
  • Servlet 通过调用 destroy() 方法终止(结束)。
  • 最后,Servlet 是由 JVM 的垃圾回收器进行垃圾回收的。

图示:
如果是 servlet 第一次请求:

在这里插入图片描述
不是第一次 servlet 请求: 因为 servlet 已经驻留在内存中,所以就不需要再次进行初始化了。
在这里插入图片描述

五、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 对象。
在这里插入图片描述

六、 说说get请求和post的请求的区别。

  • 请求数据大小不同: 因为get请求的数据是要追加到URL中,而URL的数据量一般不能超过2K,所以用get请求的方法对数据的大小有限制。而post请求方法是把数据放在消息体中,所以理论上对数据量没有限制。
  • 安全性不同: 因为get请求的数据是追加在URL中,外部用户能很方便的看到,从这个角度上来讲不安全。而post方法因为是讲请求放在消息体中,不会直接在URL中显示所以从这个角度来说数据会比较安全。
  • 书签建立: get请求可以建立书签;post请求则不能。例如:假设你有一个页面允许用户指定搜索规则。用户可能一个星期之后才回来,想要得到原来的数据,但此时服务器上已经有新的数据了。
  • 方法的使用: get用于得到某些东西,只是简单的获取,不会对服务器做任何的改变。post则用户发送数据来进行处理,可以修改服务器上的数据。
  • 请求是否幂等: get请求是幂等的,它只是要得到一些东西,不会修改服务器上的内容。它能执行多次,而且不会产生任何不好的副作用。而post不是幂等的,post体中的提交的数据可能用于不可逆转的事务。所以从这个角度上来看的话要慎重使用doPost()功能。

七、说说相对地址与绝对地址的区别。

相对地址: 相对地址是相对当前资源的地址, 容易出错,写法简单。
绝对地址: 绝对地址就是一个文件在磁盘中的全路径, 肯定不会出错,但写起来比较麻烦。

八、说说请求重定向与请求转发的区别。

请求重定向(redirect): response.sendRedirect(url); 两次请求,地址栏会发生改变,
request对象也会变。request 里的属性无法保存。
请求转发(forward): request.getRequestDispatcher(url).forward(request,response); 一次请求,地址栏不会发生改变,request对象不变,request 里的属性可以保存。

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

jsp的九大内置对象: out、page、request、response、session、application、exception、pageContext、config

常用的需要掌握的四个: request、response、session、application

servlet 获取 session 对象:通过 request.getSession获取session。
servlet 获取 application 对象:通过 request.getServletContext().setAttribute(“nation”,“china”); 获取application。

十、什么是单例?单例有哪些设计模式?

Java 单例模式是一种常见的设计模式,常见的单例模式有:懒汉式单例、饿汉式单例

单例模式的特点:

  • 单例类只能有一个实例。
  • 单例类必须自己创建自己的唯一实例。
  • 单例类必须给所有其他对象提供这一实例。

饿汉式单例模式:

/**
 * 饿汉式单例模式:在加载类时就已经初始化了一个单例对象。
 */
public class SingleTonDemo01 {
    //私有化构造方法,别的类不能实例化对象
    private SingleTonDemo01(){
    }
    private static SingleTonDemo01 singleTon = new SingleTonDemo01();
    //别的类通过静态资源来调用这个饿汉单例对象
    public static SingleTonDemo01 getInstance() {
        return singleTon;
    }
}

懒汉式单例模式:

/**
 * 懒汉式单例模式:在加载这个类是不会创建一个新的单例对象,
 * 只有在用的时候才会创建一个单例对象。
 */
public class SingleTonDemo02 {
    //私有化构造方法
    private SingleTonDemo02(){
    }
    private static SingleTonDemo02 singleTon;
    
    public static SingleTonDemo02 getInstance() {
        singleTon = new SingleTonDemo02();
        return singleTon;
    }
}
发布了58 篇原创文章 · 获赞 7 · 访问量 2265

猜你喜欢

转载自blog.csdn.net/weixin_42492089/article/details/104304873