Tomcat

  • 配置文件
<servlet>
    <servlet-name>dateServlet</servlet-name>
    <servlet-class>web.DateServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>dateServlet</servlet-name>
    <url-pattern>/date</url-pattern>
</servlet-mapping>
  • 重定向和转发
    重定向:服务器发送302状态码和Location消息头,浏览器收到后消息头中的地址发送请求;
    转发:一个servlet没做完就给另一个servlet来做,一般是jsp
response.sendRedirect(String url);
request.setAttribute(String name,Object obj);//绑定数据到requset上
RequestDispatcher rd = request.getRequestDispatcher(String url);//获取转发器
rd.forward(request,response);//转发
  • cookies和session
    cookies:服务端会以set-cookie消息头将数据发送给浏览器,浏览器会保存,当浏览器访问相同路径是会将cookie返回;cookie路径:该路径和该路径的子路径有效。
    session:当服务器接收到请求后,可以创建一个session对象,此session对象会生成一个sessionId,后将sessionId以cookie的方式返回给浏览器;
//创建并发送cookie
Cookie c = new Cookie(String name,String value);
注:
    cookie只能存放字符串。
response.addCookie(c);
//读取cookie
Cookie[] cookies = request.getCookies();
String cookie.getName();
String cookie.getValue();
HttpSession session = request.getSession();
/*先查看请求当中有没有sessionId,如果没有,
则创建一个session对象;如果有sessionId,则依据该sessionId
查找对应的session对象,如果找到了,则返回该session对象,如果
找不到,则创建一个新的session对象。*/
session.setAttribute(String name,Object obj);
session.getAttribute("name");

session登录验证,登陆后创建session,并setAttribute(“user”,user),再次访问时获取session,并getAttribute(“user”),如果返回值为null,则未登录,重定向到登录页面,如果不为null,则登录过。

  • servlet生命周期
    1.创建:
    可以收到请求后创建,也可以容器启动后就创建
<load-on-startup>1</load-on-startup>

2.初始化init(),主要用来读取中的参数,servlet的父类GenericServlet提供了getServletConfig()方法来获取config对象(保存了中的数据)
web.xml:

<servlet>
    <servlet-name>BmiServlet</servlet-name>
    <servlet-class>web.BmiServlet</servlet-class>
    <init-param>
    	<param-name>male</param-name>
    	<param-value>25,20</param-value>
    </init-param>
    <init-param>
    	<param-name>female</param-name>
    	<param-value>24,19</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
    <servlet-name>BmiServlet</servlet-name>
    <url-pattern>/bmi</url-pattern>
  </servlet-mapping>

读取参数

@Override
	public void init() throws ServletException {
		//读取初始化参数
		ServletConfig config = getServletConfig();
		String male = config.getInitParameter("male");
		String female = config.getInitParameter("female");
	}

3.就绪
调用service(request,response)方法
4.销毁
容器在删除servlet对象之前,会调用该对象的destroy方法。

  • 过滤器
    当servlet容器收到请求之后,如果有过滤器,会先调用;
    step1.写一个java类,实现Filter接口。
    step2.在接口方法当中,实现拦截处理逻辑。
public void doFilter(request,response,chain){
	String content = request.getParameter("content");
	if(content.indexOf("狗") != -1){
		response.getWriter().println("评论包含了违禁词");
	}else{
		/*
		 * 继续向后执行(即调用后续的过滤器或者是Servlet)。
		 */
		chain.doFilter(req, res);
	}
}
	/**
	 * 容器在创建好过滤器实例之后,会调用该实例的init方法。
	 * 注:该方法只会执行一次。
	 * 	FilterConfig对象类似于ServletConfig,可以用来读取初始化参数。
	 */
	public void init(FilterConfig arg0)  throws ServletException {
		System.out.println("CommentFilter的init方法");
	}

step3.配置过滤器(web.xml)。

  <filter>
  	<filter-name>commentFilter</filter-name>
  	<filter-class>web.CommentFilter</filter-class>
  </filter>
  <filter-mapping>
  	<filter-name>commentFilter</filter-name>
  	<url-pattern>/comment</url-pattern>
  </filter-mapping>
  • servlet上下文
    容器启动之后,会为每一个web应用创建唯一的一个符合ServletContext接口要求的对象(即Servlet上下文),该对象会一直存在,除非容器关闭。ServletConfig,FilterConfig,GenericServlet,HttpSession都提供了getServletContext方法。setAttribute、getAttribute来绑定数据,绑订到servlet上下文上的数据,所有用户都能共享;绑订到这些对象上的数据,生存时间长短是不一样的(request < session < servlet上下文)。
    ServletContext读取全局参数
<context-param>
	<param-name>name</param-name>
	<param-value>value</param-value>
</context-param>
  • 监听器
    用来监听容器产生的事件并进行 相应的处理,如:创建或销毁了request,session,servlet,或调用了他们的setAttribute(),removeAttribute()方法
    使用创建session或销毁session监听器监测在线人数
public class CountListener implements HttpSessionListener{
	//容器在创建session对象时调用此方法
	public void sessionCreated(HttpSessionEvent arg0) {
		HttpSession session = arg0.getSession();
		ServletContext sctx = session.getServletContext();
		Integer count = (Integer)sctx.getAttribute("count");
		if(count == null){
			count = 1
		}else{
			count++
		}
		sctx.setAttribute("count",count);
	}
	//容器销毁session时执行此方法
	public void sessionDestroy(HttpSessionEvent arg0){
		ServletContext sctx = arg0.getSession.getServletContext();
		sctx.setAttribute("count",sctx.getAttribute("count"));
	}
}
<listener>
  		<listener-class>web.CountListener</listener-class>
 </listener>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值