Servlet+JSP及Tomcat常见面试题(面试必备)

1、  什么是servlet?
servlet是用来处理客户端请求并产生动态网页内容的java类

2、  Tomcat的缺省端口是多少,怎么修改?

a)      默认端口号是8080

b)      修改步骤:

                 i.          打开tomcat的安装目录,找到conf文件

                ii.          找到其中的server.xml,打开后找到其中的

<connector connectionTimeout=”20000” port=”8080”

改变其中的8080就可以了

3、  Tomcat有哪几种Connector运行模式(优化)?

a)      BIO

                 i.          一个线程处理一个请求,缺点:并发量高的时候,线程数较多,浪费资源

Tomcat7或以下,在Linux系统中默认使用这种方式

b)      NIO

                 i.          利用java的异步IO处理,可以通过少量的线程处理大量的请求
Tomcat8在Linux系统中默认使用这种方式。
Tomcat7必须修改Connector配置来启动
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"

         connectionTimeout="20000" redirectPort="8443"/>

c)      APR

                 i.          即Apache Portable Runtime,从操作系统层面解决IO阻塞问题
Tomcat7或Tomcat8在Win7或以上的系统中启动默认使用这种方式
Linux如果安装了apr和native,Tomcat直接启动就支持apr。

4、  Tomcat有几种部署方式?

a)      第一种:直接将web项目文件拷贝到webapps目录中

b)      第二种:修改sercer.xml文件。在conf下的server.xml文件里找到Host标签,在里面添加如下代码:
<Context path="/jfinal_demo" docBase="F:\work\jfinal_demo\WebRoot"  reloadable ="true" debug="0" privileged="true"></Context>

c)      第三种:在conf\Catalina\localhost目录下添加xml配置文件
新建名为jfinal_demo.xml文件,文件内容配置如下:
<Context path="/jfinal_demo" docBase="F:\work\jfinal_demo\WebRoot"  reloadable ="true" debug="0" privileged="true"></Context>

5、  Servlet生命周期

a)      加载Servlet
web容器负责加载servlet,当web容器启动时或者是在第一次使用这个servlet时,容器会负责创建servlet实例

b)       初始化
当一个servlet加载后,容器将调用init()方法初始化这个对象,初始化的目的是为了让servlet在处理客户端请求前完成一些初始化的工作

c)      请求处理
当有请求提交时,servlet将调用service()方法进行处理客户端请求,并且会根据不同的请求调用不同的doGet()或doPost()方法

d)      销毁
当web容器关闭或检测到一个servlet实例要从服务器中被移除时,容器就会调用destroy()方法,以便让该实例释放掉所占用的资源

6、  Get()与post()的区别?

a)      Get是向服务器发送、索取数据的一种请求,而post是向服务器提交数据的一种请求

b)      Get方式传递数据安全性较低,post方式比较安全。但是post方式的执行效率比get方式要差一些

c)      Get请求方式将请求信息放在URL后面,请求信息和URL之间以“?”隔开,这种请求方式直接将请求信息暴露在URL中;
post请求方式将请求信息放置在报文体中,想获得请求信息必须解析报文

7、  doGet与doPost方法的两个参数是什么?什么情况下调用

a)      HttpServletRequest和HttpServletResponse

b)      JSP页面中的form标签里的method属性为get时调用doGet()为post时调用doPost();超链接跳转页面时调动的是doGet()

8、  获取页面的元素的值有几种方式?分别说一下

a)      用<input>输入域提交参数

b)      request.setAttribute();在下个页面直接request.getAttriute()得到

c)      <jsp:forward=”你要跳转的页面”>
<jsp:param>你要传递的参数

d)      用session域对象

e)      url?a=””&b=””

9、  request.getAttribute()和request.getParameter()区别

a)      都是HttpServletRequest中的方法,用来传递数据的

b)      getParameter():响应的是web客户端向web服务端通过点击链接或提交按钮传递数据,代表HTTP请求数据;获取的是post/get传递的参数值
    getAttribute():是获取对象容器中的数据,获取的是session的值

c)      getParameter():只能得到String类型数据
    getAttribute():可以接受String类型,也可以是对象

10、         forward(转发)和redirect(重定向)的区别

