码迷,mamicode.com
首页 > Web开发 > 详细

Jsp&Servlet知识点

时间:2017-05-19 09:56:53      阅读:204      评论:0      收藏:0      [点我收藏+]

标签:体系   情况   业务逻辑   tco   include   api   结果   ram   单线程   

(*****)Servlet的生命周期,并说出Servlet和CGI的区别?

web容器加载servlet,生命周期开始。

通过调用servlet的init()方法进行servlet的初始化。

通过调用service()方法实现,根据请求的不同调用不同的do***()方法。

web容器调用servlet的destroy()方法。

与cgi的区别在于servlet处理服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

(*****)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.servlet.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息 
config
表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。 


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

(***)如何实现一个自定义的servlet?

extends HttpServlet 并覆盖doPost或doGet方法

在web.xml中进行部署

(***)如何实现servlet的单线程模式

在doGet及doPost方法前加入synchoronized

JSP:

<%@ pageisThreadSafe="true"%>

(***)描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。

Cookie:主要用在保存客户端,其值在客户端与服务端之间传送,不安全,存储的数据量有限。

Session:保存在服务端,每一个session在服务端有一个sessionID作一个标识。存储的数据量大,安全性高。占用服务端的内存资源。

(***)forward 和redirect的区别

forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器,浏览器根本不知道服务器发送的内容是从哪儿来的,所以它的地址栏中还是原来的地址。
redirect
就是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。

forward: 转发,同一个request,在下一个页面中,request保留上一个页面中的request的所有值

redirect: 跳转,不同的request,不传递request对象。

(***)JSP和Servlet有哪些相同点和不同点,他们之间的联系是什么? 

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

(***)四种会话跟踪技术

会话作用域ServletsJSP 页面描述
page
是代表与一个页面相关的对象和属性。一个页面由一个编译好的 Java servlet 类(可以带有任何的 include 指令,但是没有 include 动作)表示。这既包括 servlet 又包括被编译成 servlet 的 JSP 页面
request
是代表与 Web 客户机发出的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个 Web 组件(由于 forward 指令和 include 动作的关系)
session
是代表与用于某个 Web 客户机的一个用户体验相关的对象和属性。一个 Web 会话可以也经常会跨越多个客户机请求
application
是代表与整个 Web 应用程序相关的对象和属性。这实质上是跨越整个 Web 应用程序,包括多个页面、请求和会话的一个全局作用域

jsp页面中两种跳转方式分别是什么?有什么区别?

转发: 保留上次的request

      <jsp:forward>

      actionMapping.findForWard(“”);

      pageContext.forward();

      request.getRequestDispacher(“a.jsp”).forward(request,response)

跳转:不保留上次的request

      Response.setRedirect(“”)

Servlet的体系结构是什么?

Servlet

GenericServlet

HttpServlet

自定义

Servlet执行时一般实现哪几个方法?

public void init(ServletConfig config)

public ServletConfig getServletConfig()

public String getServletInfo()

public void service(ServletRequest request,ServletResponse response)

public void destroy()

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)
:删除请求中的一个属性

简单介绍JSP的标记库

做一个标记处理类 extends TagSupport

通过tld说明标记处理的类的前缀及后缀

在web.xml中说明tld文件

<taglib>

      <taglib-uri>

      <taglib-location>

<taglib>

在jsp页面是引用tld<%@taglib uri=”” prefix=””%>

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

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

描述JSP和Servlet的区别、共同点、各自应用的范围

Jsp主要在于页面的显示动态生成页面,可以与html标记一起使用,其还是要生成为一个servlet。

Servlet:主要是控制的处理,如调用业务层,跳转不同的jsp页面。

Mvc:

      Jsp:v

      Servlet:c

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

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

jsp有哪些动作?作用分别是什么? 

JSP共有以下6种基本动作

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

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

jsp:setProperty:设置JavaBean的属性。

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

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

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

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

MVC是Model-View-Controller的简写。

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

"View" 是应用的表示面(由JSP页面产生)。

"Controller" 是提供应用的处理过程控制(一般是一个Servlet)。

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

请罗列jsp中的脚本、指令及动作?

脚本

          <%%>  <%=%> <%!%> <%----%>

指令

          <%@page contentType=”text/html;charset=utf-8” language=”java” import=””%>

          <%@include file=””%>

          <%@taglib uri=”” prefix=””%>

动作:

          <jsp:useBean class=”” id=”” scope=””>  在scope中如果没有实例化一个对象,如果有直接用以前的。

          <jsp:getProperty name=”” property=””>  向一个bean中设置属性值

          <jsp:forward>  jsp页的转发

          <jsp:include page=””>  导入一个jsp页面

include的两种实现方式的区别?

<@include file>:在将jsp生成servlet类前将两个文件和在一起,生成一个java类,一起运行的。所以是一家子,当中的变量名不能重名。

<jsp:include page>:是两个类,是一个调用关系,在运行时动态的调用,不是一家子,可以重复变量。

在JSP中如何读取客户端的请求,如何确定某个Jsp文件的真实路径?

Request.getparameter(“”)

<%=application.getRealPath("aa.jsp") %>

说明Jsp中errorPage的作用,应用范围。

正常页面中

%@page erropage=”error.jsp”%

      错误页面

          <%@page iserrorpage=”true”%>

有一内置对象:exception

介绍在Jsp中如何使用JavaBeans

<jsp:useBean    class=”” id=”” scope=””/>

<%

   New 类();

%>

Servlet中重要的包有那些,有什么区别?

javax.servlet.*;javax.servlet.http.*;

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(是否忽略表达式)
<%@include
 file=”filename”%>
<%@taglib
 prefix=”c”uri=”http://……”%>

页面间对象传递的方法

request,session,application,cookie等





Jsp&Servlet知识点

标签:体系   情况   业务逻辑   tco   include   api   结果   ram   单线程   

原文地址:http://www.cnblogs.com/lrong/p/6876429.html

踩
(0)
赞
(0)
   
举报
评论 一句话评论(0)
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!