JavaEE_Servlet

1.Servlet 是什么?

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

2.Servlet 任务

  • 读取客户端(浏览器)发送的显式的数据。这包括网页上的 HTML 表单,或者也可以是来自 applet 或自定义的 HTTP 客户端程序的表单。
  • 读取客户端(浏览器)发送的隐式的 HTTP 请求数据。这包括 cookies、媒体类型和浏览器能理解的压缩格式等等。
  • 处理数据并生成结果。这个过程可能需要访问数据库,执行 RMI 或 CORBA 调用,调用 Web 服务,或者直接计算得出对应的响应。
  • 发送显式的数据(即文档)到客户端(浏览器)。该文档的格式可以是多种多样的,包括文本文件(HTML 或 XML)、二进制文件(GIF 图像)、Excel 等。
  • 发送隐式的 HTTP 响应到客户端(浏览器)。这包括告诉浏览器或其他客户端被返回的文档类型(例如 HTML),设置 cookies 和缓存参数,以及其他类似的任务。Servlet架构

3.Servlet中post请求与get请求之间的区别。

  • 数据传递方式:get长度较小,post没有限制。
  • 数据传递方式:get使用URL传递参数值,post直接将参数值放入request body。
  • 数据传递安全性:get不安全,post安全
  • 发送的数据包数量:get发送1个TCP数据包,post发送2个TCP数据包;首先发送一个request head(1个TCP数据包),服务器接收后返回100状态码,再发送request body 数据包。

4.重定向和请求转发的区别。

  • 重定向是客户端浏览器执行跳转,请求转发是服务器直接跳转。
  • 重定向之后,客户端浏览器地址栏显示新的请求地址。请求转发之后,客户端浏览器地址栏显示旧的请求地址。
  • 重定向代表依次新的请求,请求转发没有发起新请求

重定向:通知客户端浏览器,重新定向请求新的页面。

response.sendRedirect("index.jsp");

请求转发:服务器直接转发请求,跳转并执行新页面

request.getRequestDispatcher("update.jsp").forward(request, response);

5.JSP的内置对象。

JSP中有九大内置对象可以分为4个作用域对象和其他5个内置对象

  • 4个作用域对象
    1. 内置对象pageContext,将KV键值对,存入"pageContext"页面"范围内。

    pageContext.setAttribute("key", "value");
    pageContext.getAttribute("key");
    

    2.内置对象request,将KV键值对,存入"request请求"范围内

    //	获取当前服务器的IP地址
    String local = request.getLocalAddr();
    System.out.println("服务器IP地址:" + local);
    //	获取请求客户端的IP地址
    String remote = request.getRemoteAddr();
    System.out.println("客户端IP地址:" + remote);
    //	获取请求方式
    String method = request.getMethod();
    System.out.println("当前客户端的请求方式: " + method);
    //	项目运行时访问路径
    String path = request.getServletPath();
    System.out.println("项目运行时访问路径" + path);
    

    3.内置对象session,将KV键值对,存入"session会话"范围内一次会话包含若干次“请求”
    会话的生命周期:
    会话开始:客户端的第一次“请求”
    会话结束:1.客户端浏览器关闭;2.客户端超时(Tomcat默认为30分钟);3.服务器关闭;

    //	获取当前Session会话对象
    HttpSession session = request.getSession();
    System.out.println("Session ID:" + session.getId());		
    //	将当前kv键值对,存入Session会话(服务端)
    session.setAttribute("key", "value");
    //	从当前Session会话中,根据key获取value
    session.getAttribute("key");
    Date creationDate = new Date(session.getCreationTime());
    System.out.println("session 的创建时间:" + creationDate);
    Date lastDate = new Date(session.getLastAccessedTime());
    System.out.println("本次会话最后一次访问时间:" + lastDate);
    

    4.内置对象application,将KV键值对,存入"application应用"范围内
    application的生命周期
    开始:随着服务器的启动而开始
    死亡:随着服务器的关闭而结束

    ServletContext application = request.getServletContext();		
    int count = 0;
    if(application.getAttribute("key")!=null) {
    	count=Integer.parseInt(application.getAttribute("key").toString());
    	application.setAttribute("key", ++count);
    }else {
    	application.setAttribute("key", ++count);
    }
    response.setContentType("text/html;charset=utf-8");
    PrintWriter out =  response.getWriter();
    out.write("这个数字是:" + count);
    
  • 5个其它内置对象
    1.内置对象config :配置信息
    2.内置对象out : 输出
    3.内置对象response : 响应
    4.内置对象page:代表当前页面(当前JSP页面所对应的Servlet实例)
    5.内置对象exception:异常对象,只有当前页面的page指令中isErrorpage=true,方可使用

