servlet中的【转发重定向,过滤器,监听器,ajax】

1.转发和重定向

转发:

       服务器端行为。客户端只发送一次请求,服务器端将该请求在内部实现共享(request和response).

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

重定向:

   客户端行为。客户端发送第一次请求,服务器端返回302状态码和新的请求路径(location);客户端拿到该数据,向新的路径发送第二次请求。

response.sendRedirect("show.jsp");

 

servlet处理java代码,jsp用于展示。

2.ServletContext

application域对象,作用域:整个应用程序有效。

有且只有一个。

getServletContext()

ServletContext application = getServletContext();

application.setAttribute("user", username);

不建议存放过多数据

3.什么是会话

会话可以代表与服务器端的一次连接。

通过三次握手域服务器建立连接,此时会话开始;

会话超时或者主动断开连接此时会话失效。

一次会话之内可以有多次请求和响应。

    1. cookie和session

会话跟踪技术。

cookie: 一段保存于客户端的文本。

//创建cookie

Cookie cookie = new Cookie("user", username);

//响应cookie到浏览器

response.addCookie(cookie);

有效时长:

   默认: 关闭浏览器,cookie失效

   手动设置: cookie.setMaxAge(1);   秒

 

 

获取cookie:

Cookie[] cookies = request.getCookies()

getName():获取name值

getValue():获取value值

session:  域对象(保存用户信息,实现登录验证)

HttpSession session = request.getSession();

session失效:

  1. 默认情况下:  30分
  2. 手动设置:  session.setMaxInactiveInterval(3600)
  3. 立即失效: session.invalidate();  注销

关闭浏览器session不会失效(sessionid)

 

4.el和jstl

el: expression language

       获取域中的数据

<%

      request.setAttribute("user", "zs");

  

      UserInfo info = new UserInfo();

      info.setUname("zs");

      request.setAttribute("user", info);

     

      List list = new ArrayList();

      list.add("aa");

      list.add("bb");

      list.add("cc");

      request.setAttribute("li", list);

     

      Map map = new HashMap();

      map.put("name", "zs");

      map.put("age", 12);

      request.setAttribute("map", map);

   %>

   ${user.uname }

   ${li[0] }

   ${map.name }

 

jstl:标签

  1. 需要导入jstl的jar(standard.jar,jstl.jar)
  2. 导入声明的标签库,使用标签

 

<c:if test="${score>80 }">

       奖励一个大红花!

    </c:if>

   

    <!-- 多分枝 -->

     <c:choose>

       <c:when test="${score>80 }">

           奖励一个大红花!

       </c:when>

       <c:otherwise>

           奖励一个大巴掌!

       </c:otherwise>

    </c:choose>

   

    <!-- items:遍历的内容,支持el表达式    var:每个元素名称-->

    <c:forEach items="${li }" var="aa">

       <p>${aa }</p>

    </c:forEach>

 

5.过滤器(Filter)

过滤请求和响应。

场景:

  1. 全局编码设置
  2. 用户登录验证(首页,登录页面,登录处理servlet不能拦截)
  3. 敏感词汇过滤

//处理接收请求和响应   过滤器链

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

       //设置编码

       request.setCharacterEncoding("utf-8");

       response.setCharacterEncoding("utf-8");

       response.setContentType("text/html;charset=utf-8");

       //放行

       chain.doFilter(request, response);

    }

 

6.监听器

监听域对象(request/session/application)的创建销毁,以及属性的变化。

  1. 编写类实现Listener接口
  2. 配置监听器

@WebListener

public class MyApplicationListener implements ServletContextListener {

 

    public void contextDestroyed(ServletContextEvent arg0)  {

         System.out.println("application销毁");

    }

 

 

    public void contextInitialized(ServletContextEvent ev)  {

       Map<String, Integer> map = new HashMap<>();

        ev.getServletContext().setAttribute("map", map);

    }

  

}

应用:

       分ip统计show.jsp的访问次数。

  1. 监听application域创建,创建map集合管理ip及访问次数
  2. 创建filter过滤show.jsp的请求
  3. 在dofIlter方法中获取ip地址,从map中根据ip地址获取访问次数;

如果为null,设置访问次数为1;否则访问次数+1.

7.Ajax 

异步javascript和xml。

能够实现异步请求发送。

 

同步请求: 请求发送需要等待之前一次请求的响应。

异步请求: 请求发送不需要依赖于其他请求的响应。

 

  1. 能够实现局部刷新
  2. 缺点: 增加服务器压力

原生ajax:

var val = ele.value;

      //1.创建XMLHttpRequest对象

      var xhr = new XMLHttpRequest();

      //2.打开链接(发送的url,请求方式)

      xhr.open("get","ajax?key="+val);

      //3.发送请求

      xhr.send(null);

      //4.处理响应数据

       //监听请求状态

       //xhr.readyState:请求状态 (0-4)

       var oDiv = document.getElementById("div2");

      xhr.onreadystatechange = function(){

          if(xhr.readyState == 4 && xhr.status == 200){

             oDiv.innerHTML=xhr.responseText;

          }

      }

jQuery的Ajax:

$.get("ajax?key="+val,function(data){

          $("#div2").html(data);

      });

$.post("ajax",{"key":val},function(data){

          $("#div2").html(data);

});

 

 

 

 

      

猜你喜欢

转载自blog.csdn.net/qq_42676052/article/details/82532366
今日推荐