Java中用于编程Web应用程序的不同技术如何协同工作?

Java中用于编程Web应用程序的不同技术如何协同工作?,第1张

Java中用于编程Web应用程序的不同技术如何协同工作?

请注意,此说明的目的是为了提供一般理解,而不是研究每个主题的所有细节。有经验的用户肯定会发现似乎“过于笼统”的观点,但不要让新用户感到困惑。每个主题中都提供了用于进一步阅读的链接。

让我们从基本的基础开始。您需要了解网页如何进入您的计算机才能了解以下所有技术。

HTTP

HTTP代表 超文本传输​​协议
。它描述了浏览器如何与Web服务器通信以检索其内容(网页)。网页存储在服务器上,浏览器需要一种方法来告诉服务器它想要获取哪个网页。另一方面,服务器需要告知浏览器是否找到了所请求的资源,并将此信息发送给浏览器。

  1. 浏览器请求 发送到服务器。该请求包括以下几个部分:
    • URL,例如“ https://stackoverflow.com/questions/ask ”,因此服务器知道要传递哪个页面。
    • 的HTTP方法。最常见的是 get ,它表示浏览器要检索信息(例如,单个页面或网络搜索),而 post则 是表示浏览器将某些信息推送到Web服务器,例如论坛帖子。帖子通常会更改服务器上的某些内容(例如论坛中的新帖子),而获取不会更改。
    • 请求正文,可以包含例如文本框的文本,要上传的图像等。
  2. 服务器发回一个 响应 ,它是浏览器请求的答案。它包括:
    • 一个HTTP状态代码。这是一个三位数的数字,表示请求的结果。最常见的是OK(2xx),REDIRECTION(3xx),CLIENT ERROR(4xx)和SERVER ERROR(5xx)。重定向状态代码是将浏览器重定向到另一个页面的最佳方法。
    • 响应正文,其中包含网页(如果有)。
的HTML

HTML代表 超文本标记语言, 并显示 内容
。HTML文本从服务器发送到客户端(即浏览器),并由浏览器呈现以将其显示给用户。HTML示例:

<!DOCTYPE HTML><html>    <head>        <title>My first webpage</title>    </head>    <body>        <p>Hello World!</p>    </body></html>

由于HTML多年来已得到改进,因此每个HTML页的第一行包含 DOCTYPE* 声明很 重要 。它告诉浏览器应如何呈现不同的 标记
(如)。渲染过程由浏览器完成。由本地计算机上的浏览器完成的所有 *** 作都称为 客户端 。记住那个词!

<p>
*

的CSS

表示 级联样式表 。这为网页增加了
样式 ,例如颜色,字体大小,元素的位置等。CSS定义通常保存在单独的文件中,以提高可维护性。样式的渲染也在 客户端 完成。

的Javascript

不,这与Java无关。重复: 什么都没有* 。它是由 客户端
的浏览器执行的完全不同的编程语言。使用Javascript,您可以在网页中包含
编程逻辑 ,并执行以下 *** 作:
***

  • 验证用户输入
  • 花式幻灯片
  • 甚至是编程游戏!

您需要意识到可以在浏览器中关闭Javascript,然后将不执行任何Javascript代码。因此,您不应该依赖于Web应用程序的Javascript可用性(除非像游戏那样必须依赖)。Javascript可能会因为诸如重定向(您应该使用HTTP状态代码)或元素样式(为此使用CSS)之类的东西而被滥用。因此,在使用Javascript进行 *** 作之前,请检查是否有其他可能。甚至只有HTML和CSS,下拉菜单也可以!

jQuery的

jQuery就是用Javascript编写的库。当您想使Javascript跨浏览器兼容时,它变得很方便,因为不同的浏览器在Javascript实现上有一些细微的差异。它对于选择页面,特效等的某些元素也很有用。它仍然是Javascript,因此在
客户端 运行。

网络容器

这是位于服务器上并在 服务器端
运行的软件。您的Web应用程序通常放置在Web容器中。它是客户端请求和您的Web应用程序之间的接口,它可以使Web应用程序编程更加舒适。例如,Apache
Tomcat是一个Web容器。

小程序

现在我们进入Java世界。Servlet是Web应用程序的一部分,该Web应用程序位于Web容器内的服务器上,它们在
server-side 上运行。Servlet是Java类,用于处理来自客户端的 请求 并发送回 响应 。典型的HTTP
Servlet如下所示:

public class HelloWorld extends HttpServlet {    public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {        PrintWriter out = response.getWriter();        out.println("<!DOCTYPE HTML>");        out.println("<html>");        out.println("<head>");        out.println("<title>Hi</title>");        out.println("</head>");        out.println("<body>");        out.println("<p>Hello World!</p>");        out.println("</body>");        out.println("</html>");    }}