6.Servlet生命周期

  • Servlet 生命周期可被定义为从创建直到毁灭的整个过程,以下是 Servlet 遵循的过程:
    1.servlet 通过构造方法进行实例化。
    2.Servlet 通过调用 init () 方法进行初始化。
    3.Servlet 调用 service() 方法来处理客户端的请求。
    4.Servlet 通过调用 destroy() 方法终止(结束)。
  • Servlet生命周期,相对于一个servlet来说当这个文件第一次被用户访问则需要创建实例,初始化,服务,当第二个用户访问时则直接接受服务,不用创建实例和初始化,因为servlet内部使用了单例设计模式,所以任何用户共享一个对象。Servlet生命周期
  • 代码测试:
@WebServlet("/life")
public class LifeServlet extends HttpServlet{
	/**
	 * 
	 */
	private static final long serialVersionUID = -3312024715203893693L;
	// 1.实例化:执行当前Servlet的构造方法,完成当前Servlet实例的创建
	public LifeServlet() {
		System.out.println("1.LifeServlet实例被创建!");
	}
	
	// 2.初始化:执行当前Servlet实例的init()初始化方法(重写父类)
	@Override
	public void init() throws ServletException {
		System.out.println("2.LifeServlet实例完成初始化!");
	}
	// 3.服务:调用父类HttpServlet的service()方法 => 根据请求方式不同,调用不同的doXXX方法处理请求
	@Override
	protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
		System.out.println("3.LifeServlet实例调用服务");
	}
	// 4.销毁
	@Override
	public void destroy() {
		System.out.println("4.LifeServlet实例被销毁");
	}
}

7.servlet中的监听器和过滤器

  • 常用监听器分为6种。
  1. ServletContextListener监听器:
    作用:监听服务器(应用)的启动与关闭。
    方法:1.contextInitialized()方法监听服务器的启动;2.contextDestroyed()方法监听服务器销毁。
  2. HttpSessionListener监听器:
    作用:监听Session会话的创建与销毁
    方法:1.sessionCreated()方法监听会话的创建;2.sessionDestroyed()方法监听会话的销毁。
  3. ServletRequestListener监听器:
    作用:监听request请求的创建与销毁
    方法:1.requestInitialized()方法监听请求的创建;2.requestDestroyed()方法监听请求的销毁。
  4. ServletContextAttributeListener监听器:
    作用:监听application应用范围内的值attribute发生变化;
    方法:1.attributeAdded()方法监听application会话中的添加新的attribute KV键值对;2.attributeReplaced()方法监听application会话中的替换已有的attribute KV键值对;3.attributeRemoved()方法监听application会话中的删除已有的attribute KV键值对。
  5. HttpSessionAttributeListener监听器:
    作用:监听session应用范围内的值attribute发生变化;
    方法:同ServletContextAttributeListener监听器。
  6. ServletRequestAttributeListener监听器:
    作用:监听request应用范围内的值attribute发生变化;
    方法:同ServletContextAttributeListener监听器。

任何Servlet监听器都需要注解@WebListener

  • 常用的过滤器
    通过实现Filter接口来实现过滤器。
/**
 * Filter过滤器 
 * 作用:拦截过滤请求
 */
//@WebFilter(urlPatterns = "/*") //拦截所有请求
//@WebFilter(urlPatterns="*.jsp") //拦截所有jsp请求
  @WebFilter(urlPatterns="*.do") //拦截所有的Servlet请求
public class DemoFilter implements Filter {
	
	/**
	 * 执行过滤
	 * @param request:请求
	 * @param response:响应
	 * @param chain:过滤器链,负责管理过滤器的执行与调度
	 */
	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {
		System.out.println("【Filter】请求被拦截【前】.....");
		//执行下一个过滤器或目标Servlet(JSP)
		chain.doFilter(request, response); 
		System.out.println("【Filter】请求被拦截【后】.....");
	}
}
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值