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开发 , 其他 ,