zoukankan      html  css  js  c++  java
  • 关于JavaWeb面试

    什么是JavaWeb?

    Java web  是指有Java语言开发出来可以在万维网上访问浏览的程序。

    Java Web,是用Java技术来解决相关web互联网领域的技术总和。web包括:web服务器和web客户端两部分。

    Java在客户端的应用有java applet,不过使用得很少,Java在服务器端的应用非常的丰富,比如Servlet,JSP和第三方框架等等。

    Java技术对Web领域的发展注入了强大的动力。

    1.说出Servlet 的生命周期,并说出Servlet 和CGI 的区别? 【基础】

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

    2.Servlet 的基本架构。【基础】

    答:public class ServletName extends HttpServlet {
    public void doPost(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
    
        }
    
    public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {
    
        }
    }

    3.forward 和redirect 的区别? 【基础】

    答:forward 是容器中控制权的转向,是服务器请求资源,服务器直接访问目标地址的URL,把那个URL 的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以 它的地址栏中还是原来的地址。redirect 就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request 参数都可以获取,并且从浏览器的地址栏中可以看到跳转后的链接地址。前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接;在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。

    4.JSP 中动态INCLUDE 与静态INCLUDE 的区别?【基础】

    答:动态INCLUDE 用jsp:include 动作实现<jsp:include page="included.jsp"flush="true" />它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数;静态INCLUDE 用include 伪码实现,它不会检查所含文件的变化,适用于包含静态页面<%@ include file="included.htm" %>

    5.说出数据连接池的工作机制是什么? 【基础】

    答:J2EE 服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接时,池驱动程序会返回一个未使用的池连接并将其表记为忙。如果当前没有空闲连接,池驱动程序就新建一定数量的连接,新建连接的数量有配置参数决定。当使用的池连接调用完成后,池驱动程序将此连接表记为空闲,其他调用就可以使用这个连接。

    6.JSP 的内置对象及方法?【基础】

    答:request 表示HttpServletRequest 对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header 和session 数据的有用的方法。response 表示HttpServletResponse 对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)。out 对象是javax.jsp.JspWriter 的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。pageContext 表示一个javax.servlet.jsp.PageContext 对象。它是用于方便存取各种范围的名字空间、servlet 相关的对象的API,并且包装了通用的servlet 相关功能的方法。session 表示一个请求的javax.servlet.http.HttpSession 对象。Session可以存贮用户的状态信息。application 表示一个javax.servle.ServletContext 对象。这有助于查找有关servlet 引擎和servlet 环境的信息。config 表示一个javax.servlet.ServletConfig 对象。该对象用于存取servlet 实例的初始化参数。page 表示从该页面产生的一个servlet 实例。

    7.JSP 的常用指令?【基础】

    答:<%@page language=”java” contenType=”text/html;charset=gb2312”session=”true” buffer=”64kb” 
    autoFlush=”true” isThreadSafe=”true”info=”text” errorPage=”error.jsp” 
    isErrorPage=”true” isELIgnored=”true” pageEncoding=”gb2312” import=”java.sql.*”%>
    isErrorPage:是否能使用Exception 对象;isELIgnored:是否忽略EL 表达式;
    <%@include file=”filename”%><%@taglib prefix=”c”uri=”http://……”%>

    8.jsp 有哪些内置对象?作用分别是什么? 【基础】

    答:JSP 共有以下9 种基本内置组件(可与ASP 的6 种内部组件相对应):

    request:用户端请求,此请求会包含来自GET/POST 请求的参数;

    response:网页传回用户端的回应;

    pageContext:网页的属性是在这里管理;

    session:与请求有关的会话期;

    application:servlet 正在执行的内容;

    out:用来传送回应的输出;

    config:servlet 的构架部件;

    page:JSP 网页本身;

    exception:针对错误网页,未捕捉的例外。

    9.get 和post 的区别?【基础】

    答:Form 中的get 和post 方法,在数据传输过程中分别对应了HTTP 协议中的GET 和POST 方法。二者主要区别如下:

    1)Get 是用来从服务器上获得数据,而Post 是用来向服务器上传递数据;

    2)Get 将表单中数据按照variable=value 的形式,添加到action 所指向的URL 后面,并且两者使用“?”连接,而各个变量之间使用“&”连接;Post 是将表单中的数据放在form 的数据体中,按照变量和值相对应的方式,传递到action所指向URL;

    3)Get 是不安全的,因为在传输过程,数据被放在请求的URL 中;Post 的所有操作对用户来说都是不可见的;

    4)Get 传输的数据量小,这主要是因为受URL 长度限制;而Post 可以传输大量的数据,所以在上传文件只能使用Post;

    5)Get 限制Form 表单的数据集必须为ASCII 字符,而Post 支持整个ISO10646字符集;

    6)Get 是Form 的默认方法。

    10.详细描述MVC。【基础】

    答:基于Java 的Web 应用系统采用MVC 架构模式,即model(模型)、view(视图)、control(控制)分离设计;这是目前WEB 应用服务系统的主流设计方向。

    作用:
    1.pageContext
    表示页容器 EL、标签、上传
    2.request
    服务器端取得窗户端的信息:头信息、Cookie、请求参数
    3.response
    服务器回应给客户端信息,Cookie,重定向
    4.session
    表示每一个用户,用于登陆验证上
    5.application
    表示整个服务器,getRealPath()
    6.config
    取得初始化参数,初始化参数在web.xml中配置
    7.exception 表示是错误页的处理操作
    8.page
    如同this一样,表示整个jsp页面
    9.out 输出,但是尽量使用表达式输出


    2.JSP中有哪些动作,分别是什么。
    所谓的动作实际上就是指的标签指令
    <jsp:include>:包含
    <jsp:forward>:跳转
    <jsp:useBean>:使用javaBean
    <jsp:getProperty>:取得属性
    <jsp:setProperty>:设置属性,通过反射调用方法
    <jsp:plugin>: 插入Applet程序代码


    3.JSP中动态include与静态include的区别?
    动态include:<jsp:include>,如果包含的是动态页,则先编译之后再进行处理
    静态include:<%@include%>,直接将内容先包含后处理


    4.两种跳转方式分别是什么?有什么区别?
     服务器端跳转:<jsp:forward>,跳转之后地址栏不改变,可以传递request 属性,实际是对RequestDispatcher接口的封装
    客户端跳转:response.sendRedirect(),跳转之后地址栏改变


    5、请总结一下WEB开发中的会话跟踪实现
    1.session,也是最常用的一种
    2.Coolie
    3.地址重写
    4.隐藏域


    6、在Web开发中需要处理HTML时,应做什么样的处理,要筛选那些字符< > ' & 
    &lt; & gt; &amp;等等


    7.说明JSP中errorPage的作用、应用范围
    表示错误页的操作,在一般的站点,只要一个程序出现了错误,就是产生了异常,则可以统一跳转到一个页面上进行显示,那么这种操作就属于错误页的处理,但是简单的错误页基本上都是在JSP的开发中使用的。
    要想进行错误页的设置,需要满足以下两个条件:
    1.在错误能够处理的页上的page指令中,增加:isErrorPage="true"
    2.在每一个页面指定errorPage,指定isErrorPage为true的页面
    <error-page>
    <error-code>404</error-code>
    <location>/errors.jsp</location>
    </error-page>
    <error-page>
    <exception-type>java.lang.NullPointerException</exception-type>
    <location>/errors.jsp</location>
    </error-page>


    8.写一个连接Oracle数据库的例子
    PDF中


    9.简述在JSP中是如何实现分页操作的。
    首先一定要确定的是分页有两种:
    真分页:性能较高,是基于数据库的操作,只是从数据库中取出部分的数据进行显示,所以性能高,但是可移植性低。
    假分页:性能较低,是将全部的结果查询出来,之后依靠算法分页,只显示部分数据


    实现原理:
    定义一系列的变量:currentPage, lineSize, 并通过查询求了allRecorders和计算求出pageSize pageSize=(AllRecorders  + lineSize - 1)/lineSize
    之后数据库查询语句中根据lineSize和currentPage进行数据的查询
    Oracle中使用ROWNUM,mysql中使用limit()
    之后通过表单不断的修改currentPage, lineSize就可以实现分页显示


    10.介绍在JSP中如何使用JavaBean
    JavaBean的格式要求:必须有包、public class 声明、属性封装、无参构造、settergetter
    import 语句导入或者通过<jsp:useBean>


    11.说一说Servlet的生命周期
    初始化,正常一次:对应init()方法,有两个init()其中一个是有ServletConfig对象,此方法存在则无参不调用,正常情况下第一次使用Servlet的时候才进行初始化的操作,当然也可以通过配置在容器启动的时候自动进行初始化<load-on-startup>
    服务,服务多次:所有的服务器都由services()方法分配,主要有doGet()和doPost(),分别处理get和post请求
    销毁,正常一次,调用destory()方法,如果一个Servlet长时间不用,也会自动销毁,而当再次使用的时候就必须重新进行初始化的操作


    12.Servlet中forward()与redirect()的区别?
    forward()方法是RequestDispatcher接口定义的,而redirect是response定义的,一个是服务器端跳转,另外一个是客户端跳转


    13.MVC的各个部分都有哪些技术来实现?如何实现?
    MVC:model view controller
    model:JavaBean 业务处理、数据处理
    view:显示的事JSP,最好不存在任何的scriptlet,可以使用标签消除
    controller:控制,接收view传递的内容和调用javaBean,并根据javaBean的处理结果进行跳转
    实现原理:所有的JSP将内容提交给Servlet,servlet接收这些内容并调用相应的JavaBean进行业务及数据的处理,一般javabean有专人负责开发,完成业务的操作流程,而servlet调用的只是接口,并根据这些接口的操作结果将内容交给JSP运行显示,但是显示的时候尽可能少出现Scriptlet代码


    14.简述国际化程序的实现思路。
    Locale属性文件、ResourceBunder
    国际化程序的实现、是根据本机的操作系统的语言类型,选择不同的属性文件,所有程序的基本代码一样,但是文字显示不一定,所以将内容作用属性文件出现之后,可以只显示属性文件中的文字


    15.描述JSP和Servlet的区别、共同点、各自应用的范围
    先有的Servlet再有的JSP,Servlet是在java中嵌入HTML代码,而JSP是在HTML中嵌入JAVA代码
    共同点:JSP可以完成的功能,Servlet都可以完成,但是对于过滤器、监听器只能由Servlet完成
    应用范围:JSP用于显示,Servlet用于控制


    16.简述web.xml的作用
    属于部署描述符,在整个JAVA中只要是容器都会存在部署描述符,此部署描述符可以控制整个WEB中各个组件的运行状态,也可以配置整个窗口的状态
    <error-page> <welcome-file-list> <servlet> <session-timeout><filter>

    Model:即处理业务逻辑的模块,每一种处理一个模块;

    View:负责页面显示,显示MODEL 处理结果给用户,主要实现数据到页面转换过程;

    Control:负责每个请求的分发,把FORM 数据传递给MODEL 处理,把处理结果的数据传递给VIEW 显示。

  • 相关阅读:
    BZOJ-4008: [HNOI2015]亚瑟王 (概率期望DP)
    BZOJ-4832: [Lydsy2017年4月月赛]抵制克苏恩 (概率期望DP)
    BZOJ-1415: [Noi2005]聪聪和可可 (期望DP)
    BZOJ2425 [HAOI2010]计数
    BZOJ2424 [HAOI2010]订货
    BZOJ2423 [HAOI2010]最长公共子序列
    BZOJ2299 [HAOI2011]向量
    BZOJ2298 [HAOI2011]problem a
    BZOJ1040 [ZJOI2008]骑士
    BZOJ一天提交(AC) 51纪念
  • 原文地址:https://www.cnblogs.com/dzcici/p/10416545.html
Copyright © 2011-2022 走看看