一)设置响应参数
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>