servlet

一、Servlet 是什么

1)普通的java类,继承了HttpServlet类
2)servlet是交给服务器调用

二、servlet 在web.xml的配置
<!-- 配置一个servlet程序 -->
	<servlet>
		<!-- servlet的内部名称 ,可以自定义-->
		<servlet-name>HelloServlet</servlet-name>
		<!-- servlet类名: 包名+简单类名-->
		<servlet-class>gz.itcast.d_servlet.HelloServlet</servlet-class>
	</servlet>
	<servlet-mapping>
		<!-- servlet的内部名称,和上面的名称保持一致!!!-->
		<servlet-name>HelloServlet</servlet-name>
		<!-- servlet的访问名称: /名称 -->
		<url-pattern>/hello</url-pattern>
	</servlet-mapping>
三、web目录结构
|--WebRoot 根目录
	|--静态资源(html、js、css)可以直接访问
	|--WEB-INF                             不可以直接访问
		|--class字节码文件
		|--lib 存放jar包文件
		web.xml
四、servlet的映射路径

1、根据url访问到servlet的过程
a、根据域名找到服务器ip地址
b、根据端口找到tomcat
c、根据资源名称找到项目
d、根据web.xml的servlet-map找到servlet-name
e、根据servlet-name找到类到全名
f、通过反射进行一些操作
2、url-pattern到匹配规则
1)、精确匹配
2)、模糊匹配
a、/* 、
b、*.后缀名
两者不能同时使用
3、servlet 缺省路径
缺省的路径是tomcat内置到一个路径,配置在tomcat目录下到conf文件到web.xml中。改路径对应一个defaultServlet,负责解决web应用到静态资源文件。
a、在本应用中到web.xml中匹配对应到url-pattern
b、如果没有匹配到,就交给defaultservlet去处理。
c、如果有就返回给浏览器,如果没有就返回404
所以tomcat是先寻找动态资源在找静态资源,如果应用中配置到url-pattern是/ 或者 /* 将会导致defaultservlet 不起作用。

四、servlet的生命周期

1、servlet程序的生命周期由tomcat控制。

  • 构造方法:创建servlet的时候调用。第一次访问的时候创建servlet对象。默认的情况是单列模式。
  • init方法:创建完对象的时候调用。单列模式的情况下,只调用一次!
  • service方法:每次发出请求的时候调用
  • destroy方法:销毁servlet的时候调用。服务器停止的时候。

2、servlet自动加载
在servlet的配置中加入:<load-on-startup>1</load-on-startup> // 数值越大,创建的优先级就越低。
3、init无参方法与init有参方法
有参方法是用于tomcat调用,无参方法是给用户覆盖,写入初始化!
4、servlet在tomcat中默认是单例多线程
5、servlet的线程问题
多线程的时候,当访问共享数据的时候,会引发线程问题。
解决方法:
a、使用到的共享数据进行同步(synchronized)
b、尽量不要使用成员变量

五、ServletConfig 对象

1、servletconfig的作用:主要用于加载servlet的初始化参数。
2、servletconfig对象在servlet创建对象后,init方法前创建,并且从init方法中传入。
3、获取参数

// web.xml 配置====
<servlet>
  	<servlet-name>servletconfig</servlet-name>
  	<servlet-class>TestServletConfig</servlet-class>
  	<init-param>
  		<param-name>path</param-name>
  		<param-value>aaa</param-value>
  	</init-param>
  </servlet>
//==============
ServletConfig servletConfig = getServletConfig();
File file = new File(servletConfig.getInitParameter("path"));

// 查询所有初始化参数
Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
while (initParameterNames.hasMoreElements()) {
			String string2 = (String) initParameterNames.nextElement();
			System.out.println(string2 + ":" + servletConfig.getInitParameter(string2));	
}

// 查询servlet name
System.out.println("name:" + servletConfig.getServletName());

// 获取servletcontext
servletConfig.getServletContext();
六、ServletContext对象

1、ServletContext对象,叫作servlet上下文对象,表示当前的web应用环境。一个web应用中只有一个一个ServletContext对象。
2、该对象在web加载的时候创建。可通过servletconfig对象获取。
3、常用的api

// 获取上下文对象
ServletContext servletContext = this.getServletContext();
// 获取web应用的路径 部署在web服务器上的名称
servletContext.getContextPath();
		
// 获取web应用的初始化参数
servletContext.getInitParameter("aaa");
// 域对象 全局  
servletContext.setAttribute("aaa", "全局变量"); // 保存数据
servletContext.getAttribute("aaa");  // 获取数据
		
// 转发   a、地址栏不会变,b、转发只能转到应用内的资源
RequestDispatcher requestDispatcher = servletContext.getRequestDispatcher("/hello");
requestDispatcher.forward(req, resp);
``


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值