计算机|【JavaWeb】常见面试题

Tomcat的优化经验 去掉对 web.xml 的监视,把jsp提前编辑成Servlet。
有富余物理内存的情况,加大tomcat使用的jvm的内存
GET 和 POST 区别

  1. 携带请求参数的方式
    GET: 通过请求行携带参数, 参数会显示在地址栏
    POST: 通过请求体来携带参数, 参数不会显示在地址栏
  2. 服务器端处理请求的方法
    GET: 会调用 Servlet 的doGet()来处理请求
    POST: 会调用Servlet 的doPost()来处理请求
  3. 数据大小与安全性
    GET: 不同的浏览器对URL的长度进行了不同的限制,
    因为其传输数据显示在地址栏,因此不安全
    POST: 大小没有限制, 安全
  4. 编码方式
    GET:URL拼接后,浏览器会对URL进行URLencode,只能发送ASCII字符
    POST:在HTML文件头可以进行charset配置.
  5. 浏览器的处理方式
    GET:可被缓存,保留在历史记录中,也可收藏为书签
    POST:不会被缓存,不会保留在浏览器历史记录中,也不能被收藏为书签
什么是 Servlet 的生命周期? Servlet 运行在容器中,并且整个生命周期都是由容器控制的。Servlet 的生命周期可以分为加载、创建、初始化、处理客户请求和卸载 5 个阶段。
1) 加载。容器通过类加载器使用 Servlet 类对应的文件来加载 Servlet。
2) 创建。通过调用 Servlet 的构造函数来创建一个 Servlet 实例。
3) 初始化。通过调用 Servlet 的 init() 方法来完成初始化工作,init() 方法只会被调用一次。
4) 处理客户请求。
Servlet 一旦被创建后,它就可以为客户端提供服务了。每当有新的客户请求到来时,容器都会创建一个新的线程来处理该请求,接着会调用 Servlet 的 service() 方法来完成客户端的请求,当然, service() 方法会根据请求的 method 属性值的不同调用决定是调用 doGet() 方法还是调用 doPost() 方法来完成具体的响应。
5) 卸载。容器在卸载 Servlet 之前需要调用 destroy() 方法,让 Servlet 自己释放其占用的系统资源,一旦 destroy 方法被调用,容器就不会再向这个 Servlet 发送任何请求的消息了。如果容器需要这个 Servlet ,那么就必须重新创建并初始化一个实例。需要注意的是, destroy() 方法只会被调用一次。
SERVLET API 中 forward()与 redirect()的区别? 前者仅是服务器内 web 容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;
后者则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。
这样,从浏览器的地址栏中可以看到跳转后的链接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用 sendRedirect()方法。
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):删除请求中的一个属性
forward和 redirect的区别 forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
request.getAttribute()和 request.getParameter()有何区别? getParameter 得到的都是 String 类型的。或者是 http://a.jsp?id=123 中的 123,或者是某个表单提交过去的数据。
getAttribute则可以是对象。
getParameter()是获取POST/GET 传递的参数值;
getAttribute()是获取对象容器中的数据值;
getParameter:用于客户端重定向时,即点击了链接或提交按扭时传值用,即用于在用表单或 url重定向传值时接收数据用。
getAttribute:用于服务器端重定向时,即在 sevlet 中使用了 forward 函数,或 struts 中使用了mapping.findForward。getAttribute只能收到程序用setAttribute传过来的值。
getParameter()是获取POST/GET 传递的参数值;
getAttribute()是获取SESSION 的值;
另外,可以用 setAttribute,getAttribute 发送接收对象.而 getParameter 显然只能传字符串。
setAttribute是应用服务器把这个对象放在该页面所对应的一块内存中去,当你的页面服务器重定向到另一个页面时,应用服务器会把这块内存拷贝另一个页面所对应的内存中。这样getAttribute 就能取得你所设下的值,当然这种方法可以传对象。session 也一样,只是对象在内存中的生命周期不一样而已。getParameter 只是应用服务器在分析你送上来的 request 页面的文本时,取得你设在表单或 url重定向时的值。
getParameter返回的是 String, 用于读取提交的表单中的值;
getAttribute 返回的是 Object,需进行转换,可用 setAttribute 设置成任意对象,使用很灵活,可随时用
MVC的各个部分都有那些技术来实现?如何实现? 【计算机|【JavaWeb】常见面试题】MVC 是Model-View-Controller的简写。Model代表的是应用的业务逻辑(通过JavaBean,EJB组件实现),View是应用的表示面(由 JSP页面产生),Controller是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

    推荐阅读