JSF,Servlet和JSP有什么区别?

问题:

JSP和Servlet如何相互关联?是JSP某种Servlet吗? JSP和JSF如何相互关联? JSF是一些基于UI的预构建UI,如ASP.NET-MVC?

回答:

JSP(JavaServer Pages)

JSP是在服务器机器上运行的Java视图技术,允许您以客户端语言(如HTML,CSS,JavaScript等)编写模板文本。 JSP支持taglibs,它们由Java代码支持,可以让您控制页面流或动态输出。一个众所周知的taglib是JSTL。 JSP还支持Expression Language,可以用于访问后端数据(通过页面中可用的属性,请求,会话和应用程序范围),主要与taglib相结合。
当第一次请求JSP或启动Web应用程序时,servlet容器将将其编译为延伸HttpServlet的类,并在Web应用程序的生命周期中使用它。您可以在服务器的工作目录中找到生成的源代码。例如Tomcat,它是/work目录。在JSP请求上,servlet容器将执行编译的JSP类,并通过网络将生成的输出(通常只是HTML / CSS / JS)通过网络发送到客户端,客户端又将其显示在Web浏览器中。

Servlets

Servlet是在服务器机器上运行的Java应用程序编程接口(API),它拦截客户端发出的请求并生成/发送响应。一个众所周知的例子是HttpServlet,它提供了使用流行的HTTP methods(如GETPOST)挂钩HTTP请求的方法。您可以使用@WebServlet注释来配置HttpServlet以侦听web.xml中可配置的某个HTTP URL模式,或最近使用Java EE 6进行配置。
当Servlet首次被请求或在Web应用程序启动时,servlet容器将创建一个实例,并在Web应用程序生命周期内将其保存在内存中。对于其URL与servlet的URL模式匹配的每个传入请求,相同的实例将被重用。您可以通过HttpServletRequest访问请求数据,并通过HttpServletResponse处理响应。在HttpServlet的任何重写方法中,两个对象都可以作为方法参数使用,例如doGet()doPost()

JSF(JavaServer Faces)

JSF是一个基于组件的MVC框架,它构建在Servlet API之上,并通过taglib提供components,可以在JSP或任何其他基于Java的视图技术(如Facelets)中使用。 Facelets比JSP更适合于JSF。它提供了很好的templating capabilities,例如composite components,而JSP基本上只提供了模板的<jsp:include>,所以你被迫用原始的Java代码创建自定义组件(这有点不透明,很繁琐当您要用单个组件替换重复的组件组时,可以在JSF中工作)。自从JSF 2.0以来,JSP已被弃用为支持Facelets的视图技术。
作为MVC(Model-View-Controller)框架,JSF提供FacesServlet作为唯一的请求响应Controller。它需要您手中的所有标准和繁琐的HTTP请求/响应工作,例如收集用户输入,验证/转换它们,将其放在模型对象中,调用操作和呈现响应。这样你就可以基本上得到View的JSP或Facelets(XHTML)页面,JavaBean类为Model。 JSF组件用于将视图与模型绑定(例如您的ASP.NET Web控件),并且FacesServlet使用JSF component tree完成所有工作。

相关问题

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: What is the difference between JSF, Servlet and JSP?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 17 = 22