JSP和Servlet之间有什么关系?JSP是Servlet的某种类型吗?JSP和JSF之间有什么关系?JSF是像ASP.NET-MVC那样基于UI的JSP的某种预构建吗?
JSP是一种运行在服务器机上的**Java视图技术,它允许你用客户端语言(如HTML、CSS、JavaScript等)编写模板文本。JSP支持taglibs,它是由一些Java代码支持的,让你动态地控制页面的流程或输出。一个著名的标签库是JSTL。JSP还支持表达式语言,它可以用来访问后端数据(通过页面、请求、会话和应用范围中的属性),大多与taglibs结合使用。
当JSP第一次被请求或Web应用启动时,servlet容器将把它编译成一个扩展HttpServlet
的类,并在Web应用的生命周期内使用它。你可以在服务器的工作目录中找到生成的源代码。例如,在Tomcat中,它是/work
目录。在一个JSP请求中,servlet容器将执行编译好的JSP类,并通过网络将生成的输出(通常只是HTML/CSS/JS)发送到客户端,再由客户端在网络浏览器中显示。
Servlet是运行在服务器机上的一个Java应用编程接口(API),它拦截客户端发出的请求并生成/发送响应。一个著名的例子是HttpServlet
,它提供了使用流行的HTTP方法(如GET
和POST
)来钩住HTTP请求的方法。你可以配置HttpServlet
s来监听特定的HTTP URL模式,这在web.xml
中是可以配置的,或者最近在Java EE 6中,使用@WebServlet
注解。
当Servlet第一次被请求或在Web应用启动时,Servlet容器将创建一个实例,并在Web应用的生命周期内将其保存在内存中。同一个实例将被重复用于每个传入的请求,这些请求的URL与Servlet'的URL模式相符。你可以通过HttpServletRequest
访问请求数据,通过HttpServletResponse
处理响应。这两个对象都可以作为HttpServlet
的任何重载方法的方法参数,例如doGet()
和doPost()
。
JSF是一个基于组件的MVC框架,它建立在Servlet API之上,并通过标签词提供组件,可以在JSP或任何其他基于Java的视图技术中使用,如Facelets。Facelets比JSP更适合于JSF。它即提供了很好的模板功能,如复合组件,而JSP基本上只提供了JSF中模板的<jsp:include>
,因此,当你想用一个组件替换一组重复的组件时,你不得不用原始Java代码创建自定义组件(这有点不透明,是个很乏味的工作)。 从JSF 2.0开始,JSP作为视图技术已经被弃用,转而使用Facelets。
注意。JSP本身并没有被废弃,只是JSF与JSP的组合被废弃了。
注意*。JSP通过Taglibs,特别是(Tag File)的变体,具有强大的模板能力。 JSP的模板化与JSF的结合正是它所缺乏的。
作为一个MVC(Model-View-Controller)框架,JSF提供了FacesServlet
作为唯一的请求-响应的控制器。它从你手中拿走了所有标准而繁琐的HTTP请求/响应工作,如收集用户输入,验证/转换它们,把它们放在模型对象中,调用动作和渲染响应。这样一来,你最终基本上可以用一个JSP或Facelets(XHTML)页面作为View,用一个JavaBean类作为Model。JSF组件用于将视图与模型绑定在一起(比如你的ASP.NET Web控件),而FacesServlet
使用JSF组件树来完成所有的工作。
见http://www.oracle.com/technetwork/java/faq-137059.html
JSP技术是Java 技术家族的一部分。JSP页面被 编译成servlets,可以调用 JavaBeans组件(bean)或 企业JavaBeans组件 (企业豆)来执行 在服务器上进行处理。因此,JSP 技术是一个高度可扩展的架构中的关键组成部分。 高度可扩展的架构 基于网络的应用。
见https://jcp.org/en/introduction/faq
答:JavaServer Faces技术是一个 构建用户界面的框架 的网络应用程序。JavaServer Faces 技术包括。
一组API用于:代表UI 组件并管理其状态。 处理事件和输入验证。 定义页面导航,以及 支持国际化和 可访问性。
一个JavaServer Pages(JSP)自定义标签 库,用于在JSP页面中表达一个JavaServer JSP页面内的接口。
JSP是一种专门的Servlet。
JSF是一套你可以和JSP一起使用的标签。