servlet技术是web开发中的一个核心部分,它包括3个重要部分:servlet开发,filter开发,listener开发。
什么是Servlet?
Servlet是运行在服务器端的Java应用程序,就是一个简单的Java类,可以用来处理请求和发送响应,因此可以与数据库进行交互、响应客户请求,还可以用来生成动态的Web页面。它与传统java应用程序的区别是它是由web服务器来进行加载和运行。
与CGI(公共网关接口)
在servlet之前,通常会使用CGI来完成客户请求等操作。
心得:Servlet一般用于后台代码开发,用来调用DAO或者业务逻辑层来完成数据库操作,还可以用来接收表单参数和完成页面跳转。
Servlet的开发
1.写java类实现HTTPServlet接口
2.在web.xml中配置
更多信息请参考:关于servlet的接口,方法等的进一步讲解
Filter是Servlet2.3新增的功能。
Filter也是一个Java类,必须实现Filter接口,必须实现Filter接口中定义的init()方法,doFilter()方法和destroy()方法。需要在web.xml中配置该Filter。
IP地址过滤器
import java.io.IOException;
import java.io.PrintWriter;
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 FilterDemo implements Filter{
protected FilterConfig filterConfig;
protected String ip;
public void destroy() {
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
String remoteIP = request.getRemoteAddr();
if(remoteIP.equals(ip)) {
response.setContentType("text/html;charset=UTF-8");
response.setCharacterEncoding("gb2312");
PrintWriter out = response.getWriter();
out.print("该IP地址被禁用,请联系管理员!");
}else {
chain.doFilter(request, response);//向下传递
}
}
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig; //设置属性filterConfig
this.ip = this.filterConfig.getInitParameter(ip); //获得初始化参数ip
}
}
<filter> <!-- 定义filter本身 -->
<filter-name>IPFilter</filter-name> <!-- 指定filter名 -->
<filter-class>org.mybatis.config.FilterDemo</filter-class> <!-- 指定filter类的全名 -->
<init-param> <!-- 初始化参数 -->
<param-name>ip</param-name>
<param-value>127.0.0.1</param-value>
</init-param>
</filter>
<filter-mapping> <!-- 定义filter映射信息 -->
<filter-name>IPFilter</filter-name> <!-- 指定filter名称 -->
<url-pattern>/*</url-pattern> <!-- 指定过滤URL -->
</filter-mapping>
Listener技术同样也是Servlet2.3新增的功能,中文名监听器。
通过Listener可以监听容器中某一执行动作,并根据其要求做出相应的响应。
实例:servlet上下文监听器
package org.mybatis.config;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class ListenerDemo implements ServletContextListener{
/*监听servlet上下文的销毁*/
public void contextDestroyed(ServletContextEvent arg0) {
System.out.println("servletContext销毁");
}
/*监听servlet上下文的创建*/
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("servletContext创建");
}
}
配置web.xml
<listener>
<listener-class>org.mybatis.config.ListenerDemo</listener-class>
</listener>