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>
原文地址:https://www.cnblogs.com/evilliu/p/8556653.html