校招面试之Java web部分

以下内容转载自某老师整理笔记。有需要的可以看一下

1.0 HTTP请求的GET与POST方式的区别
        1)get用来请求资源,post用来提交资源
        2)get参数在url上,不安全,post相对安全
        3)get传递数据量长度受url长度限制,post没有限制
等等

这里写图片描述

2.0 解释一下什么是servlet
        【答】servlet是在服务器上运行以处理客户端请求并做出响应的程序。servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。

2.1 说一说Servlet的生命周期?
        servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由javax.servlet.Servlet接口的init,service和destroy方法表达。
        当客户第一次请求时,首先判断是否存在Servlet对象,若不存在,则由Web容器创建对象,而后调用init()方法对其初始化,此初始化方法在整个Servlet生命周期中只调用一次。
        完成Servlet对象的创建和实例化之后,Web容器会调用Servlet对象的service()方法来处理请求。根据请求的不同调用不同的do***()方法。
        当Web容器关闭或者Servlet对象要从容器中被删除时,会自动调用destory()方法。

2.2 Servlet的基本架构

public class ServletDemo extends HttpServlet{
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doGet(req, resp);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        super.doPost(req, resp);
    }

}

3.0 SERVLET API中forward() 与redirect()的区别?
        forward,称为转发,也可称“直接请求转发“,而Redirect,也称为“重定向”,也可称为“间接请求转发“
        前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用
sendRedirect()方法。

        【两者最本的区别:】Forward:客户端和浏览器只发出一次请求。Redirect:实际是两次HTTP请求,服务器端在响应第一次请求的时候,让浏览器再向另外一个URL发出请求,从而达到转发的目的。
        举个通俗的例子:
        直接转发就相当于:“A找B借钱,B说没有,B去找C借,借到借不到都会把消息传递给A。此时A是不知道B去找C 借钱的。A只找了B一次”;
        间接转发就相当于:”A找B借钱,B说没有,让A去找C借。A找了B,又去找了C。找了两次”。

4.0 什么情况下调用doGet()和doPost()?
        调用doGet():直接地址栏输入URL,或者超链接,或者form的method为默认或get。
        调用doPost():Form的method为post时。

5.0 Request对象的主要方法:

    setAttribute(String name,Object):设置名字为name的request的参数值 
    getAttribute(String name):返回由name指定的属性值 
    getAttributeNames():返回request对象所有属性的名字集合,结果是一个枚举的实例 
    getCookies():返回客户端的所有Cookie对象,结果是一个Cookie数组 
    getCharacterEncoding():返回请求中的字符编码方式 
    getContentLength():返回请求的Body的长度 
    getHeader(String name):获得HTTP协议定义的文件头信息 
    getHeaders(String name):返回指定名字的request Header的所有值,结果是一个枚举的实例 
    getHeaderNames():返回所以request Header的名字,结果是一个枚举的实例 
    getInputStream():返回请求的输入流,用于获得请求中的数据 
    getMethod():获得客户端向服务器端传送数据的方法 
    getParameter(String name):获得客户端传送给服务器端的有name指定的参数值 
    getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举的实例 
    getParametervalues(String name):获得有name指定的参数的所有值 
    getProtocol():获取客户端向服务器端传送数据所依据的协议名称 
    getQueryString():获得查询字符串 
    getRequestURI():获取发出请求字符串的客户端地址 
    getRemoteAddr():获取客户端的IP地址 
    getRemoteHost():获取客户端的名字 
    getSession([Boolean create]):返回和请求相关Session 
    getServerName():获取服务器的名字 
    getServletPath():获取客户端所请求的脚本文件的路径 
    getServerPort():获取服务器的端口号 
    removeAttribute(String name):删除请求中的一个属性 

6.0 request.getParameter()和request.getAttribute() 有何区别?
        1)赋值方式不一样,前者是客户端如浏览器端将请求参数值送给服务器端,而后者则是在请求到达服务器端之后,在服务器进行存放进去
        2)两者的返回值类型不一样,前者永远返回字符串,后者返回任意对象

7.0 jsp有哪些内置对象?作用分别是什么? 分别有什么方法?

答:JSP共有以下9个内置的对象: 
request 用户端请求,此请求会包含来自GET/POST请求的参数 
response 网页传回用户端的回应 
pageContext 网页的属性是在这里管理 
session 与请求有关的会话期 
application servlet 正在执行的内容 
out 用来传送回应的输出 
config servlet的构架部件 
page JSP网页本身 
exception 针对错误网页,未捕捉的例外 

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可以存贮用户的状态信息 

applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 

config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 

page表示从该页面产生的一个servlet实例 

8.0jsp有哪些动作?作用分别是什么? (这个问题似乎不重要,不明白为何有此题)

:JSP共有以下6种基本动作 
    jsp:include:在页面被请求的时候引入一个文件。 
    jsp:useBean:寻找或者实例化一个JavaBeanjsp:setProperty:设置JavaBean的属性。 
    jsp:getProperty:输出某个JavaBean的属性。 
    jsp:forward:把请求转到一个新的页面。 
    jsp:plugin:根据浏览器类型为Java插件生成OBJECTEMBED标记

9.0 JSP的常用指令
        【具体看这篇】http://blog.csdn.net/qq_16216221/article/details/46440387

10 JSP中动态INCLUDE与静态INCLUDE的区别?
        1. 动态包含用的元素是page,而且有两种形式。静态包含用的是file,只有一种形式。
        2. 生成的文件不同,静态的包含是将两个jsp文件二合一,生成一个以包含页面命名的servlet和class文件,动态包含的两个jsp文件各自生成自己的servlet和class文件。
        3. 动态包含是可以通过ur向被包含的文件传输变量。被包含的文件可以动态的接收传输的变量,也就是为什么说“动态”。而静态包含是不能够传递变量。被包含的文件不能接收传输的变量。适用于包含静态页面
        另一种简答说法:
        1. 动态INCLUDE用jsp:include动作实现它总会检查所含文件中的变化,适用于动态页面并且可以带参数。
        2. 静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面<%@include file=included.html%> 。

11 页面间对象传递的方法
        request,session,application,cookie等

12 JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么?
        JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是”类servlet”。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,Servlet主要用于控制逻辑。

猜你喜欢

转载自blog.csdn.net/xiaozhegaa/article/details/79515665