关于servlet的一些总结

	1.Servlet
		服务器端小应用程序
		它运行在Servlet容器中,它是由服务器直接解析运行。
		
	2.怎样创建一个Servlet
		1.通过查看示例,发现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.直接在浏览器地址栏上输入url
			2.超链接.
			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.关于路径问题总结.
			
			
	
		

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值