servlet和jsp中的问题:
一、说说jetty与tomcat的区别。
Jetty和Tomcat为目前全球范围内最著名的两款开源的webserver/servlet容器。它们有相似的地方,又有很多不同之处。
相同点:
- tomcat和jetty都是一种servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。
不同点:
- Jetty服务器相比于Tomcat服务器来说是一种轻量级的服务器,速度比较快,比较灵活,但不适合做大型项目开放。默认使用 utf-8 字符集,所以不会出现中文乱码的问题。
- Tomcat是一个比较传统的web服务器,功能更强大,适合做大中型项目开发,默认使用 ISO_8859_1 字符集,会出现中文乱码的问题。
Tomcat 中文乱码的解决方案:
- request.setCharacterEncoding(),设置编码的属性值。
- 使用过滤器。(推荐使用过滤器)但过滤器只能解决 post 请求的乱码。
- 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;
}
}