JSP Servlet

Servlet是运行在服务器端的小程序。

JSP会转换为Servlet,在服务器运行的是servlet。

public class className extends HttpServlet{
	protected void doGet(HttpServletRequest req, HttpServletResponse resp){
		
	};

	protected void doPost(HttpServletRequest req, HttpServletResponse resp){
		doGet(req,resp);
	};
}

作用:

  • 读取客户提交的数据。
  • 读取浏览器发送的隐式请求数据
  • 生成结果(响应)
  • 向客户发送显式数据
  • 发送隐式的http响应数据

 

原理:

 

 

 

生命周期:

  • 初始化:init()
  • 响应请求:service()
  • 终止阶段:destroy()

 

应用输出

生成网页

    protected void doGet(HttpServletRequest req, HttpServletResponse resp){
		PrintWriter out = resp.getWriter();
		resp.setContentType("text/html;charset=UTF-8");
		resp.setCharacterEncoding("UTF-8");
		out.println("<html>");
		//...输入出html文本
    };

 

请求转发

RequestDispatcher dispatcher = req.getRequestDispatcher("target.jsp");//请求转发

 

servlet过滤器

过滤器是客户端与目标资源间的中间层组件,用于拦截客户端的请求与响应信息

作用:

  • 正常调用请求资源
  • 用修改后的请求信息调用请求资源
  • 调用请求的资源,修改请求响应,再将响应发送到客户端
  • 禁止调用该资源,将请求重定向到其他的资源,或者返回一个特定的状态码

 

创建一个过滤器涉及4个基本步骤

(1) 创建实现Filter接口的类。

(2) 将过滤行为放入doFilter方法。

(3) 调用FilerChain对象的doFilter方法。

调用FilterChain的doFilter方法时,下一个关联的过滤器将被调用。

如果没有其他与Servlet或JSP页面相关联的过滤器,就调用Servlet或JSP本身。

(4) 将过滤器与特定的servlet或JSP页面关联。

使用部署描述文件(web.xml)中的filter元素和filter-mapping元素。

 

生命周期

生命周期

(1) 创建阶段:当Web应用部署或Web服务器启动后,Web容器会自动在web.xml配置文件中或在注解中找到过滤器配置声明,根据声明标记定义过滤器类,将类定义加载到服务器内存,调用此类的默认构造方法,创建过滤器对象。

(2) 初始化阶段:调用init()方法。传入FilterConfig对象,完成过滤器的初始化工作。init方法只执行一次,以后每次执行过滤方法时,init方法不会执行。

(3) 过滤服务阶段:浏览器向Web服务器发出HTTP请求时,当请求的URL地址符合过滤器地址映射时,首个声明的过滤器的过滤方法doFilter被Web容器调用,完成过滤处理工作。过滤处理完成后执行FilterChain对象的doFilter方法,将请求传递到下一个过滤器,如果已经到过滤器链末端,则传递到请求的Web文档,一般是JSP页面或Servlet。

每次请求符合过滤器配置的URL时,过滤方法都将被执行一次。

(4) 终止阶段:调用destroy()方法。当容器检测到一个Filter对象应该从服务器中移除时,会调用此方法完成Filter对象被销毁前的收尾工作。

 

例子:中文字符转换器

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter(filterName = "EncodeFilter" ,dispatcherTypes = {DispatcherType.REQUEST,DispatcherType.FORWARD,
DispatcherType.INCLUDE,DispatcherType.ERROR}
    ,urlPatterns = {"/*"})//对网站下所有页面进行中文过滤
public class EncodeFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) 
throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

配置servlet

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值