a)      forward:requset.getRequsetDispatcher(“/***.jsp”).forward(request,response)
    redirect:response.sendRedirect(“/***.jsp”)

b)      forward是服务器端发起的请求;redirect是客户端发起的请求;

c)      forward只有一次请求;redirect会产生2次请求。

d)      forward数据会同时转发过去;redirect数据不会同时传递过去。

11、         什么是cookie?什么是session?session和cookie的区别

a)      Cookie是客户端保存用户信息的一种机制,用来记录用户的一些信息,它的过期时间可以任意设置,如果不主动清除,很长一段时间都能保留

b)      Session是在无状态的HTTP协议下,服务端记录用户状态时用于标识具体用户的机制,它是在服务端保存的用来跟踪用户的状态的数据结构,可以保存在文件、数据库、或者集群中。

c)      他们都是一种会话技术,区别如下

                 i.          Session:
        数据存放在服务端,安全(只存放和状态相关的)
        session不仅仅是存放字符串,还可以存放对象
        session是域对象(session本身是不能跨域的,但可以通过相应技术来解决)
        sessionID的传输默认是需要cookie支持的

                ii.          Cookie
        数据存放在客户端,不安全(存放的数据一定是和安全无关紧要的数据)
        cookie只能存放字符串,不能存放对象
        cookie不是域对象(Cookie是支持跨域的)

12、         Tomcat是如何创建servlet类实例?用到了什么原理

a)      当tomcat启动时,会读取在webapps目录下所有的web应用中的web.xml文件。然后对xml文件进行解析,并读取servlet注册信息。然后将每个应用中注册的servlet类都进行加载,并通过反射的方式实例化

13、         Servlet安全性问题

a)      因为servlet是单列模式创建的,只实例化一次,同一个servlet可以处理多个用户请求,当同时有两个用户访问时,则会启动两个负责处理请求的servlet线程,所以会出现线程安全问题

b)      解决方案:

                 i.          在servlet中定义变量时,尽量都定义局部变量。在servlet中负责保存上下文ServletContext和负责处理session对象的HttpSession是线程不安全的,而负责处理请求的servletRequest是线程安全的

                ii.          加锁:用synchronized进行保护,但是要尽量的缩小保护范围

14、         JSP与servlet的区别

a)      JSP本质上就是一个简易的servlet,Web容器将JSP代码编译成JVM能识别的java类

b)      Jsp更擅长表现于页面显示,servlet更擅长于逻辑控制

15、         JSP的内置对象有哪些,作用是什么

a)      Request :本质上就是HttpServletRequest,包含用户端请求的信息,就是请求对象

b)      Response :本质上就是HttpServletResponse,包含服务器传回客户端的响应信息,就是响应对象

c)      Session : 是HttpSession,是一个会话对象,主要用于保存状态

d)      Application : 是servletContext,指的的整个web应用

e)      Page : 指整个jsp页面,类似this伪对象

f)       PageContext : 主要用于管理整个jsp页面

g)      Exception : 异常对象,jsp页面上的异常都会封装在这里面

h)      Config : 本质上就是servletConfig对象

i)       Out :主要用于输出数据

16、         JavaWeb中四大域对象及作用范围

a)      PageContext : 作用范围在整个页面(一个页面)

b)      HttpRequest : 作用范围在一次请求

c)      HttpSession : 这是JavaWeb的一种会话机制,作用在整个会话中

d)      ServletContext :作用范围在整个web应用

17、 JSP和HTML之间的关系

a)      JSP是简单的servlet,是在服务端执行的,通常返回客户端的是一个HTML文本

18、 JSP静态包含和动态包含的区别

a)      静态包含:<%@ include file=”被包含的页面” %>
    动态包含:<jsp:include page=”被包含的页面” flush=“true” >

b)      静态包含在翻译的时候,将多个JSP翻译成一个servlet
    动态包含在翻译的时候,将多个JSP翻译成多个servlet,在程序运行加载到JVM中的时候,动态合并,动态包含可以传递数据

c)      静态包含,编辑器引入,先包含在运行
    动态包含,运行期引入,先运行,把结果引入

19、 JSP是如何被执行的?执行效率会比servlet低嘛?

a)      JSP本质上是一个简单的servlet,在执行JSP的时候,会被转译成一个*_jsp.java的java文件,然后再跟寻常的java文件一样被解析成一个class文件,最后被jre执行

b)      与servlet相比,第一次执行效率比较低,因为第一次会被转化为servlet,之后执行效率都相同

20、 JSP和servlet的区别、共同点、各自应用的范围?

a)      JSP在本质上就是servlet,但两者的创建方式不一样,servlet完全是java程序代码构成擅长于流程控制和事务处理而通过的servlet类生成动态网页;JSP由HTML代码和JSP标签构成,可以方便的编写动态网页

b)      采用Servlet来控制业务流程;用JSP来生成动态网页

21、 如何避免JSP页面自动生成Session对象?为什么要这么做?

a)      <%@ page session=”false”>

b)      在默认情况下,在对一个JSP页面发出请求时,如果session还没建立,JSP页面会自动为请求建立一个Session对象,但是session是比较消耗资源的,如果没有必要保持和使用session,就不应该创建session

22、 自定义标签要继承哪个类

a)      可以继承TagSupport或者BodyTagSuppot,两者的差别是前者适用于没有主题的标签,而后者适用于有主题的标签

b)      若选择TagSupport,可以实现doStartTag和doEndTag这两个方法实现Tag的功能;如果选择继承BodyTagSupport,可以实现doAfterBody这个方法

转载于:https://www.cnblogs.com/wgc-blog/p/10446039.html

常考面试题 1.讲下servlet的执行流程。 Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》 方法初始化servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁。 2.Get和Post的区别 在页面提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显示,post不显示,所以post比get安全. 3.有三台服务器,如果在一台服务器上登陆了这个用户,其他两台就不能再登陆这个用户,使用session共享,你是怎么做的。 把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。 4.写一个自定义标签要继承什么类 SimpleTagSupport,一般调用doTag方法 或者实现SimpleTag接口 5.Jsp如何处理json 在 jsp 中处理 JSON,通常需要配套使用 JQuery 控件,并且导入一些 Common jar 包。 使用 JQuery 控件是因为它能有效的解析并且展示 JSON 数据, 导入Common 则是因为 Java 中的对象并不是纯粹的数据,需要通过这些 Jar 包的处理使之转化成真实数据。 6.如何处理Servlet的线程不安全问题 1.最简单的就是不使用字段变量, 2.使用final修饰变量, 3.线程安全就是多线程操作同一个对象不会有问题,线程同步一般来保护线程安全, 所以可以在Servlet的线程里面加上同步方法或同步块。 (Synchronized)可以保证在同一时间只有一个线程访问,(使用同步块会导致性能变差,最好不去使用实例变量) 7.Jsp的重定向和转发的流程有什么区别 重定向是客户端行为,转发是服务器端行为 重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发 重定向会导致request对象信息丢失。转发则不会 转发的url不会变,request.getRequestDispatch().forward() 重定向的url会改变,response.getRedirect().sendRedirect();
tomcat 有哪几种 Connector 运行模式(优化)? bio:传统的 Java I/O 操作,同步且阻塞 IO。 maxThreads=”150”//Tomcat 使用线程来处理接收的每个请求。这个值表示 Tomcat 可创建的最大的线程数。默认值 200。可以根据机器的时期性能和内存 大小调整,一般可以在 400-500。最大可以在 800 左右。 minSpareThreads=”25”—Tomcat 初始化时创建的线程数。默认值 4。如果 当前没有空闲线程,且没有超过 maxThreads,一次性创建的空闲线程数量。 Tomcat 初始化时创建的线程数量也由此值设置。 maxSpareThreads=”75”–一旦创建的线程超过这个值,Tomcat 就会关闭不 再需要的 socket 线程。默认值 50。一旦创建的线程超过此数值,Tomcat 会关 闭不再需要的线程。线程数可以大致上用 “同时在线人数每秒用户操作次数系 统平均操作时间” 来计算。 acceptCount=”100”—-指定当所有可以使用的处理请求的线程数都被使用 时,可以放到处理队列中的请求数,超过这个数的请求将不予处理。默认值 10。如果当前可用线程数为 0,则将请求放入处理队列中。这个值限定了请求 队列的大小,超过这个数值的请求将不予处理。 connectionTimeout=”20000” –网络连接超时,默认值 20000,单位:毫 秒。设置为 0 表示永不超时,这样设置有隐患的。通常可设置为 30000 毫秒。 nio:JDK1.4 开始支持,同步阻塞或同步非阻塞 IO。 指定使用 NIO 模型来接受 HTTP 请求 protocol=”org.apache.coyote.http11.Http11NioProtocol” 指定使用 NIO 模型 来接受 HTTP 请求。默认是 BlockingIO,配置为 protocol=”HTTP/1.1” acceptorThreadCount=”2” 使用 NIO 模型时接收线程的数目 aio(nio.2):JDK7 开始支持,异步非阻塞 IO。 apr:Tomcat 将以 JNI 的形式调用 Apache HTTP 服务器的核心动态链接库来 处理文件读取或网络传输操作,从而大大地 提高 Tomcat 对静态文件的处理性 能。 <!-- --> 其他配置 maxHttpHeaderSize="8192" http 请求头信息的最大程度,超过此长度的部分 不予处理。一般 8K。 URIEncoding="UTF-8" 指定 Tomcat 容器的 URL 编码格式。 disableUploadTimeout="true" 上传时是否使用超时机制 enableLookups="false"--是否反查域名,默认值为 true。为了提高处理能力, 应设置为 false compression="on" 打开压缩功能 compressionMinSize="10240" 启用压缩的输出内容大小,默认为 2KB noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用 压缩 compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些资源类型需要压缩 3、Tomcat 有几种部署方式? 1)直接把 Web 项目放在 webapps 下,Tomcat 会自动将其部署 2)在 server.xml 文件上配置节点,设置相关的属性即可 3)通过 Catalina 来进行配置:进入到 conf\Catalina\localhost 文件下,创建一个 xml 文件,该文件的名字就是站点的名字。 编写 XML 的方式来进行设置。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值