HttpServlet
类有几种
doXxx
方法,每个HTTP方法一个,开发人员可以覆盖它们。在这里,
doGet
被覆盖,这意味着当GET请求发送到此servlet时,将执行此代码。此方法获取请求和响应作为参数,
HttpServletRequest
以及
HttpServletResponse

为了使该Servlet可通过URL访问,必须配置web.xml:

<servlet>    <servlet-name>HelloWorld</servlet-name>    <servlet-class>com.example.HelloWorld</servlet-class></servlet><servlet-mapping>    <servlet-name>HelloWorld</servlet-name>    <url-pattern>/hello</url-pattern></servlet-mapping>

现在,客户可以使用GET和

/hello
URL
向我们的servlet发出请求。例如,如果我们的Web应用程序在www.example.com上运行,则要
http://www.example.com/hello
使用的正确URL将使用GET。

JSP

代表 Java服务器页面
。如您所见,使用Servlet将响应发送到客户端非常不便。一些聪明的人有个主意:“如果我们可以只向HTML页面添加Java代码呢?” 好,那就是JSP:

<!DOCTYPE HTML><html>    <head>        <title>Hello JSP</title>    </head>    <body>        <% for(int i=0; i<10; i++){     out.print("Loop number " + i); }        %>   </body></html>

实际上,(通过Web容器)将JSP转换为Java
Servlet代码并进行编译。真!这不是魔术。这意味着,它们不过是Servlet而已!这是上述JSP的等效Servlet代码:

public class ServletAbc extends GenericServlet {    public void service(ServletRequest req,ServletResponse res)  throws ServletException, IOException{        PrintWriter out = res.getWriter();        out.println("<!DOCTYPE HTML>");        out.println("<html>");        out.println("<head>");        out.println("<title>Hello JSP</title>");        out.println("</head>");        out.println("<body>");        for(int i=0; i<10; i++){ out.print("Loop number " + i);        }        out.println("</body>");        out.println("</html>");    }}

您会看到,在将响应发送到客户 之前,所有Java代码都在 服务器端 进行了处理。

JSTL

代表 Java标准标记库
。顾名思义,它是一个库,您需要先包含它,然后才能使用它。

带有Java代码的JSP仍然不是最佳解决方案。随着页面大小的增加,它变得非常不可读,降低了可维护性,并且难以阅读。那么,如果我们仅使用附加的 标签
来实现页面流,循环等并使Java类执行编程逻辑该怎么办?欢迎使用标签库!

那里有很多标记库,而JSTL是“基本”库,提供了核心功能。这包括if / else构造,循环等。它包含在JSP中,已翻译并编译为Servlet,因此在
服务器端 运行。

EL

手段 表达语言
和使用的Java对象,你在Java类创建计算表达式并访问值。通常,您将Servlet,JSP,JSTL和expression语言结合在一起:

  • 客户端请求到达Servlet。Servlet执行一些编程逻辑(例如从数据库中读取数据),并将一些Java对象存储在请求中。之后,它将请求转发到服务器上的另一个资源,例如JSP。 转发 发生在web应用中,是 不是 重定向。
  • JSP使用EL来访问请求中的Java对象,显示它们并将响应发送给客户端。

例如,这是您的Servlet:

public class HelloWorld extends HttpServlet {   public void doGet(HttpServletRequest request,          HttpServletResponse response)          throws ServletException, IOException {      // access databases, do calculations etc. here      String hello = "Hello world!";      String someBoolean = true;      request.setAttribute("helloObject", hello);      request.setAttribute("myBoolean", hello);      RequestDispatcher dispatcher = request.getRequestDispatcher("/result.jsp);      dispatcher.forward(request, response);   }}

result.jsp

<!DOCTYPE HTML><html xmlns:c="http://java.sun.com/jsp/jstl/core">    <head>        <title>Hello EL</title>    </head>    <body>        ${helloObject}        <c:if test="${myBoolean}"> The expression is true.        </c:if>    </body></html>

这将输出

Hello world! The expression is true.

注意事项
  • 我想我已经足够清楚地表明了什么在服务器端运行,什么在客户端运行。不要把它们混在一起。
  • 始终使用正确的工具完成正确的工作。HTML用于内容,CSS用于布局和样式,Javascript用于客户端编程逻辑。如果您不需要Java脚本,请不要依赖它,某些用户已将其关闭。
  • 大多数其他技术(例如JSF)都建立在现有技术之上。找出它们的基础,以了解它们在哪里运行(客户端,服务器)以及应该做什么。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5439244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-11
下一篇 2022-12-11

发表评论

登录后才能评论

评论列表(0条)

保存