Java面试题 Servlet & JSP & Tomcat

Java面试题

Servlet & JSP & Tomcat部分

1.浏览器输入URL到页面加载经历了哪些过程?

1、输入网址
2、DNS解析:域名解析,其实就是根据用户输入的网址去寻找它对应的IP地址
3、建立tcp连接:浏览器向 web 服务器发送一个 HTTP 请求(TCP三次握手,四次挥手)
4、客户端发送HTPP请求:
5、服务器处理请求:(服务器的永久重定向响应,浏览器跟踪重定向地址)
6、服务器响应请求:服务器返回一个 HTTP 响应
7、浏览器展示HTML
8、浏览器发送请求获取其他在HTML中的资源。

2.简述Servlet生命周期

(1)加载和实例化:当Servlet容器启动或客户端发送一个请求时,Servlet容器会查找内存中是否存在该Servlet实例,若存在,则直接读取该实例响应请求;如果不存在,就创建一个Servlet实例。
(2) 初始化:实例化后,Servlet容器将调用Servlet的init()方法进行初始化(一些准备工作或资源预加载工作)。
(3) 请求处理:初始化后,Servlet处于能响应请求的就绪状态。当接收到客户端请求时,调用service()的方法处理客户端请求,HttpServlet的service()方法会根据不同的请求 转调不同的doXxx()方法。
(4) 销毁: 当Servlet容器关闭时,Servlet实例也随时销毁。其间,Servlet容器会调用Servlet 的destroy()方法去判断该Servlet是否应当被释放(或回收资源)。

3.Forward(转发)和redirect(重定向)的区别

1.从地址栏显示来说:
forword是服务器内部的重定向,服务器直接访问目标地址的 url网址,把里面的东西读取出来,但是客户端并不知道,因此用forward的话,客户端浏览器的网址是不会发生变化的。
redirect是服务器根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的地址。
2.从数据共享来说:
由于在整个定向的过程中用的是同一个request,因此forward会将request的信息带到被重定向的jsp或者servlet中使用。即可以共享数据
redirect不能共享
3.从运用的地方来说
forword 一般用于用户登录的时候,根据角色转发到相应的模块
redirect一般用于用户注销登录时返回主页面或者跳转到其他网站
4.从效率来说:
forword效率高,而redirect效率低
5.从本质来说:
forword转发是服务器上的行为,而redirect重定向是客户端的行为
6.从请求的次数来说:
forword只有一次请求;而redirect有两次请求,

4.什么是cookie?Session和cookie有什么区别?

cookie和session都是回话跟踪技术。
cookie是Web服务器发送给浏览器的一块信息。浏览器会在本地文件中给每一个Web服务器存储cookie。以后浏览器在给特定的Web服务器发请求的时候,同时会发送所有为该服务器存储的cookie。
session是另一种记录客户状态的机制。不同的是cookie保存在客户端浏览器中,而session保存在服务器上。客户端浏览器访问服务器的时候,服务器把客户端信息以某种形式记录在服务器上,这就是session。客户端浏览器再次访问时只需要从该session中查找该客户的状态就可以了。
session对象是在服务器内存中的,而基于窗口的cookie是在客户端内存中的。
cookie不是很安全,别人可以分析存放在本地的cookie,进行cookie欺骗;session会在一定时间内保存在服务器上,当访问增多,会占用服务器性能
cookie保存数据不能超过4k,很多浏览器都限制一个站点最多存放20个cookie。session是域对象cookie不是域对象

5.什么是监听器,有什么作用

web监听器是一种Servlet中的特殊的类,它们能帮助开发者监听web中的特定事件,比如application、session、request三个对象的创建和销毁;变量的创建、销毁和修改等。可以在某些动作前后增加处理,实现监控
ServletContextListener:对Servlet上下文的创建和销毁进行监听。
ServletContextAttributeListener:监听Servlet上下文属性的添加、删除和修改。
HttpSessionListener:对Session的创建和销毁进行监听。
HttpSessionAttributeListener:对Session对象中属性的添加、删除和修改进行监听。
ServletRequestListener:对请求对象的初始化和销毁进行监听。
ServletRequestAttributeListener:对请求对象属性的添加、删除和修改进行监听。
监听器常用的用途:
  通常使用Web监听器做以下的内容:
  统计在线人数,利用HttpSessionLisener
  加载初始化信息:利用ServletContextListener
  统计网站访问量
  实现访问监控

6.什么是过滤器,有什么作用
过滤器顾名思义就是进行过滤的,可以实现代码的定向执行和预处理。

