JSP和Servlet常见面试题

1. Servlet的生命周期?

  1. 装载Servlet类并创建实例阶段,该阶段在默认情况下发生在客户端第一次向服务器端发送请求
  2. 初始化阶段,servlet实例创建完成后,调用init(ServletConfig config)方法对该实例完成初始化工作
  3. 服务阶段,根据Http请求方式,调用service()方法中对应的doGet()或doPost()方法,并将响应结果返回
  4. 销毁阶段,当服务器关闭或Servlet容器重新装载Servlet类等情况时,调用destroy()方法释放Servlet所占用的资源

2. JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?

  1. JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。
  2. JSP编译后是"类servlet"。
  3. Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。
  4. JSP侧重于视图,Servlet主要用于控制逻辑。

3.forward() 与redirect()的区别?

  1. forward():转发;redirect():重定向
  2. 从地址栏显示来说 :
    1. forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址
    2. redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,所以地址栏显示的是新的URL.
  3. 从数据共享来说
    1. forward:转发页面和转发到的页面可以共享request里面的数据.
    2. redirect:不能共享数据.
  4. 从运用地方来说
    1. forward:一般用于用户登陆的时候,根据角色转发到相应的模块.
    2. redirect:一般用于用户注销登陆时返回主页面和跳转到其它的网站等.
  5. 从效率来说
    1. forward:高.
    2. redirect:低.

4. get提交和post提交有何区别?

  1. get一般用于从服务器上获取数据,post一般用于向服务器传送数据

  2. 请求的时候参数的位置有区别:

    1. get的参数是拼接在url后面,用户在浏览器地址栏可以看到
    2. post是放在http包的包体中,比如说用户注册,你不能把用户提交的注册信息用get的方式吧,那不是说把用户的注册信息都显示在Url上了吗,是不安全的
  3. 能提交的数据有区别:

    1. get方式能提交的数据只能是文本,且大小不超过1024个字节
    2. post不仅可以提交文本还有二进制文件,所以说想上传文件的话,那我们就需要使用post请求方式
  4. servlet在处理请求的时候分别对应使用doGet和doPost方式进行处理请求

  5. 如果不指定名method,则默认为get请求

5. JSP有哪些内置对象,作用是什么?

在这里插入图片描述

6.servlet和javaScript的区别,他们分别是什么作用

  1. 一个是服务端,一个是客户端
  2. Servlet是独立于平台和协议的服务器端的java应用程序,可以动态生成web页面,并采用响应–请求的模式提供web服务
  3. javaScript是一种解释性语言,用于向html页面提供交互行为,通常被直接嵌入在html页面中
  4. servlet是java语言编写的web应用
  5. js是基于html上的一种解释语言

7. Applet和Servlet有什么区别?

  1. Applet是运行在客户端主机的浏览器上的客户端Java程序
  2. Servlet是运行在web服务器上的服务端的组件
  3. Applet可以使用用户界面类,而Servlet没有用户界面,相反,Servlet是等待客户端的HTTP请求,然后为请求产生响应

8. JSP的九大内置对象,三大指令,七大动作的具体功能?

1. 九大内置对象
  1. request:对当前请求进行封装
  2. response:返回服务器端信息给用户
  3. session:浏览器会话对象,浏览器范围内有效
  4. application:应用程序对象,对整个web工程都有效
  5. page:当前页面对象,也就是this
  6. pageContext:只对当前jsp页面有效,里面封装了基本的request和session的对象
  7. out:页面打印对象,在jsp页面打印字符串
  8. config:单个servlet的配置对象,相当于servletConfig对象
  9. exception:错误页面的exception对象,如果指定的是错误页面,这个就是异常对象
2. 三大指令
  1. Page:指令是针对当前页面的指令
  2. Include:用于指定如何包含另一个页面
  3. Taglib:用于定义和指定自定义标签
3. 七大动作
  1. Forward:执行页面跳转,将请求的处理转发到另一个页面
  2. Param:用于传递参数
  3. Include:用于动态引入一个jsp页面
  4. Plugin:用于下载javaBean或applet到客户端执行
  5. useBean:使用javaBean
  6. setProperty:修改javaBean实例的属性值
  7. getProperty:获取javaBean实例的属性值

9. Servlet执行时一般实现哪几个方法?

  1. public void init(ServletConfig config)
  2. public ServletConfig getServletConfig()
  3. public String getServletInfo()
  4. public void service(ServletRequest request,ServletResponse response)
  5. public void destroy()

10. Servlet和CGI的区别?

  1. Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法
  2. 与cgi的区别在于servlet处理服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet

11. 如何现实Servlet的单线程模式?

  1. 在doGet及doPost方法前加入synchoronized
  2. JSP:<%@ page isThreadSafe=“true”%>

12. Request对象的主要方法?

  1. setAttribute(String name,Object):设置名字为name的request的参数值
  2. getAttribute(String name):返回由name指定的属性值
    getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例
  3. getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组
  4. getCharacterEncoding():返回请求中的字符编码方式
  5. getContentLength():返回请求的Body的长度
  6. getInputStream():返回请求的输入流,用于获得请求中的数据
  7. getMethod():获得客户端向服务器端传送数据的方法
  8. getParameter(String name):获得客户端传送给服务器端的有name指定的参数值
  9. getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例
  10. getParameterValues(String name):获得有name指定的参数的所有值
  11. getProtocol():获取客户端向服务器端传送数据所依据的协议名称
  12. getQueryString():获得查询字符串
  13. getRequestURI():获取发出请求字符串的客户端地址
  14. getRemoteAddr():获取客户端的IP地址
  15. getRemoteHost():获取客户端的名字
  16. getSession([Boolean create]):返回和请求相关Session
  17. getServerName():获取服务器的名字
  18. getServletPath():获取客户端所请求的脚本文件的路径
  19. getServerPort():获取服务器的端口号
  20. removeAttribute(String name):删除请求中的一个属性

13. JSP四种会话跟踪技术是什么?

会话跟踪技术是用于维持客户端和服务器端通信的技术

  1. cookie
  2. url重写
  3. session
  4. 隐藏表单域

14. JSP四个作用域是什么?

  1. page域 数据在一个页面范围内有效,通过pageContext对象访问
  2. request域 数据在一个服务器请求范围内有效,通过request对象访问
  3. session域 数据在一次会话范围内容有效,通过session对象访问
  4. application域 数据在一个应用服务器范围内有效,通过application对象访问

15. 说说Cookie和Session的区别?

  1. Cookie和Session都是会话技术,Cookie是运行在客户端,Session是运行在服务器端。
  2. Cookie有大小限制以及浏览器在存cookie的个数也有限制,Session是没有大小限制和服务器的内存大小有关。
  3. Cookie有安全隐患,通过拦截或本地文件找得到你的cookie后可以进行攻击。
  4. Session是保存在服务器端上会存在一段时间才会消失,如果session过多会增加服务器的压力。
常考面试题 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();
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值