一)设置响应参数
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 Enumerationenu= 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 @Override2 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>这个标签:
1Servlet_Config 2jd.com.servlet.Servlet_Config 3 45 8user 6root 79 12password 1012345 113 13 1415 18username 16evil 1719 Servlet_Config 20/config 21
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>的子标签。
12 15 16Servlet_Config 3jd.com.servlet.Servlet_Config 4 56 9user 7root 810 13password 1112345 123 1417 Servlet_Config 18/config 19
其中需要注意 该初始化执行顺序,是通过<load-on-startup>来确定这个初始化的优先执行顺序,其中需要注意值越小优先级越大,其中1 是tomcat的webxml的default 初始化的执行顺序:
12 default 3org.apache.catalina.servlets.DefaultServlet 45 8debug 60 79 12listings 10false 111 13
获取初始化参数通过Contenttext.getAttribute()方法来获取,通过setAttribute()方法来进行设置。
1 response.getWriter().print("登陆成功!");2 response.getWriter().print("账号密码:"+username+" "+pwd+"
");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 23 6 7 8default 4/ 59 jsp 10*.jsp 11*.jspx 12