zoukankan      html  css  js  c++  java
  • jsp和servlet面试

    1.讲下servlet的执行流程。doGet和doPost的区别

      Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》方法初始化servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁。
    doGet和doPost都是接受用户请求的方法,doGet处理get请求,doPost处理post请求,doGet用于地址栏提交,doPost用于表单提交,在页面提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显示,post不显示,所以post比get安全.
    

    2.当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的。

    会出现线程不安全问题。无论是doGet还是doPost去调用,服务器端处理的过程都是一样的,那么我们可以把处理过程单独写在另外一个方法handle里,让两个方法都去调用handle,根据不同请求去调用不同的方法。
    

    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的线程不安全问题

    线程安全就是多线程操作同一个对象不会有问题,线程同步一般来保护线程安全,所以可以在Servlet的线程里面加上同步方法或同步块。(Synchronized)可以保证在同一时间只有一个线程访问,(使用同步块会导致性能变差,最好不去使用实例变量)
    

    7.Jsp的重定向和转发的流程有什么区别

    重定向是客户端行为,转发是服务器端行为
    重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发
    重定向会导致request对象信息丢失。转发则不会
    转发的url不会变,request.getRequestDispatch()。forward()
    重定向的url会改变,response.getRedirect();
    

    8.Jsp和servlet的区别

    jsp的可读性强,容易维护,并且jsp在最后会编译成servlet
    servlet容易调试
    

    9.下面符合jsp代码的是:3

    1).Var a = document.getElemetnById("id");
    2).Var a = document.getElementById("name");
    3).If(course("如果是对的")return false
    4).for(int i=0;i<10;i++){}

    10.jsp可以操作窗口吗?

    Jsp不能够直接调用窗口,只能先 生成打开窗口的js,再由js调用
    

    11.session的主要几个方法的区别

    Session不能通过new创建,需要通过调用getSession()或者getSession(true)方法创建,getSession()是自动创建session,getSession(true)是强制创建session,setAttribute()方法可以用于传值,getAttribute()可以用于取值
    (第一次创建session的时候,就是访问第一次一个jsp页面<这个页面的page指令 没有设置session=false>) 
    销毁session调用invalidate方法
    通过setMaxInactiveInterval()可以设定session的生存时间(web.xml可以设置session的生存时间)
    

    12.jsp的九大内置对象,三大指令,七大动作的具体功能

    JSP九大内置对象:

    pageContext :只对当前jsp页面有效,里面封装了基本的request和session的对象
    Request :对当前请求进行封装
    Session :浏览器会话对象,浏览器范围内有效
    Application :应用程序对象,对整个web工程都有效
    Out :页面打印对象,在jsp页面打印字符串
    Response :返回服务器端信息给用户
    Config :单个servlet的配置对象,相当于servletConfig对象
    Page :当前页面对象,也就是this
    Exception :错误页面的exception对象,如果指定的是错误页面,这个就是异常对象

    三大指令:

    Page :指令是针对当前页面的指令
    Include :用于指定如何包含另一个页面
    Taglib :用于定义和指定自定义标签

    七大动作:

    Forward,执行页面跳转,将请求的处理转发到另一个页面
    Param :用于传递参数
    Include :用于动态引入一个jsp页面
    Plugin :用于下载javaBean或applet到客户端执行
    useBean :使用javaBean
    setProperty :修改javaBean实例的属性值
    getProperty :获取javaBean实例的属性值

    13.获取页面的元素和值有几种方式,分别说一下

    request.getParameter() 返回客户端的请求参数与值
    request.getParameterNames() 返回所有可用属性名的枚举
    request.getParameterValues() 返回包含参数的所有值的数组
    

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

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

    15.jsp的执行原理

     客户端发出请求(request),jsp引擎将jsp页面翻译成servlet的java源文件,在Tomcat中将源文件编译成class文件,并加载到内存中执行,把结果返回(response)给客户端。
    

    16.转发http请求一般有两种方法,response.sendRedirect和request.forward。resquest.setAttribute()中设置的值不会丢失?(B)

    A.sendRedirect B.forward C.两个都不能 D.两个都可以
    

    17.HTML和Servlet的异同

    不同:
    Html是静态,servlet是动态
    html页面由服务器直接返回,
    servlet是用来处理客户请求,并返回html页面
    //servlet需要服务器调用servlet方法生成动态html页面,且需要在web.xml中配置url路径

    18.会话跟踪有哪些,他们的区别是什么

    Cookie,session和application,
    Cookie是http对象,客户端与服务端都可以操纵

    cookie是在客户端保持状态,session是在服务器端保持状态,由于cookie是保存在客户端本地的,所以数据很容易被窃取,当访问量很多时,使用session则会降低服务器的性能,application的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此application也是不安全的

    19.session和application的作用

    Session用于客户端与服务器之间保持状态的解决方案,数据保存在服务器内存中,底层是有cookie实现的
    Application的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此application是不安全的
    

     20.说说jsp的隐藏对象有哪些

    Request,out,response , pageContext , session , application , config , page , exception,也即jsp的九大内置对象
    

    21.request ,response,session 和 application是怎么用的

    Request是客户端向服务端发送请求
    Response是服务端对客户端请求做出响应
    Session在servlet中不能直接使用,需要通过getSession()创建,如果没有设定它的生命周期,或者通过invildate()方法销毁,关闭浏览器session就会消失
    Application不能直接创建,存在于服务器的内存中,由服务器创建和销毁
    

    22.为什么在session少放对象

    因为session底层是由cookie实现的,当客户端的cookie被禁用后,session也会失效,且应尽量少向session中保存信息,session的数据保存在服务器端,当有大量session时,会降低服务器的性能
    

    23.服务端怎么判断浏览器是否支持cookie

    可以使用javaScript的方法navigator.cookieEnabled判断浏览器是否支持cookie
    

    24.Request和session的取值区别,以及出现乱码的解决方式(不能在java代码中设置)

    Request可以通过getAttribute()方法直接取值,也可通过getParameter()取值
    Session需要通过request.getSession().getAttribute()才能取值
    Request是针对一次请求,session是针对整个会话
          在页面通过contentType,pageEncoding,content设置编码格式,必须要一致
    

    25.jsp页面跳转

    Jsp页面跳转有两种方式,forward和redirect(转发和重定向)
    Forward只能在当前项目里跳转,只产生一次请求,request保存的变量不会丢失,url地址不会改变
    Redirect可跳转到项目以外的任何页面,产生两次请求,request保存的变量会全部丢失,url地址会发生改变,变化为第二个请求的地址
    

    26说出jsp内置对象以及方法

    Request:客户端发送请求
    setCharacterEncoding(String arg0):设置编码格式
    getCharacterEncoding():获取编码格式
    getRequestDispatcher(String path):返回一个RequestDispatcher对象 
    
    Response:服务器端返回信息给用户
    setAttribute("name",Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
    getAttribute("name"):返回name属性值
    getAttributeNames():返回所有可用属性名的枚举
    setCharacterEncoding(String charset):设置编码格式
    getCharacterEncoding():获取编码格式
    sendRedirect(String location):返回对包装的响应对象调用 
    
    pageContext:网页的属性是在这里管理的
    setAttribute("name",Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
    getAttribute("name"):返回name属性值
    getAttributeNames():返回所有可用属性名的枚举 
    
    Session:与请求有关的会话期
    setAttribute("name",Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
    getAttribute("name"):返回name属性值
    getAttributeNames():返回所有可用属性名的枚举
    invalidate():使当前会话失效
    setMaxInactiveInterval():指定在Servlet容器使此会话失效之前客户端请求之间的时间间隔,以秒为单位。负数时间指示会话永远不会超时
    getMaxInactivelnterval():返回servlet 容器在客户端访问之间将使此会话保持打开状态的最大时间间隔,以秒为单位。在此间隔之后,servlet 容器将使会话无效 
    
    Application:Servlet正在执行的内容
    setAttribute("name",Object obj):设置名字为name的request参数的值,该值是由Object类型的obj指定
    getAttribute("name"):返回name属性值 
    
    Out:用来传送回应的输出
    print():打印信息
    println():换行打印信息 
    
    Config:Servlet的构架部件

    getInitParameter(String paramNarne):从web.xml中获取指定名称的值
    getInitParameterNames():从web.xml中获取所有的名称

    Page:JSP页面本身

    Exception:针对错误网页,未捕捉的例外
    getMessage():返回异常的详细信息
    getClass():返回异常的名称

    27.有几种方式将页面的值传到后台

    可通过form表单的get或post将值传递到后台,也可通过setAttribute()方法将值传递到后台
    

    28.一个form表单的值如何获取

    在servlet中通过request.getParameter()方法可以获取表单的值
    或者是request.getParameterValuse();

    29.传递参数到后台有几种方式

    表单传参,url传参,jquery.ajax传参

    30.Jsp中父页面中怎么拿到子页面的表单元素,不是拿值怎么拿

    通过设置属性setAttribute(),通过getAttribute()拿值,getParameter()方法可以做到
    

    31.定义一个String类型的字符串,如果重定向之后还能不能获得这个数据

    不能
    

    32.404和500是什么意思

    404 :找不到url请求的路径,一般是工程名不对或者拼写错误
    500 :服务器内部错误,一般是服务器内部代码编写错误,也有可能是抛异常导致
    

    33.写出5种JSTL常用标签

    <c:if>,<c:item>,<c:foreach>,<c:out>,<c:set>
    

    34.在项目名和页面路径都没有错的情况下为什么会报404错误,它有什么原理在里面

    工程名不对或者拼写错误,404错误一般是找不到客户端请求的文件

    35.说出servlet的生命周期

    当web服务器启动的时候,servlet生命周期开始,通过init方法初始化servlet,通过不同的请求调用doGet或doPost方法,最后通过destroy()方法进行销毁
    

     36.Jsp页面把一个元素隐藏的方法

    通过使用属性hidden可以将元素隐藏
    

    37.Session,application,cookie的区别

    Session不能通过new创建,要通过调用getSession()方法创建,数据保存在服务器端,单个客户端session是共享的,底层是由cookie实现的,大小没有限制
    Application的作用域是整个工程只有共享一个,生命周期比session大
    Cookie需要通过new创建,数据保存在客户端中,cookie保存的数据不能超过4k,不安全
    

    38.我们在web应用开发过程中经常遇到输出某种编码的字符,如ISO-8859-1,如何输出一个某种编码的字符串

    如将ISO-8859-1输出为GBK格式的字符, 通过new String(byte[] bytes,String charset) 构造器设置编码构造一个新的String(new String("ISO-8859-1","GBK"));
    

    39.Jsp里有那些标签

    jsp:include等
    

     40.怎么判断用户请求时是第一次,如果客户端和服务端断开怎么连到上一次操作

    通过session中的isNew()可以判断是否是新用户
    

    41.请说下会话跟踪技术

    会话跟踪技术是用于维持客户端和服务器端通信的技术。
    通过session,cookie或者application可实现会话跟踪
    

    42.如果创建servlet实例不用构造方法,怎么创建一个servlet实例

    Web容器会自动为servlet写一个无参的构造器,它使用class.forName("").newInstance()反射来创建servlet实例的
    

    43.Servlet是安全的吗?当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的

    是线程不安全的,因为servlet是单例模式,当多个客户端共同访问的时候线程不安全。
    尽量用局部变量,同步块,如果当前字段是不会改变的,用final修饰
    

    44.Servlet和过滤器的区别

    Servlet:是用来处理客户端发送的请求,然后生成响应并将其传给server服务器,
    最后服务器将响应返回给客户端
    
    过滤器:是用于 对servlet容器调用servlet的过程进行拦截
    可以在servlet进行响应处理前后做一些特殊的处理
    

    45说明一下jsp中<jsp: include page..>和<%@ include file%>的区别

    <jsp:include page=""/> 动态导入
      是行为元素、是在请求处理阶段引入的,引入执行页面或servlet所生成的应答文本
    先编译,后包含,就是将每个jsp页面都单独转化成html页面,最后再将所有的html页面相加,如果有相同变量不会冲突
    
    <%@ include file="" %> 静态导入
    是指令元素
    是编译时包含,引入静态文本(html,jsp),在JSP页面被转化成servlet之前和它融和到一起。先包含,后编译
    就是将多个jsp一起解析,最后再一起生成html页面,如果有相同变量会冲突
    

    46. pageContext有什么作用

    可以使用pageContext对象来设定属性,并指定属性的作用范围,提供了对JSP页面内所有的对象及名字空间的访问
    

    48.Servlet是单例还是多例

    是单例的,可以提高性能
    

    49.Filter与拦截器怎么执行的

    首先初始化过滤器,然后服务器组织过滤器链,所有的请求都必须需要先通过过滤器链,
    过滤器链是一个栈,遵循先进后出的原则 ,所有的请求需要经过一个一个的过滤器,执行顺序要根据web.xml里配置的<filter-mapping>的位置前后执行,每个过滤器之间通过chain.doFilter连接, 最后抵达真正请求的资源,执行完后再从过滤器链退出
    

    50.Jsp中如何进行分页,项目中如何进行分页?

    需要上一页和下一页的超链接(至少需要这两个),通过计算当前页的页码获取下一页数据
    的起始位置,然后在 MySql 中查询,如果使用 Oracle 则需要另外计算下一页数据的结
    束位置。
    使用hibernate框架,它可以针对不同的数据库自动产生为你分页的代码。
    
  • 相关阅读:
    Hsl PLC
    .NET平台常用框架整理
    SSH全注解实例详解
    word2vec (CBOW、分层softmax、负采样)
    pandas dataframe 一行变多行 (query pv统计term pv)
    python 按二维数组的某行或列排序 (numpy lexsort)
    基于决策树的分类算法
    【linux】 mail/mutt 发送邮件
    【python】含中文字符串截断
    【python】 判断纯ascii串
  • 原文地址:https://www.cnblogs.com/t0404/p/10291017.html
Copyright © 2011-2022 走看看