Day01----servlet编程

Servlet(service+applet)是在服务器上运行的小程序,主要功能在于交互式的浏览和修改数据,生成动态web内容

1、servlet缺省路径(DefaultServlet):解析web应用的静态资源文件

输入URL读取文件:项目的web.xml文件中没有匹配的url-pattern,则交给Tomcat的内置的DefaultServlet处理,即到项目根目录 下查找index.html静态文件;若找不到,则返回404

2、servlet的生命周期(由Tomcat服务器控制):类对象创建,调用方法,销毁

构造方法:创建servlet对象时调用,默认第一次访问servlet创建对象时调用一次,证明servlet对象在Tomcat是单实例的

init():创建完对象时调用,只调用一次

service():每次发送请求时调用,调用n次

destroy():销毁对象时调用,停止服务器或者重新部署应用时销毁servlet对象,只调用一次

<!-- 配置一个servlet -->
  <!-- servlet的配置 -->
  <servlet>
  	<!-- servlet的内部名称,自定义。尽量有意义 -->
  	<servlet-name>FirstServlet</servlet-name>
  	<!-- servlet的类全名: 包名+简单类名 -->
  	<servlet-class>gz.itcast.a_servlet.FirstServlet</servlet-class>
	<!--servlet的自动加载:整数值越大,创建的优先级越低-->
	<load-on-startup>1</load-on-startup>
  </servlet>
  
  
  <!-- servlet的映射配置 -->
  <servlet-mapping>
  	<!-- servlet的内部名称,一定要和上面的内部名称保持一致!! -->
  	<servlet-name>FirstServlet</servlet-name>
  	<!-- servlet的映射路径(访问servlet的名称) -->
  	<url-pattern>/first</url-pattern>
  </servlet-mapping>
伪代码演示servlet生命周期

1)通过映射找到到servlet-class的内容,字符串: gz.itcast.a_servlet.FirstServlet
			2)通过反射构造FirstServlet对象
					2.1 得到字节码对象
					Class clazz = class.forName("gz.itcast.a_servlet.FirstServlet");
					2.2 调用无参数的构造方法来构造对象
					Object obj = clazz.newInstance();     ---1.servlet的构造方法被调用
			3)创建ServletConfig对象,通过反射调用init方法
					3.1 得到方法对象
					Method m = clazz.getDeclareMethod("init",ServletConfig.class);
					3.2 调用方法
					m.invoke(obj,config);             --2.servlet的init方法被调用
			4)创建request,response对象,通过反射调用service方法
					4.1 得到方法对象
					Methodm m =clazz.getDeclareMethod("service",HttpServletRequest.class,HttpServletResponse.class);
					4.2 调用方法
					m.invoke(obj,request,response);  --3.servlet的service方法被调用
			5)当tomcat服务器停止或web应用重新部署,通过反射调用destroy方法
					5.1 得到方法对象
					Method m = clazz.getDeclareMethod("destroy",null);
					5.2 调用方法
					m.invoke(obj,null);            --4.servlet的destroy方法被调用

3、servlet的多线程并发问题(servlet对象在Tomcat服务器中是单实例多线程的)

3.1、把使用共享数据的代码块使用synchronized关键字进行同步

3.2、尽量不要使用成员变量;尽量缩小同步代码块的范围

4、ServletConfig对象:主要用于加载servlet的初始化参数(一个servlet对应一个servletconfig对象)

4.1、创建:在创建完servlet对象之后,在调用init方法之前创建

得到:直接从有参数的init方法中得到

<servlet>
    <servlet-name>ConfigDemo</servlet-name>
    <servlet-class>gz.itcast.f_config.ConfigDemo</servlet-class>
    <!-- 初始参数: 这些参数会在加载web应用的时候,封装到ServletConfig对象中 -->
    <init-param>
    	<param-name>path</param-name>
    	<param-value>e:/b.txt</param-value>
    </init-param>
  </servlet>

 ServletConfig的API:
					java.lang.String getInitParameter(java.lang.String name)  根据参数名获取参数值
					java.util.Enumeration getInitParameterNames()    获取所有参数
				    ServletContext getServletContext()     得到servlet上下文对象
					java.lang.String getServletName()       得到servlet的名称

5、servletConfig对象:上下文对象,表示一个当前的web应用环境(一个web应用中只有一个servletContext对象)

5.1、创建:加载web应用时创建servletContext对象

得到:从servletConfig对象的getServletContext方法得到

5.2、servletContext对象的核心API

			java.lang.String getContextPath()   --得到当前web应用的路径

			java.lang.String getInitParameter(java.lang.String name)  --得到web应用的初始化参数
			java.util.Enumeration getInitParameterNames()  

			void setAttribute(java.lang.String name, java.lang.Object object) --域对象有关的方法
			java.lang.Object getAttribute(java.lang.String name)  
			void removeAttribute(java.lang.String name)  

			RequestDispatcher getRequestDispatcher(java.lang.String path)   --转发(类似于重定向)

			java.lang.String getRealPath(java.lang.String path)     --得到web应用的资源文件
			java.io.InputStream getResourceAsStream(java.lang.String path)

所有域对象:HttpServletRequest

ServletContext

HttpSession

PageContext

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值