关于servlet的一些总结

来源:互联网 发布:2站域名www.tt69.com 编辑:程序博客网 时间:2024/06/05 04:59
1.Servlet服务器端小应用程序它运行在Servlet容器中,它是由服务器直接解析运行。2.怎样创建一个Servlet1.通过查看示例,发现Servlet在创建时它会继承一个HttpServlet类。2.重写doGet,doPost等方法。-------------------------------------------------3.创建一个servlet步骤:1.创建一个类,去继承HttpServlet(实现Servlet接口 或继承 GenericServlet)2.重写方法  doPost  doGet  (接口中需要将所有方法重写,但是service方法是处理请求)3.在web.xml文件中配置4.servlet生命周期1.创建servlet,并调用init方法2.通过service方法来处理请求。3.通过destroy来销毁servlet。当我们创建一个servlet时,第一次访问,会创建servlet对象,并调用init方法,init方法只调用一次。开启一个线程来调用service方法。当下一次在访问时,又开启一个线程来调用service方法。servlet对象,一般情况只创建一次,它常驻内存。当服务停止,或servlet对象销毁时会调用destroy方法。注意:如果在servlet中创建了成员变量,就可以出现线程安全问题在开发中,尽量避免在servlet中创建成员变量。如果创建了,就需要同步。5.关于Servlet接口中service方法与HttpServlet中的doPost,doGet什么关系?一个servlet被访问时,它默认处理请求的是service方法,这个方法是在Servlet接口中定义的。根据请求的url,在web.xml文件中查找到具体的servlet,会默认调用service方法。对于我们来说,它在HttpServlet中对service方法进行了重写,执行其内容在HttpServlet的service方法中,会根据请求方式的不同,分别调用不同的方法。根据java中的多态,在调用doPost,doGet时,会调用的是我们自己的servlet中的方法。这里面涉及到一个java模式:模板方法模式---------------------------------------------------------5.模板方法模式:----------------------------------------------------------------------------------------------------------------------------myeclipse安装注意:将myeclipse10目录放置在d盘根目录下,破解后就可以使用.myeclipse与tomcat整合关于myeclipse下的web project部署到tomcat的目录结构(重点)----------------------------------------------------------------------6.关于servlet自动加载.我们可以通过设置让servlet跟随服务器启动而创建.只需要在servlet配置中<servlet>这个标签中加上 <load-on-startup>2</load-on-startup>问题1:servlet跟随tomcat启动有什么作用?就是用来加载资源。问题2:load-on-startup它的值可以取什么?优先级有10个,是从1-10,1已经被占用了,我们在使用时,一般情况下是从2开始。数值越小优先级越高。优先级相同情况下根据配置的顺序加载。----------------------------------------------------------------------7.关于servlet配置中的url-pattern问题问题1:一个servlet是否可以被映射到多个路径?可以的,一个servlet允许被不同的路径映射.问题2:url-pattern它的写法是什么样的?1.完全匹配  要求必须以 /开始。以下两种可以使用通配符. *2.目录匹配  必须以/开始,以*结束。3.扩展名匹配  不能以/开始,以*.xxx结束.最经典错误  /*.do以上三种配置有优先级:  完全匹配>目录匹配>扩展名匹配----------------------------------------------------------------------复习:1.servlet是什么,它的作用.2.怎样创建Servlet(三步)3.Servlet体系4.关于servlet生命周期5.关于servlet配置.----------------------------------------------------------------------------8.web开发中的路径问题问题是:浏览器访问服务器有几种访问方式?1.直接在浏览器地址栏上输入url2.超链接.3.表单4.javascript请求的方式最常用的是post  get除了表单可以post请求,其它的都是get请求。访问servlet路径问题1.绝对路径1.带协议<a href="http://localhost:8080/day7_2/demo1">demo1Servlet</a>这种方式在开发不常用,如果使用这种方式,一般是用于访问站外资源。2.不带协议在浏览器端写一个"/"相当于是服务器的根路径.<a href="/day7_2/demo1">demo1Servlet</a>对于"/"它相当于是  http://localhost:8080也就是说,我们直接在"/"后面加上我们的工程名,在加上我们的资源名称就可以。这种方式在开发中应用比较多,因为它一般用于访问站内资源。2.相对路径http://localhost:8080/day7_2/demo1         servlet路径http://localhost:8080/day7_2/admin.html   html路径通过它们的路径,我们发现它们是一个级别,那么我们在访问时,就可以写成以下效果.<a href="./demo1">demo1Servlet</a>这个路径可以简化成<a href="demo1">demo1Servlet</a>在WebRoot下创建一个jsps目录,将admin.html放置到其中。那么在访问时,绝对路径不会出问题。相对路径失效。怎样修改它?http://localhost:8080/day7_2/demo1  http://localhost:8080/day7_2/jsps/admin.html路径:<a href="../demo1">demo1Servlet</a>-----------------------------------------------------------------结论:在开发中,推荐使用不带协议绝对路径。写法:  /工程名/servlet的url-pattern的值.------------------------------------------------------------------------------------------9.关于Servlet接口中的init方法问题1:在Servlet接口中定义的init方法是有参数的,它的参数类型是ServletConfig,而我们重写的init方法没有参数,为什么?原因:父类中已经将init(ServletConfig  config)这个方法进行了重写,而我们在自己的Servlet中就不需要在重写了,   我们重写的init()它不是接口中定义的,而是在父类中定义的。      细节:在GenericServlet中对Servlet接口中的init(ServletConfig config)进行了重写,并且调用了自己定义的一个        init()方法。那么我们在自己的Servlet类中重写了init()方法,根据多态就会调用我们自己的init()方法。问题2:ServletConfig是什么?它有什么作用?在GenricServlet中将ServletConfig对象保存到了GenericServlet中。public void init(ServletConfig config) throws ServletException {this.config = config;this.init();}ServletConfig对象,代表的是Servlet的配置对象。当去访问一个servlet时,就会实例化这个servlet对象,并且会创建一个servletConfig对象,将这个对象通过init方法传递到servlet中。那么我们就可以在自己的servlet中获取Servlet的配置信息.获取ServletConfig对象: this.getServletConfig();----------------------------------------------------------------10.ServletConfig对象功能:1.可以获取Servlet的name。2.可以获取初始化参数是我们可以在Servlet的配置中通过<init-param>来进行配置,对于这些配置,我们可以通过ServletConfig来获取.通过初始化参数,我们可以进行预定义信息的加载,这种操作一般情况是在框架中应用。3.可以获取ServletContext对象常用API总结:public String getServletName();用于获取Servlet名称public String getInitParameter(String name);用于获取init-param中指定名称的value值.public Enumeration getInitParameterNames();用于获取所有的init-param中的name名称.public ServletContext getServletContext();用于获取一个ServletContext对象。ServletConfig要求掌握内容:1.它是由服务器创建,通过init方法传递到我们的Servlet中。  我们在Servlet中通过  this.getServletConfig()获取ServletConfig对象.  2.ServletConfig对象是用于获取当前Servlet的配置信息.1.Servlet的名称2.Servlet的初始化参数。每一个Servlet都具有自己的ServletConfig对象。它们之间是不能共享的。-------------------------------------------------------------------------------------11.关于ServletContext对象.ServletContext它代表的是一个web应用。怎样获取一个ServletContext对象?可以通过ServletConfig对象获取.ServletConfig.getServletContext();作用:1.它可以获取全局初始化参数String getInitParameter(String name)  Enumeration getInitParameterNames()  在web.xml文件中可以配置我们的全局初始化参数<!-- 配置全局初始化参数 --><context-param><param-name>name</param-name><param-value>tom</param-value></context-param>它的配置是针对于整个web应用.2.它可以帮助我们让servlet实现信息共享.ServletContext是一个域对象,提到域对象想到两件事,一个是它相当于是一个Map,另一个它有作用域,对于ServletContext它的作用域是整个web应用。示例:统计站点访问次数问题:怎样判断是第一次访问setAttribute(String name,Object value);getAttribute(String name);removeAttribute(String name);3.可以获取路径(资源)***********************在web开发中,如果要想获取资源,必须使用绝对的磁盘路径。怎样可以得到在服务器上的文件的绝对磁盘路径?1.String getRealPath(String s);ServletContext.getRealPath("/"); 得到当前工程在磁盘上的绝对路径。2.URL  gerResource(String s);得到一个URL路径,它也是指向我们的web工程下的资源。3.InputStream getResourceAsStream(String s);得到一个指向资源的输入流.扩展:对于classes目录下的文件,它有其它的方式可以获取到.Class.getResource("/").getPath();  获取的就是class文件所有的目录的绝对磁盘路径。对于存在于classes目录下的文件,我们可以通过classpath的方式去获取其绝对磁盘路径。4.其它功能(了解)1.获取MIME类型String getMimeType(String file)   文件下载时会用到.2.分发请求 RequestDispatcher getRequestDispatcher(String path)   在开发中不常使用,如果使用通过request对象来操作。3.日志log方法是用来处理日志.--------------------------------------------------------------自己做:1.将笔记中所有的问题全都看一遍2.手动创建servlet,并描述servlet生命周期.3.关于url-pattern配置4.关于ServletContext功能描述。5.关于路径问题总结.