通俗回点说法filter相当于加油站,答request是条路,response是条路,目的地是servlet,这个加油站设在什么地方对什么数据操作可以由你来控制。
Java Web开发中的过滤器(filter)是从Servlet 2.3规范开始增加的功能,并在Servlet 2.4规范中得到增强。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和服务器之间的请求与响应信息,并对这些信息进行过滤。当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联。如果有,那么容器将把请求交给过滤器进行处理。在过滤器中,你可以改变请求的内容,或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出响应时,容器同样会将响应先转发给过滤器,在过滤器中你可以对响应的内容进行转换,然后再将响应发送到客户端。
常见的过滤器用途主要包括:对用户请求进行统一认证、对用户的访问请求进行记录和审核、对用户发送的数据进行过滤或替换、转换图象格式、对响应内容进行压缩以减少传输量、对请求或响应进行加解密处理、触发资源访问事件、对XML的输出应用XSLT等。

7.JSP静态包含和动态包含的区别
 语法:
 		静态包含:<%@ include file=""%>
		动态包含:<jsp: include page=""%>

静态包含是编译时包含,如果包含的页面不存在则会产生编译错误,而且两个页面的"contentType"属性应保持一致,因为两个页面会合二为一,只产生一个class文件,因此被包含页面发生的变动在包含它的页面更新前不会得到更新。动态包含是运行时包含,可以向被包含的页面传递参数,包含页面和被包含页面是独立的,会编译出两个class文件,如果被包含的页面不存在,不会产生编译错误,也不影响页面其他部分的执行。

8.JSP的内置对象和作用

JSP一共有九个内置对象,分别为:request、response、session、application、out、pagecontext、config、page、exception
1、request 对象
request 对象是javax.servlet.http.HttpServletRequest类型的对象,代表客户端的请求信息,主要用于获取客户端的参数和流。
主要方法:
(1) String getMethod() //获得提交方式
(2) String getRequestURI() //获得请求的URL地址
(3) String getProtocol() // 得到协议名称
(4) String getServletPath() //获得客户端请求服务器文件的路径
(5) String getQueryString() //获得URL的查询部分,post方法获得不到信息
(6) String getServerName() //得到服务器的名称
(7) String getServerPort() //获得服务器口号
(8) String getRemoteAddr() //得到客户端的IP地址
(9) String getParameter(String name) //获得客户端传给服务器的name参数的值

2、response 对象
response 对象和request是一对相应的内置对象,代表对客户端的响应
主要方法:
(1) response.sendRedirect(目标页面路径); //重定向
(2) response.setHeader(String,String); //设置HTTP头
3、session 对象
session 对象是由服务器自动创建的与请求相关的对象,服务器为每个用户都生成一个session对象,用于保存该用户的信息,跟踪用户的操作状态。session内部使用Map来保存数据,即key-value对
主要方法:
(1) session.setAttribute(String,Object); //给Object命名String,加入session
(2) session.getAttribute(String); //取名为String的session的值
(3) session.removeAttribute(String); //将名为String的内容从session中移除 
4、application 对象
application 对象是javax.servlet.ServletContext类型的对象,可将信息保存在服务器中,直到服务器关闭,否则application对象中保存的信息会整个应用中都有。
5、out 对象
out 对象用于Web浏览器内输出信息,负责管理对客户端的输出。并且管理应用服务器上的输出缓冲区。在使用out对象输出数据时,可以对数据缓冲区进行操作,及时清理缓冲区中的残留数据。
6、pageContext 对象
pageContext 对象的作用是取得任何范围的参数,通过它可以获取 JSP页面的out、request、reponse、session、application 等对象。pageContext对象的创建和初始化都是由容器来完成的,在JSP页面中可以直接使用 pageContext对象。
7、config 对象
config 对象是javax.servlet.ServletConfig类的实例对象。主要作用是取得服务器的配置信息。通过 pageConext对象的 getServletConfig() 方法可以获取一个config对象。当一个Servlet 初始化时,容器把某些信息通过 config对象传递给这个 Servlet。 开发者可以在web.xml 文件中为应用程序环境中的Servlet程序和JSP页面提供初始化参数。
8、page 对象
page 对象代表JSP本身,只有在JSP页面内才是合法的。 它是java.lang.Object类的实例化对象。page隐含对象本质上包含当前 Servlet接口引用的变量,类似于Java编程中的 this 指针。
9、exception 对象
exception 对象的作用是显示异常信息,只有在包含 isErrorPage=”true” 的页面中才可以被使用,在一般的JSP页面中使用该对象将无法编译JSP文件。excepation对象和Java的所有对象一样,都具有系统提供的继承结构。

9.Servlet和JSP的联系和区别

