• servlet总结


    一)设置响应参数

    1)通过response.setContentType()来设置返回内容的编码等。

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

     2)通过response.setHeader()或者response.addHeader()来设置header一些属性。比如3秒之后进行跳转:

    1 response.setHeader("refresh","3;url=/");

     二)servlet总结

    继承关系:

    servlet---->GenericServlet---->HttpServlet---->自定义的servlet方法。

    servlet的方法:

    1)destroy()

    销毁servlet。

    2)getservletConfig() 该方法了解。

    获取servletConfig对象,该对象伴随servlet的创建而创建,伴随servlet销毁而消失。储存数据针对的对象只是servlet的实例本身。而不是共享所有的servlet实例。

    该对象可以获取servlet实例的一些属性比如说:servlet name  init-param等。

    常用方法:

    java.lang.String    getInitParameter(java.lang.String name 获取servlet初始化的参数。

    java.util.Enumeration<java.lang.String>    getInitParameterNames() 获取所有初始化的参数。

    ServletContext    getServletContext()   获取servlet的上下文管理器。

    java.lang.String    getServletName() 获取servlet名字。

    这些方法获取的值都是和web.xml一一对应。

     1     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     2         ServletConfig config=this.getServletConfig();
     3         String name=config.getServletName();
     4         String val=config.getInitParameter("user");
     5         System.out.println("单个参数:"+val);
     6         Enumeration<String> enu= config.getInitParameterNames();
     7         while (enu.hasMoreElements()){
     8         System.out.print("参数:");
     9         System.out.println(enu.nextElement());
    10         }
    11     }

    3)getservletContext()

    获取上下文管理者,也称域对象,即储存的信息是对所有的servlet都共享的。伴随着项目的启动而产生,伴随着项目的关闭和服务器关闭而消失。

    对象获取:

    1)直接使用servlet对象获取:this.getContentTex()

    2)通过sevletConfig获取对象:servletConfig.getContText()

    常用方法:

    1)设置全局共享字段:

           java.lang.Object    getAttribute(java.lang.String name) 获取全局字段值。

              void    setAttribute(java.lang.String name, java.lang.Object object) 设置全局字段。

             初始化值一般在init方法中。          

    1     @Override
    2     public void init() throws ServletException {
    3         ServletContext con=getServletContext();
    4         con.setAttribute("count",0);
    5         System.out.println("--------------------");
    6         System.out.println("初始化成功!");
    7         System.out.println("---------------------");
    8     }

        只有这样的情况下,才能用getAttribute()获取共享数据!

    2)获取资源:

             java.lang.String    getRealPath(java.lang.String path) 获取文件实际路径。需要注意的是虚拟路径。以WEB-INFO开头。Returns a String containing the real path for a given virtual path.

           例子:    

    1     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2         ServletContext con=this.getServletContext();
    3         String path=con.getRealPath("/WEB-INF/classes/db.properties.properties");
    4         System.out.println(path);
    5     }

                            java.io.InputStream    getResourceAsStream(java.lang.String path) 获取IO流

          例子: 

    1         ServletContext con=this.getServletContext();
    2 //3 //
    4         InputStream inp=con.getResourceAsStream("/WEB-INF/classes/1.properites");
    5 //        System.out.println(login_Servlet.class.getClassLoader().getResourceAsStream("db.config.properites"));
    6         System.out.println("-----------------");
    7         System.out.println(inp);
    8         System.out.println("-----------------");

    需要注意:

            这里getResourceAsStream的目录为:/WEB-INFO/classes/文字名字,在src当前目录配置文件需要加上这个虚拟的目录!

    3)获取初始化参数:

             java.lang.String    getInitParameter(java.lang.String name)单个获取。

                            java.util.Enumeration<java.lang.String>    getInitParameterNames();获取多个初始化参数。                    

     1 @WebServlet(name = "Servlet_Config")
     2 public class Servlet_Config extends HttpServlet {
     3     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     4         ServletContext con=this.getServletContext();
     5         Object para=con.getInitParameter("username");
     6         System.out.println(para);
     7     }
     8 
     9     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    10 
    11     }
    12 }

        需要注意的是:

        这里是参数的初始化,和servletConfig不一样。需要在web.xml里进行配置是标签<context-param>而不是<init-param>这个标签:

     1       <servlet-name>Servlet_Config</servlet-name>
     2         <servlet-class>jd.com.servlet.Servlet_Config</servlet-class>
     3 
     4         <init-param>
     5             <param-name>user</param-name>
     6             <param-value>root</param-value>
     7         </init-param>
     8         <init-param>
     9             <param-name>password</param-name>
    10             <param-value>12345</param-value>
    11         </init-param>
    12         <load-on-startup>3</load-on-startup>
    13     </servlet>
    14     <context-param>
    15         <param-name>username</param-name>
    16         <param-value>evil</param-value>
    17     </context-param>
    18     <servlet-mapping>
    19         <servlet-name>Servlet_Config</servlet-name>
    20         <url-pattern>/config</url-pattern>
    21     </servlet-mapping>

    4)获取文件的mime类型:

                            java.lang.String    getMimeType(java.lang.String file) 需要注意的是:如果是可以识别直接返回类型,如果不可以识别的是返回null。

            Returns the MIME type of the specified file, or null if the MIME type is not known.

    1     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    2         ServletContext con=this.getServletContext();
    3         String path=con.getRealPath("/WEB-INF/classes/db.properties.properties");
    4         System.out.println(path);
    5         System.out.println(con.getMimeType("5.html"));
    6     }

    4)init(getservletConfig,config)

    servlet初始化。在GenericServlet中,有init的方法重载,所以我们一般写这个,是不带参数的init()方法。A convenience method which can be overridden so that there's no need to call super.init(config).

    例子(需要在servlet方法中进行方法重载):

     1 public class login_Servlet extends HttpServlet {
     2     @Override
     3     public void init() throws ServletException {
     4         ServletContext con=getServletContext();
     5         con.setAttribute("count",0);
     6         System.out.println("--------------------");
     7         System.out.println("初始化成功!");
     8         System.out.println("---------------------");
     9     }
    10 }

    初始化那个servlet需要在web.xml中进行注册,标签:<init-param>  是,servlet>的子标签。

     1     <servlet>
     2         <servlet-name>Servlet_Config</servlet-name>
     3         <servlet-class>jd.com.servlet.Servlet_Config</servlet-class>
     4         
     5         <init-param>
     6             <param-name>user</param-name>
     7             <param-value>root</param-value>
     8         </init-param>
     9         <init-param>
    10             <param-name>password</param-name>
    11             <param-value>12345</param-value>
    12         </init-param>
    13         <load-on-startup>3</load-on-startup>
    14     </servlet>
    15 
    16     <servlet-mapping>
    17         <servlet-name>Servlet_Config</servlet-name>
    18         <url-pattern>/config</url-pattern>
    19     </servlet-mapping>

    其中需要注意 该初始化执行顺序,是通过<load-on-startup>来确定这个初始化的优先执行顺序,其中需要注意值越小优先级越大,其中1 是tomcat的webxml的default 初始化的执行顺序:

     1     <servlet>
     2         <servlet-name>default</servlet-name>
     3         <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
     4         <init-param>
     5             <param-name>debug</param-name>
     6             <param-value>0</param-value>
     7         </init-param>
     8         <init-param>
     9             <param-name>listings</param-name>
    10             <param-value>false</param-value>
    11         </init-param>
    12         <load-on-startup>1</load-on-startup>
    13     </servlet>

    获取初始化参数通过Contenttext.getAttribute()方法来获取,通过setAttribute()方法来进行设置。

    1                response.getWriter().print("登陆成功!");
    2                 response.getWriter().print("<h1>账号密码:"+username+" "+pwd+"</h1>");
    3                 ServletContext con=getServletContext();
    4                 Integer cishu= (Integer) con.getAttribute("count");
    5                 cishu+=1;
    6                 con.setAttribute("count",cishu);

    5)service(HttpRequest req,HttpRespone,res)

    该方法是处理request和response请求的服务,处理业务逻辑。servlet是单实例多线程服务。

    三)我们在访问根目录的时候直接访问的是web的WEB-INFO下面的index.jsp

    这是因为在tomcat的web.xml里配置默认servlet。 tomcat web.xml和咱们自己定义的servlet是继承关系。

     1   <!-- The mapping for the default servlet -->
     2     <servlet-mapping>
     3         <servlet-name>default</servlet-name>
     4         <url-pattern>/</url-pattern>
     5     </servlet-mapping>
     6 
     7     <!-- The mappings for the JSP servlet -->
     8     <servlet-mapping>
     9         <servlet-name>jsp</servlet-name>
    10         <url-pattern>*.jsp</url-pattern>
    11         <url-pattern>*.jspx</url-pattern>
    12     </servlet-mapping>
  • 相关阅读:
    前端高效开发必备的 js 库梳理
    前端进阶: css必知的几个底层知识和技巧
    Vue项目上线做的一些基本优化
    如何制作一个组件?论组件化思想
    15分钟带你了解前端工程师必知的javascript设计模式(附详细思维导图和源码)
    Promise的源码实现(完美符合Promise/A+规范)
    前端工程师不可不知的Nginx知识
    java EE应用概述
    javaweb学习——session和Cookie实现购物车功能
    javaweb学习——会话技术(二)
  • 原文地址:https://www.cnblogs.com/evilliu/p/8556653.html
Copyright © 2020-2023  润新知