Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jakarta ee JavaEE-为什么公共站点的.jsp扩展这么少?_Jakarta Ee - Fatal编程技术网

Jakarta ee JavaEE-为什么公共站点的.jsp扩展这么少?

Jakarta ee JavaEE-为什么公共站点的.jsp扩展这么少?,jakarta-ee,Jakarta Ee,我读过很多文章说,JavaEE是当今最流行的企业解决方案。让我们不要争论它是最受欢迎的还是第二受欢迎的还是什么 问题是:我看到几乎所有的网页都有扩展名,比如.html、.php和.aspx。 为什么(几乎)没有.JSP? 如果ASP.NET页面被认为不太流行,为什么它这么容易找到呢 请注意,我还没有用JavaEE编程,所以如果我完全错了,请不要怪我。耐心回答将不胜感激 JSP有缺点,尤其是JSF。在最新版本的JavaEE中,建议将facelets与JSF而不是JSP一起使用(常用的后缀是.JSF

我读过很多文章说,JavaEE是当今最流行的企业解决方案。让我们不要争论它是最受欢迎的还是第二受欢迎的还是什么

问题是:我看到几乎所有的网页都有扩展名,比如.html、.php和.aspx。 为什么(几乎)没有.JSP? 如果ASP.NET页面被认为不太流行,为什么它这么容易找到呢


请注意,我还没有用JavaEE编程,所以如果我完全错了,请不要怪我。耐心回答将不胜感激

JSP有缺点,尤其是JSF。在最新版本的JavaEE中,建议将facelets与JSF而不是JSP一起使用(常用的后缀是.JSF)。另一个常见的框架是Struts,它使用.do作为后缀。

大多数企业解决方案都是内部网或外部网,不会向公众公开,因此您不会知道它们


所有这些告诉您的是,您还没有看到过相对较多的使用jsp编写的公共网站。

在直接使用jsp页面的地方,它们通常映射到部署描述符中的URL,隐藏了web应用程序的实现细节,因此您可能无法判断它是基于Java EE的web应用程序

(根据要求)例如,我可以编写一个JSP页面,并将其保存在web应用程序中,作为
/mypage.JSP
。然后,我可以在部署描述符(web.xml)中定义从(任意)URL
/action.do
到该JSP页面的映射,如下所示:

<servlet>
  <servlet-name>mypage</servlet-name>
  <jsp-page>/mypage.jsp</jsp-page>
</servlet>

<servlet-mapping>
  <servlet-name>mypage</servlet-name>
  <url-pattern>/action.do</url-pattern>
</servlet-mapping>

我的页面
/mypage.jsp
我的页面
/行动

此外,编写基于Java的web应用程序的开发人员使用模型-视图-控制器设计,在将请求发送到JSP以创建用户将收到的响应(视图)之前,将请求路由到控制器servlet,这些servlet执行繁重的工作(验证请求参数、与其他代码和服务交互)。因此,传入的请求被映射到servlet,而不是直接映射到JSP。Sun认证的官方Web组件开发人员资格认证促进了这种方法,Struts和JSF等Web框架就是基于这种方法构建的。

对于URL中为什么看不到.jsp扩展,最常见的答案是因为(至少对于开发良好的Java EE站点来说是这样的))就是JSP页面永远不会被直接访问。它们形成与URI关联的模板或扩展点,并由某种形式的控制器或过滤器解析

在早期(serlvlet之前的时代),您通常会发布带有JSP后缀的URL,但不会更多

现在的标准JavaEE实践是

  • 将所有JSP文件置于WEB-INF下 (从而使他们 与URL不可引用)
  • 定义一个或多个 处理URL请求
  • 定义每个URL到 资源集(用于 (实例)
  • 然后,控制器知道如何收集所有这些资源,将它们组合在一起,并为HTTP请求发出HTTP响应

    这样做的原因是将URL与用于构成资源的实际构件分开。如果用户为JSP页面添加书签,则不能移动或重命名该页面,除非您打断他的书签或引入HTTP重定向。但是,如果隐藏JSP,您可以随时管理它们,而无需破坏URL

    它几乎是对URL的组合和封装规则的应用。

    例如,假设您有一个URL,/hello

    然后在WEB-INF下有一个header.jsp、footer.jsp和body.jsp文件(对公众隐藏)

    当您发送/hello的HTTP请求时,它背后的控制器将发挥其神奇作用,使用页眉、页脚和主体jsp页面组成一个HTML页面

    如果以后需要在左侧添加导航栏(如WEB-INF下的navbar.jsp),则可以配置控制器,使用navbar.jsp创建新的HTML正文

    您的URL保持不变,即使在其组合中添加了新的JSP文件

    这样做的另一个原因是信息隐藏和安全性。没有理由向外界(甚至是公司内部网的用户)宣传web应用程序背后的技术。如果你让URL有JSP后缀,你就是在告诉世界JavaEE在幕后。即使这些知识不会带来风险,你也永远不想这样做

    最后,如果您想更改技术,但又不想破坏现有URL,会发生什么情况?你可能有合同义务让他们活着。将URL与特定于技术的文件扩展名分离将有助于做到这一点

    希望能有帮助

    --编辑-- 关于我所作的下列发言:

    如果以后需要在左侧添加导航栏(如navbar.jsp) 在WEB-INF)下,将控制器配置为组成新的HTML body使用navbar.jsp创建导航栏

    您的URL保持不变,即使在其URL中添加了新的JSP文件 组成

    如果您直接引用JSP文件,您仍然可以通过URL引用一个mainJSP页面来实现相同的封装(隐藏navbar更改),该页面由navbar、页眉和页脚JSP子组件组成。然而,您的URL模式仍将与支持它们的技术相结合

    此外,这是我以前忘记提到的:如果用户意外或恶意地直接访问页脚或导航栏jsp,会发生什么?这可能是无害的,也可能不是。这可能需要解决,也可能不需要。无论如何,这是一个需要考虑的额外变量。这是另一个决定(在众多决定中,不可避免地会困扰任何复杂系统的设计),一个必须做出的决定,或者可能错误地做出的决定,或者错误地忽略的决定(直到联合国批准)