Software--Architecture__Web

Java 的 Servlet API 定义了 JVM 上运行 Web 应用程序所需要的一系列接口和文件定义

 

  Servlet API 通过一个名为 web.xml 部署描述文件 (deployment descriptor)来定义 Web 应用程序,这个文件位于

classpath的 /webapp/WEB-INF/web.xml 路径下。这个文件定义了 servlet. 以及通过 servlet 容器进行配置和服务的方式。

  web.xml 文件定义了具体的请求(根据请求的路径判定)由哪一个 servlet 处理。

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>

  <filter>
    <filter-name>HeaderFilter</filter-name>
    <filter-class>com.example.HeaderFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>HeaderFilter</filter-name>
    <servlet-name>AdminConsole</servlet-name>
  </filter-mapping>

  <servlet>
    <servlet-name>AdminConsole</servlet-name>
    <servlet-class>com.example.AdminConsoleServlet</servlet-class>
  </servlet>
  <servlet>
    <servlet-name>Application</servlet-name>
    <servlet-class>com.example.ApplicationServlet</servlet-class>
  </servlet>

  <servlet-mapping>
    <servlet-name>AdminConsole</servlet-name>
    <url-pattern>/admin/*</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>Application</servlet-name>
    <url-pattern>/*</url-pattern>
  </servlet-mapping>


</web-app>

 

过滤器 ( filter ) 定义 和 映射

servlet 的定义和映射

 

二 : 创建一个简单的 HttpServlet 实现

 1 import java.io.IOException;
 2 import java.util.Date;
 3 
 4 public class TimeServlet extends HttpServlet{
 5 
 6     @Override
 7     protected void doGet(HttpServletRequest request, HttpServletResponse response)
 8         throws ServletException, IOException {
 9         final String now = new Date().toString();
10 
11         response.setContentType("text/html");
12         response.setStatus(HttpServletResponse.SC_OK);
13 
14         final String responseString = String.format("<html>" +
15                 "<head>" +
16                 "<title>Time</title>" +
17                 "</head>" +
18                 "<body> The time is %s </body>" +
19                 "</html>", now);
20 
21         response.getWriter().print(responseString);
22     }
23 
24     @Override
25     protected void doPost(HttpServletRequest request,
26                           HttpServletResponse response)
27         throws ServletException, IOException{
28         doGet(request, response);
29     }
30 }

 

  如果对 servlet 发出其他 HTTP 请求: 例如 PUT 如果没有重写,则会得到 HTTP 400 -- Bad Request 或   HTTP 405 -- Method Not Allowed  响应。

  向请求者直接返回了带有服务器当前时间的 HTML 代码块。 不建议像这样显式地编写应答数据,因为随着应用程序的增长,

很快会变得难以管理和维护。

  有一些库专门用于管理 HTML 中动态响应的文本操作。

  好的做法是将业务逻辑和要显示的结果分离开。模型-视图-控制器(Model -- View -- Controller, MVC ) 模式就是处理这种问题的常用解决方法,

还有一些框架专门实现这种处理数据及其显示之间交互的模式。 例如 Spring 框架中的实现: SpringMVC.

 

三:过滤 HTTP 请求

过滤器映射到 AdminConsole servlet , 定义在 filter-class 

  

 

posted @ 2018-02-02 13:25  君子之行  阅读(7)  评论(0)    收藏  举报