servlet随笔-过滤器和监听器

  1. 过滤器

Dynamic web module version 2.5 项目的版本为2.5

Step1: 编写 java 类实现 Filter 接口,并实现其 doFilter 方法。

public class Filter01 implements Filter{
	@Override
	public void destroy() {
		// TODO Auto-generated method stub
		System.out.println("filter01销毁了,难受啊?!马飞?");
	}
	@Override
	public void doFilter(ServletRequest request1, ServletResponse response2, FilterChain chain)
			throws IOException, ServletException {
		// TODO Auto-generated method stub
		//chain.doFilter方法之前处理的是请求的数据
		System.out.println("Filter01 filter....");
		//放行资源
		chain.doFilter(request1,response2);
		//chain.doFilter方法之后处理的是响应的数据
		System.out.println("Filter01  end....");
	}
	@Override
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
		System.out.println("filter01出生了");
	}
}

Step2: 在 web.xml 文件中对编写的 filter 类进行注册,并设置它所能拦截 的资源

<filter>
  <filter-name>Filter02</filter-name>
  <filter-class>包名.类名</filter-class>
</filter>
<filter-mapping>
  <filter-name>Filter02</filter-name>
  <url-pattern>/*</url-pattern>		//拦截所有(/*)
</filter-mapping>

Dynamic web module version 3.0 项目版本为3.0及以上

@WebFilter("/*")		//不需要配置web.xml,这里直接设置拦截所有
public class filter01 implements Filter {
    public filter01() {
        // TODO Auto-generated constructor stub
    }

	public void destroy() {
		// TODO Auto-generated method stub
	}

	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
		chain.doFilter(request, response);
	}

	public void init(FilterConfig fConfig) throws ServletException {
		// TODO Auto-generated method stub
	}
}

  1. 监听器

Dynamic web module version 2.5 项目的版本为2.5

Step1:创建一个监听器,需要实现某种接口,根据需求选取 HttpSessionListener

public class Listener01 implements HttpSessionListener {

	@Override
	public void sessionCreated(HttpSessionEvent se) {
		System.out.println("Session create....");
	}

	@Override
	public void sessionDestroyed(HttpSessionEvent se) {
		System.out.println("Session destroy...");	
	}
}

Step2:在 web.xml 中配置该监听器

<listener>
    <listener-class>com.shsxt.listener.Listener01</listener-class>
  </listener>

在线统计人数案例

监听器代码

public class OnlineListener implements HttpSessionListener {
	// 默认在线人数
	private Integer onlineNumber = 0;
	public OnlineListener() {

	}
	/**
	 * session被创建
	 */
	public void sessionCreated(HttpSessionEvent se) {
		// 人数+1
		onlineNumber++;
		// 设置到域对象中
		se.getSession().getServletContext().setAttribute("onlineNumber", onlineNumber);
	}

	public void sessionDestroyed(HttpSessionEvent se) {
		// 人数-1
		onlineNumber--;
		// 设置到域对象
		se.getSession().getServletContext().setAttribute("onlineNumber", onlineNumber);
	}
}

Servlet代码

public class OnlineServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void service(HttpServletRequest request1, HttpServletResponse response2)
			throws ServletException, IOException {
		// 设置响应类型及编码格式
		response2.setContentType("text/html;charset=UTF-8");

		// 获取在线人数的数量
		// 得到appliction对象,并获取存到application域对象的值
		Integer onlineNumber = (Integer) request1.getSession().getServletContext().getAttribute("onlineNumber");

		// 得到字符输出流
		PrintWriter out = response2.getWriter();

		// 得到当前访问
		String ip = request1.getRemoteAddr();
		System.out.println("当前ip:" + ip);
		
		out.write("<h2>在线人数统计</h2><h3>当前人数为:"+ onlineNumber+"</h3><h3>当前IP:"+ip+"</h3><h4><a href='layout'>退出</a></h4>" );
		
	}
}

web.xml配置

  <listener>
    <listener-class>xyz.xkun.listener.OnlineListener</listener-class>
  </listener>
  <servlet>
    <servlet-name>OnlineServlet</servlet-name>
    <servlet-class>xyz.xkun.servlet.OnlineServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>OnlineServlet</servlet-name>
    <url-pattern>/o1</url-pattern>
  </servlet-mapping>

Dynamic web module version 3.0 项目的版本为3.0及以上
监听事件不需要配置web.xml

@WebListener
public class listener01 implements HttpSessionListener {

    public listener01() {
        // TODO Auto-generated constructor stub
    }

    public void sessionCreated(HttpSessionEvent arg0)  { 
         // TODO Auto-generated method stub
    }

    public void sessionDestroyed(HttpSessionEvent arg0)  { 
         // TODO Auto-generated method stub
    }
	
}
  1. Servlet3.0 注解

