JavaWeb

来源:互联网 发布:西部证券软件 编辑:程序博客网 时间:2024/06/01 09:12

1、Tomcat的优化经验?

    去掉对web.xml,把jsp提前编辑成Servlet。

有富余物理内存的情况,加大tomcat使用的jvm的内存。


2、Http请求的GET和POST方式的区别?

GET请求方式提交数据不安全,数据置于请求行中,客户端地址栏可见。提交数据大小有限制。

POST请求方式提交数据安全,数据置于请求体中,客户端不可见。提交数据大小没有限制。


3、什么是Servlet?

Servlet是在服务器上运行的小程序。Servlet的主要功能在于交互式的浏览和修改数据,生成动态Web内容。


4、Servlet的生命周期?

Servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。

这个生存期有javax.servlet.Servlet接口的init.service和destory方法表达。

Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet,doPost)等,当服务器决定将实例销毁的时候调用其destory方法。


5、Servlet API中forward()和redirect()的区别?

forward()转发是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;

redirect()重定向则是完全的跳转,浏览器将会得到跳转的地址,并重新发送请求链接。这样从浏览器的地址栏中可以看到跳转后的链接地址。

所以,转发更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐藏实际的链接。

在有些情况下,比如:需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()方法。


本质区别

解释一

一句话,转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:

转发过程:客户浏览器发送http请求——》web服务器接受此请求——》调用内部的一个方法在容器内部完成请求处理和转发动作——》将目标资源发送给客户;在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

重定向过程:客户浏览器发送http请求——》web服务器接受后发送302状态码响应及对应新的location给客户浏览器——》客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——》服务器根据此请求寻找资源并发送给客户。在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

解释二

重定向,其实是两次request

第一次,客户端request   A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

例子:

response.sendRedirect("loginsuccess.jsp");

请求转发是服务器内部把对一个request/response的处理权,移交给另外一个

对于客户端而言,它只知道自己最早请求的那个A,而不知道中间的B,甚至CD传输的信息不会丢失。

例子:

       RequestDispatcherdis=request.getRequestDispatcher(“loginsuccess.jsp”);

       Dis.forward(request,response);

解释三

假设你去办理某个执照

重定向:你先去了A局,A局的人说:“这个事情不归我们管,去B局”,然后,你就从A退了出来,自己乘车去了B局。

转发:你先去了A局,A局看了以后,知道这个事情其实应该B局来管,但是他没有把你退回来,而是让你坐一会儿,自己到后面办公室联系了B的人,让他们办好后,送了过来


6、什么情况下调用doGet()和doPost()?

Jsp页面中的FORM标签中的method属性为get时调用doGet(),为post时调用doPost()。


7、Request对象的主要方法?

setAttribute(String name,Object):设置名字为namerequest的参数值 
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):删除请求中的一个属性 


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

JSP共有9个内置对象:

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

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

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

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

application:Servlet正在执行的内容。

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

config:Servlet的构架部件。

page:网页本身。

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


request:表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie、header和session数据的方法。

response:表示HttpServletResponse对象,并且提供了几个用于设置送回浏览器的响应方法(如cookies、头信息等)。

out:该对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。

pageContext:表示一个javax.servlet.http.HttpSession对象。Session可以存储用户的状态信息。

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

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

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


9、JSP有哪些动作?作用分别是什么?

JSP有6中基本动作:

jsp:include:在页面被请求的时候引入一个文件。

jsp:useBean:寻找或者实例化一个JavaBean。

jsp:setProperty:设置JavaBean的属性。

jsp:getProperty:输出某个JavaBean的属性。

jsp:forward:把请求转到一个新的页面。

jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记


10、JSP的常用指令?

isErrorPage(是否能使用Exception对象),isELIgnored(是否忽略表达式)。


11、JSP中动态INCLUDE与静态INCLUDE的区别?

动态INCLUDE用jsp:include动作实现。

<jsp:include page=include.jsp flush=true/>它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数。

静态INCLUDE用include伪码实现,不会检查所含文件的变化,适用于包含静态页面<%@include file=include.htm%>


12、JSP和Servlet有哪些相同点和不同点?它们之间的联系是什么?

JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。

JSP编译后是“类servlet”。Servlet和JSP最主要的不同点在于:Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离出来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。

JSP侧重于视图,Servlet主要用于控制逻辑。


13、页面键对象传递的方法?

request、session、application、cookie等。(有待考证补充☆)


14、MVC的各个部分都有哪些技术来实现?如何实现?

MVC是Model-View-Controller的简写。

Model代表的是应用的业务逻辑,通过JavaBean、EJB组件实现。

View是应用的表示面,由JSP页面实现。

Controller是提供应用的处理过程控制,一般是由Servlet实现。

通过这种分层设计模式把应用逻辑、处理过程和显示逻辑分成不同的组件实现,这些组件可以进行交互和重用。


15、在web应用开发过程中经常遇到输出某种编码的字符,如iso-8859-1等,如何输出一个某种编码的字符串?

Public String translate(String str){

String tempStr = "";

try{

tempStr = new String(str.getBytes("ISO-8859-1"),"GBK");

tempStr = tempStr.trim();

}

catch(Exception e){

System.out.println(e.getMessage());

}

return tempStr;

}


0 0