开发步骤
1.创建类
public class TestServlet extends HttpServlet(Request req, Response res){
...
}
2.在web.xml中注册servlet实现类
//1.注册
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>com.znq.controller.TestServlet</servlet-class>
<!--
手动配置,服务器启动时就创建实现类实例对象
中间填写大于0的整数即可
-->
<load-on-starup>1</load-on-starup>
</servlet>
//2.配置映射
<servlet-mapping>
<servlet-name>TestServlet</servlet-name>
<url-pattern>/testServlet</url-pattern>
</servlet-mapping>
servlet对象生命周期
1.所有servlet接口实现类的实例对象,皆由Http服务器创建,开发人员不能手动创建
2.默认情况下,Http服务器在接收到第一次对于当前servlet请求时自动创建实现类实例对象
3.在Http服务器运行期间,一个servlet实现类只能创建一个实例对象(单例模式)
4.Http服务器关闭时,自动将所有的servlet对象销毁
HttpServletResponse接口
1.介绍
1)HttpServletResponse接口来自于Servlet规范中
2)HttpServletResponse接口实现类由Http服务器负责提供
3)HttpServletResponse接口负责将doGet/doPost方法执行结果写入到响应体返回给浏览器
2.主要作用:
1.将执行结果以二进制形式写入到响应体中
2.设置响应头中content-type属性
3.设置响应头中location属性,将一个请求地址赋值给location
HttpServletRequest接口
1.介绍
1.HttpServletRequest接口来自于Servlet规范中(servlet-api.jar)
2.HttpServletRequest接口实现类由Http服务器负责提供
3.HttpServletReqyest接口负责在doGet/doPost方法运行时读取Http请求协议包中的信息
2.作用
1.可以读取Http请求协议包中的请求行、请求头、请求体信息
2.可以代替浏览器向Http服务器申请资源文件调用
3.乱码问题
浏览器以get方式发送带中文参数时能够正常读取,而post方式则乱码。
问题在于get方式携带参数是在请求体中,由tomcat服务器负责解码,默认使用utf-8字符集。而post方式参数在请求体中,由request对象负责解码,所使用的字符集为ISO-8859-1,所以需要设置字符集为utf-8。
request.setCharacterEncoding("utf-8");
监听器接口
介绍:
1.一组来自于servlet规范下的接口,共有8个接口
2.监听器接口实现类需要由开发人员手动开发
3.监听器接口用于监控作用域对象生命周期变化时刻以及作用域对象共享数据变化时刻
作用域对象:
1.在servlet中认为在服务端内存中可以为两个servlet之间提供共享数据方案的对象,被称为作用域对象
2.servlet规范下作用域对象:
ServletContext : 全局作用域对象
HttpSession : 绘画作用域对象
HttpServletRequest : 请求作用域对象
1.ServletContextListener接口
作用:通过这个接口检测全局作用域对象被创建时刻及被销毁时刻
public class OneListener implements ServletContextListener {
@Override
//在全局作用域对象被Http服务器创建是调用
public void contextInitialized(ServletContextEvent sce) {
System.out.println("对象创建");
}
@Override
//在全局作用域对象被Http服务器销毁时调用
public void contextDestroyed(ServletContextEvent sce) {
System.out.println("对象销毁");
}
}
在web.xml文件中配置
<listener>
<listener-class>com.znq.listener.OneListener</listener-class>
</listener>
2.ServletContextAttributeListener接口
作用:通过这个接口检测全局作用域对象共享数据变化时刻
public class TwoListener implements ServletContextAttributeListener {
@Override
public void attributeAdded(ServletContextAttributeEvent event) {
System.out.println("新增共享数据");
}
@Override
public void attributeReplaced(ServletContextAttributeEvent event) {
System.out.println("更新共享数据");
}
@Override
public void attributeRemoved(ServletContextAttributeEvent event) {
System.out.println("删除共享数据");
}
}
web.xml中配置
<listener>
<listener-class>com.znq.listener.TwoListener</listener-class>
</listener>
过滤器接口
介绍:
1.来自于servlet
2.Filter接口实现类由开发人员实现
3.Filter接口在Http服务器调用系统资源文件之前,对Http服务器进行拦截
作用:
1.拦截Http服务器,帮助Http服务器检测当前请求合法性
2.拦截Http服务器,对当前请求进行增强操作
1)拦截过滤
public class OneFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//1.从浏览器获取数据
String id = servletRequest.getParameter("id");
if (Integer.valueOf(id) < 10) {
//放行
filterChain.doFilter(servletRequest,servletResponse);
}else {
//条件不符,拦截
...
}
}
}
web.xml中配置过滤器
<!-- 1.注册过滤器-->
<filter>
<filter-name>oneFilter</filter-name>
<filter-class>com.znq.filter.OneFilter</filter-class>
</filter>
<!-- 2.配置过滤器作用范围-->
<filter-mapping>
<filter-name>oneFilter</filter-name>
<url-pattern>/index.jsp</url-pattern>
</filter-mapping>
2)功能增强
public class TwoFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
//功能增强
servletRequest.setCharacterEncoding("utf-8");
//放行
filterChain.doFilter(servletRequest,servletResponse);
}
}
web,xml中配置此过滤器
<filter>
<filter-name>TwoFilter</filter-name>
<filter-class>com.znq.filter.TwoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>TwoFilter</filter-name>
<url-pattern>/*</url-pattern><!--*表示在访问所有资源文件-->
</filter-mapping>