Servlet&JSP中的知识点
Servlet&JSP中的知识点
1、说一说Servlet的生命周期?
(1)、servlet容器负责加载和实例化servlet 答:servlet有良好的生存期的定义,包括加载和实例化、初始化、处理请求以及服务结束。这个生存期由
javax.servlet.Servlet接口的init,service和destroy方法表达。 Servlet被服务器实例化后,容器运行
其init方法,请求到达时运行其service方法,service方法自动派遣运行与请求对应的doXXX方法(doGet
,doPost)等,当服务器决定将实例销毁的时候调用其destroy方法。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于
多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上
低于servlet。
2、JAVA SERVLET API中forward() 与redirect()的区别? 答:前者仅是容器中控制权的转向,在客户端浏览器地址栏中不会显示出转向后的地址;后者则是完全的跳
转,浏览器将会得到跳转的地址,并重新发送请求链接。这样,从浏览器的地址栏中可以看到跳转后的链
接地址。所以,前者更加高效,在前者可以满足需要时,尽量使用forward()方法,并且,这样也有助于隐
藏实际的链接。在有些情况下,比如,需要跳转到一个其它服务器上的资源,则必须使用sendRedirect()
方法。
3、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 { } }
4、什么情况下调用doGet()和doPost()? 答:Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
5 servlet的生命周期 答:web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。通过调
用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器调用servlet的
destroy()方法。
6、如何现实servlet的单线程模式 答:<%@ page isThreadSafe="false"%>
7、页面间对象传递的方法 答:request,session,application,cookie等
8、JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 答:JSP是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外表表达。JSP编译后是"类
servlet"。Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中
的HTML里分离开来。而JSP的情况是Java和HTML可以组合成一个扩展名为.jsp的文件。JSP侧重于视图,
servlet主要用于控制逻辑。
9、四种会话跟踪技术 答:会话作用域ServletsJSP 页面描述 1、page否是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任
何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的
JSP 页面; 2、request是是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及
多个 Web 组件(由于 forward 指令和 include 动作的关系); 3、session是是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经
常会跨越多个客户机请求; 4、application是是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,
包括个页面、请求和会话的一个全局作用域。
10、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):删除请求中的一个属性
11、我们在web应用开发过程中经常遇到输出某种编码的字符,如iso8859-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.err.println(e.getMessage()); } return tempStr; }
12、Servlet执行时一般实现哪几个方法? 答: public void init(ServletConfig config) public ServletConfig getServletConfig() public String getServletInfo() public void service(ServletRequest request,ServletResponse response) public void destroy()