Servlet基础知识点整理

常用注解

官方文档:https://docs.oracle.com/javaee/7/api/toc.htm

WebServlet

@WebServlet用于定义一个Servlet,等价于下面的xml配置


    LogServlet
    log.LogServlet
    
    email
    [email protected]
    
    
    zipcode
    225800
    


    LogServlet
    /log

WebFilter

@WebFilter用于定义一个Filter,等价于下面的xml配置


    LoggingFilter
    filter.LoggingFilter
    true
    
        logFileName
        log.txt
    
    
        prefix
        URI:
    


    LoggingFilter
    /*

WebListener

@WebListener用于定义一个Listener,等价于下面的xml配置


    listener.SessionListener

WebInitParam

指定Servlet或Filter的初始化参数

ServletConfig和ServletContext的区别

  • ServletConfig:

    • Servlet容器初始化Servlet时,Servlet容器会给该Servlet传入一个ServletConfig对象

      void init (ServletConfig var1) throws ServletException

    • ==该Servlet的配置==

  • ServletContext:

    • ==ServletContext表示Servlet应用程序==,每个Web应用程序只有一个上下文

Attribute

相关方法

  • void setAttribute(String name, Object o)
  • Object getAttribute(String name)
  • Enumeration getAttributeNames()
  • removeAttribute(String name)

范围

pageContext < request < session < application

  • pageContext:当前JSP页面
  • request:当前请求
  • session:一次会话
  • application:当前web应用

JSP脚本片断

<%
    for (Customer customer : customers){
    /*此处“{ }”断开,使得JSP页面能将customers遍历并以表格的方式展示*/
%>
    
        <%= customer.getId()%>
        <%= customer.getName()%>
        <%= customer.getAddress()%>
        <%= customer.getPhone()%>
        
            Delete
            Update
        
    
<%
    }
%>

对应的Java源代码如下

for (Customer customer : customers){
            
      out.write("\n");
      out.write("            \n");
      out.write("                ");
      out.print( customer.getId());
      out.write("\n");
      out.write("                ");
      out.print( customer.getName());
      out.write("\n");
      out.write("                ");
      out.print( customer.getAddress());
      out.write("\n");
      out.write("                ");
      out.print( customer.getPhone());
      out.write("\n");
      out.write("                \n");
      out.write("                    Delete\n");
      out.write("                    Update\n");
      out.write("                \n");
      out.write("            \n");
      out.write("            ");

}

请求转发和重定向

转发

request.getRequestDispatcher("/index.jsp").forward(request,response);

1512851-20190408180316380-1685481195.png

重定向

response.sendRedirect("query.do");

1512851-20190408180246265-314119928.png

302 Move temporarily

​ 请求的资源临时从不同的 URI响应请求。由于这样的重定向是临时的,客户端应当继续向原有地址发送以后的请求。只有在Cache-Control或Expires中进行了指定的情况下,这个响应才是可缓存的。

​ 上文有提及。

​ 如果这不是一个 GET 或者 HEAD 请求,那么浏览器禁止自动进行重定向,除非得到用户的确认,因为请求的条件可能因此发生变化。

​ 注意:虽然RFC 1945和RFC 2068规范不允许客户端在重定向时改变请求的方法,但是很多现存的浏览器将302响应视作为303响应,并且使用 GET 方式访问在 Location 中规定的 URI,而无视原先请求的方法。状态码303和307被添加了进来,用以明确服务器期待客户端进行何种反应。

https://baike.baidu.com/item/HTTP%E7%8A%B6%E6%80%81%E7%A0%81/5053660?fr=aladdin#3_3

区别

转发 重定向
地址栏是第一次发出请求的地址 地址栏是最后响应的地址
在Servlet中request对象没有变化 在Servlet中request对象发生了变化
只能转发给当前web应用的资源 可以重定向到任意地方(比如百度)

转载于:https://www.cnblogs.com/merryituxz/p/10120509.html

你可能感兴趣的:(Servlet基础知识点整理)