servlet相关知识,使用servlet实现定时刷新,实现页面登录次数统计

1、servlet: 动态的web开发技术,本质就是一个类,运行在服务器端的一个java小程序;

作用:处理业务逻辑,生成动态web内容

2、接受参数:  格式:key=value
    Sting value=request.getParameter("key")

回写内容:
    response
    response.getWriter().print("success");
    处理响应数据中文乱码:
        resp.setContentType("text/html;charset=utf-8"); //建议大家放在方法中的第一行

3、servlet生命周期 ★★★
    void init(ServletConfig config):初始化
     * 初始化方法
     * 执行者:服务器
     * 执行次数:一次
     * 执行时机:默认第一次访问的时候
    void service(ServletRequest request,ServletResponse response):服务 处理业务逻辑
     * 服务
     * 执行者:服务器
     * 执行次数:请求一次执行一次
     * 执行时机:请求来的时候
    void destroy():销毁
     * 销毁
     * 执行者:服务器
     * 执行次数:只执行一次
     * 执行时机:当servlet被移除的时候或者服务器正常关闭的时候
    
     serlvet是单实例多线程
     默认第一次访问的时候,服务器创建servlet,并调用init实现初始化操作.并调用一次service方法
     每当请求来的时候,服务器创建一个线程,调用service方法执行自己的业务逻辑
     当serlvet被移除的时候服务器正常关闭的时候,服务器调用servlet的destroy方法实现销毁操作.

4、url-pattern的配置:★
    方式1:完全匹配  必须以"/"开始 例如: /hello /a/b/c
    方式2:目录匹配  必须"/"开始  以"*"结束   例如: /a/*  /*
    方式3:后缀名匹配 以"*"开始 以字符结尾 例如: *.jsp  *.do  *.action

优先级:
        完全匹配>目录匹配>后缀名匹配

案例:实现登录失败时:3秒之后自动跳转至其他页面以及登录次数统计

loginservlet:

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.设置编码
		response.setContentType("text/html;charset=utf-8");
		
		//1.接受用户名和密码
		String username=request.getParameter("username");
		String password=request.getParameter("password");
		
		//2.调用userservice 里的login(username,password) 返回值:User user
		User user = null;
		try {
			user = new UserService().login(username,password);
		} catch (SQLException e) {
			e.printStackTrace();
			throw new RuntimeException("网络异常,请稍后再试!");
		}
		
		//3.判断user是否为空
		if(user==null){
			//3.1若为空 写"用户名和密码不匹配"
			response.getWriter().print("用户名和密码不匹配,3秒之后跳转");
			//案例2-定时跳转
			response.setHeader("refresh", "3;url=/day0902/login.htm");
			
		}else{
			//3.2若不为空 写"xxx:欢迎回来"
			response.getWriter().print(user.getUsername()+":欢迎回来");
			
			//4.获取全局管理者
			ServletContext context = this.getServletContext();
			
			//5.获取总次数
			Integer cishu = (Integer) context.getAttribute("count");
			
			//6.将次数+1
			cishu++;
			
			//7.将次数再次放入域对象中
			context.setAttribute("count", cishu);
			
		}
	}
}

showservlet代码:
public class ShowServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		//0.设置编码
		response.setContentType("text/html;charset=utf-8");
		
		//1.获取全局管理者
		ServletContext context = this.getServletContext();
		
		//2.获取登录的次数
		Integer cishu=(Integer) context.getAttribute("count");
		
		//3.在页面上打印总次数
		response.getWriter().print("登录成功的总次数为:"+cishu);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}


你可能感兴趣的:(后端)