一尘不染

Java-JSF,Servlet和JSP有什么区别?

java

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


阅读 290

收藏
2020-02-25

共1个答案

一尘不染

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)通过网络服务器通过网络发送到客户端,客户端再将其显示在网络浏览器中。

小程序

Servlet是在服务器计算机上运行的Java应用程序编程接口(API),可拦截客户端发出的请求并生成/发送响应。一个著名的示例是,HttpServlet它提供了使用流行的HTTP方法(例如和)来挂接HTTP请求的方法。你可以将进行配置以侦听特定的HTTP URL模式,该模式可以在中进行配置,或者在Java EE 6中通过注解进行更新。GETPOSTHttpServletweb.xml@WebServlet

当首次请求Servlet或在Web应用程序启动期间,Servlet容器将创建它的一个实例,并将其在Web应用程序的生存期内保存在内存中。URL匹配servlet的URL模式的每个传入请求都将重用同一实例。你可以通过访问数据HttpServletRequest并通过处理响应HttpServletResponse。这两个对象都可以用作方法的参数HttpServlet,例如doGet()和的任何覆盖方法doPost()

JSF(JavaServer Faces)

JSF是基于组件的MVC框架,该框架建立在Servlet API之上,并通过可在JSP或任何其他基于Java的视图技术(例如Facelets)中使用的标记库提供组件。Facelets比JSP更适合JSF。它即提供了强大的模板功能,例如复合组件,而JSP基本上仅提供JSF中的for模板功能,因此,当你使用原始Java代码(这有点不透明且繁琐的工作)时,你不得不创建自定义组件。你想要用单个组件替换重复的组件组。从JSF 2.0开始,已弃用JSP作为支持Facelets的视图技术。 <jsp:include>

注意:不建议不要使用JSP本身,仅建议不要使用JSF和JSP的组合。

注意:JSP通过Taglib(特别是(Tag File)变体)具有强大的模板功能。缺少与JSF结合使用的JSP模板。

作为MVC(模型-视图-控制器)框架,JSF提供了FacesServlet作为唯一的请求-响应控制器。它需要你完成所有标准且繁琐的HTTP请求/响应工作,例如收集用户输入,验证/转换它们,将它们放入模型对象,调用操作并呈现响应。这样,你最终获得了View的JSP或Facelets(XHTML)页面以及Java的Model类。JSF组件用于将视图与模型绑定(例如ASP.NET Web控件所做的工作),并且FacesServlet使用JSF组件树来完成所有工作。

2020-02-25