简单的说,SUN首先发展出SERVLET,其功能比较强劲,体系设计也很先进,只是,它输出HTML语句还是采用了老的CGI方式,是一句一句输出,所以,编写和修改HTML非常不方便。 后来SUN推出了类似于ASP的镶嵌型的JSP,把JSP TAG镶嵌到HTML语句中,这样,就大大简化和方便了网页的设计和修改。新型的网络语言如ASP,PHP,JSP都是镶嵌型的SCRIPT语言。
1、JSP在本质上就是SERVLET,但是两者的创建方式不一样.
2、Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
3、JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
1、JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
2、JSP编译后是“类servlet”。
3、Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件。
4、JSP侧重于视图,Servlet主要用于控制逻辑。
(Servlet:获取请求数据和处理数据非常方便;但是向页面输出并显示数据(html标签)非常麻烦,毫无格式!
jsp:显示数据非常方便,像html格式一样;但是封装数据和处理数据比较麻烦。)

10.get和post的区别

1、url可见性:
get,参数url可见;
post,url参数不可见
2、数据传输上:
get,通过拼接url进行传递参数;
post,通过body体传输参数
3、缓存性:
get请求是可以缓存的
post请求不可以缓存
4、后退页面的反应
get请求页面后退时,不产生影响
post请求页面后退时,会重新提交请求
5、传输数据的大小
get一般传输数据大小不超过2k-4k(根据浏览器不同,限制不一样,但相差不大)
post请求传输数据的大小根据php.ini 配置文件设定,也可以无限大。
6、安全性
这个也是最不好分析的,原则上post肯定要比get安全,毕竟传输参数时url不可见,但也挡不住部分人闲的没事在那抓包玩。安全性个人觉得是没多大区别的,防君子不防小人就是这个道理。对传递的参数进行加密,其实都一样。

11.web.xml 的作用

web.xml文件是用来配置:欢迎页、servlet、filter等的。当你的web工程没用到这些时,你可以不用web.xml文件来配置你的web工程。web.xml的模式(Schema)文件中定义了多少种标签元素,web.xml中就可以出现它的模式文件所定义的标签元素,它就能拥有定义出来的那些功能。web.xml的模式文件是由Sun公司定义的,每个web.xml文件的根元素中,都必须标明这个web.xml使用的是哪个模式文件
下面列出web.xml常用的标签元素及这些标签元素的功能:
1、指定欢迎页面
2、命名与定制URL(servlet,servlet-mapping)。我们可以为Servlet和JSP文件命名并定制URL,其中定制URL是依赖一命名的,命名必须在定制URL前
3、定制初始化参数:可以定制servlet、JSP、Context的初始化参数,然后可以再servlet、JSP、Context中获取这些参数值。
4、指定错误处理页面,可以通过“异常类型”或“错误码”来指定错误处理页面。
5、设置过滤器:比如设置一个编码过滤器,过滤所有资源:
6、设置监听器:用web工程来实例化spring容器用的就是一个监听器
7、设置会话(Session)过期时间,其中时间以分钟为单位,假如设置30分钟超时:

12.Tomcat的缺省端口是多少,怎么修改

Tomcat的缺省端口号是8080.
修改Tomcat端口号:
1.找到Tomcat目录下的conf文件夹
2.进入conf文件夹里面找到server.xml文件
3.打开server.xml文件
4.在server.xml文件里面找到下列信息

<Connector port=”8080″
maxThreads=”150″ minSpareThreads=”25″ maxSpareThreads=”75″
enableLookups=”false” redirectPort=”8443″ acceptCount=”100″
connectionTimeout=”20000″ disableUploadTimeout=”true” />
5.把port=”8080″改成port=”8888″,并且保存
6.启动Tomcat,并且在IE浏览器里面的地址栏输入http://127.0.0.1:8888/
13.Tomcat有哪几种部署方式

第一种:
非常简单,直接将 web 项目文件(一般是复制生成的war包)复制到tomcat的webapps目录中。
第二种:
在本地tomcat的conf目录中,新建Catalina/localhost目录(这里要注意文件名的大小写),然后在该目录下新建一个xml文件,名字不可以随意取,要和path后 的名字一致,我这里就应该是jstore.xml文件,它的具体内容为:

<Context docBase="C:\work\jstore\web" path="/jstore" reloadable="true"/>

第三种:
在tomcat中的conf目录下的server.xml文件中,在节点中添加一个context,具体为:

<Context Path="/jstore"Docbase="C:\work\jstore\WebContent" Debug="0" Privileged="True" Reloadable="True"></Context>	

这里的 Reloadable= “true” 这个属性是指tomcat在运行状态下会自动检测应用程序的WEB-INF/classes和WEB-INF/lib目录下的class文件,如果监测到有class文件有改动,服务器自动加载新的web应用程序,可以在不重起tomcat的情况下改变应用程序,也就是热部署;一般我们会在开发阶段将Reloadable属性设为true,有助于调试servlet和其它的class文件,但是由于这样会增加服务器的运行负荷,损耗系统性能,在项目运行阶段建议将它设为false。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值