【图】Servlet 入门理解 类似 httphandler【 http请求图】

原文:http://blog.csdn.net/wangyajin333/article/details/39937163

当学到Servlet这个新技术的时候,不是着急去学Servlet这个Java类有什么属性、方法,而是先去了解这个东西什么时候会用到,既然都是BS的,那ASP.NET中有没有类似的?然后就有了我的这篇博客。

 

   1.Servlet产生背景和主要作用

   我们都知道网页有静态和动态之分。静态的只能看看,而动态可以实现客户端和服务器的交互,比如登录的功能,我们输入用户名和密码后提交到服务器,服务器会处理这些信息,如果正确的话则进入主页。若不正确,则给出提示信息。这是我们很常实现的例子,可是我们有没有想过:客户端到服务器之间这个交互的过程是怎么实现的?之前我没有想过。直到遇到了Servlet.Servlet是Java中用来处理BS架构下,客户端请求的响应处理。

 

   2.java中Servlet和ASP.net中的HttpHandler的对比

ASP.NET:

   当一个HTTP请求经同HttpModule容器传递到HttpHandler容器中时,ASP.NET Framework会调用HttpHandler的ProcessRequest成员方法来对这个HTTP请求进行真正的处理。以一个ASPX页面为例,正是在这里一个ASPX页面才被系统处理解析,并将处理完成的结果继续经由HttpModule传递下去,直至到达客户端。我们看一张图帮助理解:

Java:

   在这个过程中,HttpServletRequest和HttpServletReponse相当于上面的HttpModule起到传过去,传回来的作用。Servlet(HttpServlet)相当于HttpHandler处理客户端请求。

 

3.Servlet是什么

现在我们说说Servlet是什么。Servlet就是一个Java类。类就会有一系列的属性和方法。了解这些可以看详细的API文档。这里不再赘述。

Java包组成:javax.servlet和javax.servlet.http. 在javax.servlet包中定义了所有的Servlet类都必须实现或扩展的的通用接口和类.在javax.servlet.http包中定义了采用HTTP通信协议的HttpServlet类.

 

4.Demo(Tomcat)

login.html

 

[html] view plain copy
 
  1. <html>  
  2.     <head>  
  3.         <title>Login</title>  
  4.     </head>  
  5.     <body>  
  6.         <form action="exam/login">  
  7.         用户名:<input type="text" name="username"<br>  
  8.         密 码:<input type="password" name="password"<br>  
  9.         <input type="submit" value="登录">  
  10.         </form>  
  11.     </body>  
  12. </html>  


web.xml

 

 

[html] view plain copy
 
  1. <?xml version="1.0" encoding="ISO-8859-1"?>  
  2.   
  3. <web-app xmlns="http://java.sun.com/xml/ns/javaee"  
  4.    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  5.    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"  
  6.    version="2.5">   
  7.   
  8.      <servlet>  
  9.         <servlet-name>MyServlet</servlet-name>  
  10.         <servlet-class>loginservlet</servlet-class>  
  11.      </servlet>  
  12.      <servlet-mapping>  
  13.         <servlet-name>MyServlet</servlet-name>  
  14.         <url-pattern>/login</url-pattern>  
  15.      </servlet-mapping>  
  16.        
  17.      <servlet>       
  18.   
  19. </web-app>  

loginServlet.java

 

 

[java] view plain copy
 
  1. import javax.servlet.http.*;  
  2. import javax.servlet.*;  
  3. import java.io.*;  
  4.   
  5. public class loginservlet extends HttpServlet{  
  6.     public void doGet(HttpServletRequest req,  
  7.                      HttpServletResponse resp)  
  8.               throws ServletException,  
  9.                      IOException{  
  10.           String username = req.getParameter("username");  
  11.           String password = req.getParameter("password");  
  12.             
  13.           System.out.println("username = " + username );  
  14.           System.out.println("password = " + password );  
  15.             
  16.           resp.setContentType("text/html");  
  17.           resp.getWriter().println("Login Success!");  
  18.   }               
  19. }  

对应时序图:

 

 

   总结:以前没有想过客户端和服务器如何实现交互。Servlet开始让我思考。学习不能总是看以前学得不扎实。学得时候做好总结,往前看。但学新的东西要联系旧的东西,这样既能巩固旧知识,也能使学习变得轻松。这也是为什么我们学了后面的,再看前面学得容易了的原因。

posted @   阿玛  阅读(1621)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
点击右上角即可分享
微信分享提示