@WebServlet
开发 servlet 项目,使用@WebServlet 将一个继承于 javax.servlet.http.HttpServlet 的类定义为 Servlet 组件。在 Servlet3.0 中 , 可以 使用@WebServlet 注解将一个继承于 javax.servlet.http.HttpServlet 的类标注为可 以处理用户请求的 Servlet。

// @WebServlet("/Servlet01")
// @WebServlet(name="Servlet01",value="/s01")
// @WebServlet(name="Servlet01",value= {"/s01","/s001"})
// @WebServlet(urlPatterns="/s0001")
// @WebServlet(urlPatterns = { "/s0001", "/s00001" })

@WebFilter
@WebFilter 用来配置过滤器

@WebFilter("/cccc")
public class filter01 implements Filter {
}

@WebListener
特定监听器接口的类定义 为监听器。

@WebListener	//在此加入集合,按照需求选择比如  1)ServletContext, 2)HttpSession, 3)ServletRequest 
public class listener01 implements HttpSessionListener {
}

@MultipartConfig
使用注解@MultipartConfig 将一个 Servlet 标识为支持文件上传。 Servlet3.0 将 multipart/form-data 的 POST 请求封装成 Part,通过 Part 对上传 的文件进行操作。

文件上传案例
servlet代码

@MultipartConfig   //必须设置
@WebServlet("/upload")	  //路径
public class UploadServet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	@Override
	protected void service(HttpServletRequest request1, HttpServletResponse response2)
			throws ServletException, IOException {
		// TODO Auto-generated method stub
		// 如果是普通的表单项,就是通过获取参数的方式
		request1.setCharacterEncoding("UTF-8");
		String uname = request1.getParameter("uname");
		System.out.println(uname);

		// Servlet3.0将multipart/form-data的post的请求封装成Part
		// request.getPart("myfile");myfile代表的就是前台表单中的文件域,name的属性值
		Part part = request1.getPart("myfile");
		// 得到上传的文件名
		String fileName = part.getSubmittedFileName();
		// 上传文件到指定目录
		part.write(request1.getServletContext().getRealPath("/") + fileName);
		System.out.println(request1.getServletContext().getRealPath("/"));
	}

}

html代码

<body>
	<form action="upload" method="post" enctype="multipart/form-data">
		用户名:<input type="text" name="uname" /> &nbsp;
		文件名:<input type="file" name="myfile"  /> 
		<button>上传</button>
	</form>
</body>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
东南亚位于我国倡导推进的“一带一路”海陆交汇地带,作为当今全球发展最为迅速的地区之一,近年来区域内生产总值实现了显著且稳定的增长。根据东盟主要经济体公布的最新数据,印度尼西亚2023年国内生产总值(GDP)增长5.05%;越南2023年经济增长5.05%;马来西亚2023年经济增速为3.7%;泰国2023年经济增长1.9%;新加坡2023年经济增长1.1%;柬埔寨2023年经济增速预计为5.6%。 东盟国家在“一带一路”沿线国家中的总体GDP经济规模、贸易总额与国外直接投资均为最大,因此有着举足轻重的地位和作用。当前,东盟与中国已互相成为双方最大的交易伙伴。中国-东盟贸易总额已从2013年的443亿元增长至 2023年合计超逾6.4万亿元,占中国外贸总值的15.4%。在过去20余年中,东盟国家不断在全球多变的格局里面临挑战并寻求机遇。2023东盟国家主要经济体受到国内消费、国外投资、货币政策、旅游业复苏、和大宗商品出口价企稳等方面的提振,经济显现出稳步增长态势和强韧性的潜能。 本调研报告旨在深度挖掘东南亚市场的增长潜力与发展机会,分析东南亚市场竞争态势、销售模式、客户偏好、整体市场营商环境,为国内企业出海开展业务提供客观参考意见。 本文核心内容: 市场空间:全球行业市场空间、东南亚市场发展空间。 竞争态势:全球份额,东南亚市场企业份额。 销售模式:东南亚市场销售模式、本地代理商 客户情况:东南亚本地客户及偏好分析 营商环境:东南亚营商环境分析 本文纳入的企业包括国外及印尼本土企业,以及相关上下游企业等,部分名单 QYResearch是全球知名的大型咨询公司,行业涵盖各高科技行业产业链细分市场,横跨如半导体产业链(半导体设备及零部件、半导体材料、集成电路、制造、封测、分立器件、传感器、光电器件)、光伏产业链(设备、硅料/硅片、电池片、组件、辅料支架、逆变器、电站终端)、新能源汽车产业链(动力电池及材料、电驱电控、汽车半导体/电子、整车、充电桩)、通信产业链(通信系统设备、终端设备、电子元器件、射频前端、光模块、4G/5G/6G、宽带、IoT、数字经济、AI)、先进材料产业链(金属材料、高分子材料、陶瓷材料、纳米材料等)、机械制造产业链(数控机床、工程机械、电气机械、3C自动化、工业机器人、激光、工控、无人机)、食品药品、医疗器械、农业等。邮箱:market@qyresearch.com

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值