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

浙公网安备 33010602011771号