当前位置:编程学习 > JAVA >>

JavaWeb体系结构的理解-5.Servlet与过滤器

Servlet
Servlet是运行于Web服务器端的Java应用程序,它使用Java语言编写,具有Java语言的优点。不同于其他Java程序,Servlet具有对HTTP进行处理的能力,但其运行需要Web容器的支持。

Servlet和JSP的差别在于:1.JSP更具有显示层的角色2.JSP符合脚本语言特点,通过JSP内置对象编程。Servlet是遵循的API标准,使用Servlet的API编程。3.速度上Servlet较快,因为它不是动态编译的。

Servlet继承自GenericServlet,而GenericServlet实现了接口ServletCofing、Servlet和Serializable。一般我们编写的Servlet都继承自Servlet的子类HttpServlet,HttpServlet实现了Servlet,并且对HTTP请求处理作出定义。HttpServlet的方法为do[Get|Post|Put],这三个方法处理提交的请求。HttpRequest封装了Http请求,通过它可以获取用户端传递的Http请求参数,他的方法有get[ContextPath|Cookies|Method|QueryString|Request|Session]。HttpResponse封装了http的请求回应,通过它可以向客户端发送回应,其常用方法为send[Error|Redirect]、addCookie等。

在创建了继承自HttpServlet的Servlet后,还必须在Web.xml中对它进行配置,使用<servlet>标签配置servlet对象,<servlet-mapping>配置Servlet映射。

Servlet的处理流程是:客户端请求Web容器,容器创建客户端对应的ServletRequest与ServletResponse对象,在创建完成后,容器调用HttpServlet的相关方法(do[Post|Get|Put]),do方法获取ServletRequst的参数,进行处理后使用ServletResponse同志Web容器对客户端返回响应,Web容器销毁ServletResponse和ServletRequest对象,完成请求处理过程。

以用户登录为例说明以上步骤:

Servlet代码如下:

[java] 
package www.gongqingkui.cn; 
import java.io.IOException; 
import java.io.PrintWriter; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
import javax.servlet.http.HttpServletRequest; 
import javax.servlet.http.HttpServletResponse; 
public class login extends HttpServlet { 
         public voiddoGet(HttpServletRequest request, HttpServletResponse response) 
                            throwsServletException, IOException { 
                  doPost(request, response); 
         } 
         public voiddoPost(HttpServletRequest request, HttpServletResponse response) 
                            throwsServletException, IOException { 
                  response.setContentType("text/html"); 
                  PrintWriterout = response.getWriter();             
                  String user =request.getParameter("user"); 
                  Stringpassword =request.getParameter("password"); 
                  out.println(user+password); 
                  if((user !=null && password !=null)&&(user.equals("admin")&& password.equals("123"))) 
                  {        out.println("ok"); 
                  }else{       out.println("unok"); 
                  } 
                  out.flush(); 
                  out.close(); 
         } 

配置信息为:

[html] 
<servlet> 
   <servlet-name>login</servlet-name> 
   <servlet-class>www.gongqingkui.cn.login</servlet-class> 
  </servlet> 
  
  <servlet-mapping> 
   <servlet-name>login</servlet-name> 
    <url-pattern>/servlet/login</url-pattern> 
  </servlet-mapping> 
Index.jsp页面写法为:

[html] 
<form action="servlet/login" method="GET"> 
             <input type="text" name="user"value="admin"/> 
             <input type="text" name="password"value="123"/> 
             <input type="submit"/>           
</form> 
从index.jsp页面开始执行,传递参数到servlet/login,这个地址是web.xml配置的,对应于www.gongqingkui.cn.login这个servlet类,调用该类的doGet方法进行处理,判断如果用户名和密码正确,在页面返回相应信息。

过滤器
过滤器和Servlet的编写方法、配制方法类似。他拦截客户端的请求,对他们进行处理,之后再转发给过滤器链上的其它过滤器,一直到最后转发给目标Servlet,等待Servlet处理完成后,在反序通过过滤器返回给客户端。过滤器都必须实现Filter接口,这个接口的方法有init、doFilter和destory。此外FilterConfig接口用于获取过滤器的配置信息,由Web容器实现。FileterChain接口的doFilter方法用于将请求传给下一个过滤器,它也由Web容器实现。过滤器的配置信息也需要放在web.xml中,使用<filter>标签配置过滤器,使用<filter-mapping>标签配置映射信息。

一个典型的实例就是使用过滤器对字符进行转码:

首先建立过滤器Filter

[java]
package www.gongqingkui.cn; 
import java.io.IOException; 
  
import javax.servlet.Filter; 
import javax.servlet.FilterChain; 
import javax.servlet.FilterConfig; 
import javax.servlet.ServletException; 
import javax.servlet.ServletRequest; 
import javax.servlet.ServletResponse; 
  
  
public class characterFilter implements Filter { 
  
         String encoding =null; 
         public void destroy(){ 
                  encoding =null; 
  
         } 
  
         public voiddoFilter(ServletRequest arg0, ServletResponse arg1, 
                            FilterChainarg2) throws IOException, ServletException { 
&

补充:Web开发 , 其他 ,
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,