Servlet是一个单实例,多线程的Java类
cass FirstServlet extends HttpServlet{
}
Servlet的配置
<servlet>
<!-- servlet在访问时使用的名称 -->
<servlet-name>FirstServlet</servlet-name>
<servlet-class>servlet类的全路径</servlet-class>
</servlet>
<servlet-mapping>
<!-- servlet在访问时使用的名称 -->
<servlet-name>FirstServlet</servlet-name>
<!-- Servlet映射的访问地址 -->
<url-pattern>/first</url-pattern>
</servlet-mapping>
Servlet的配置
<servlet>
<!-- servlet在访问时使用的名称 -->
<servlet-name>FirstServlet</servlet-name>
<servlet-class>servlet类的全路径</servlet-class>
</servlet>
<servlet-mapping>
<!-- servlet在访问时使用的名称 -->
<servlet-name>FirstServlet</servlet-name>
<!-- Servlet映射的访问地址 -->
<url-pattern>/first</url-pattern>
</servlet-mapping>
servlet在被访问时,先通过<url-pattern>映射找到对应的Servlet名称,再在Servlet中
找到与该Servlet名称完全相同的类,通过Servlet名称,获取到Servlet类 的全路径,由服务器创建
该Servlet的对象,完成请求服务。(1.在<Servlet-mapping>的url-mapping中找到到与请求匹配的
<servlet-name>,然后在<servlet>中找到对应的<servlet-name>,然后获取<servlet-class>
获取到类以后,交由服务器通过反射机制获取到该类的对象,完成服务)
找到与该Servlet名称完全相同的类,通过Servlet名称,获取到Servlet类 的全路径,由服务器创建
该Servlet的对象,完成请求服务。(1.在<Servlet-mapping>的url-mapping中找到到与请求匹配的
<servlet-name>,然后在<servlet>中找到对应的<servlet-name>,然后获取<servlet-class>
获取到类以后,交由服务器通过反射机制获取到该类的对象,完成服务)
Servlet的执行流程图
1.Servlet的映射规则
a).写一个确定的URL地址 /first;
b).在前面可以使用*通配符。 *.do;
c).在后面使用通配符 /* 或者是/first/*
注意;
一个sevlet的映射,要么以/开头,要么以*开头,*不能出现在中间
优先级问题:
a).长得越像的URL优先级最高,确定的URL地址优先级高于带通配符的URL地址
b).以后后缀名结尾的带*通配符的URL优先级最低
a).写一个确定的URL地址 /first;
b).在前面可以使用*通配符。 *.do;
c).在后面使用通配符 /* 或者是/first/*
注意;
一个sevlet的映射,要么以/开头,要么以*开头,*不能出现在中间
优先级问题:
a).长得越像的URL优先级最高,确定的URL地址优先级高于带通配符的URL地址
b).以后后缀名结尾的带*通配符的URL优先级最低
Servlet的声明周期
1.调用constructor
2.调用带参数的init方法 然后调用无参数的init 方法
以上两个方法只会被调用一次
3.调用service方法
doGet()
doPost()
……
destroy:销毁servlet,在服务器关闭之前或者是应用重新加载(服务器重新启动)之前调用
用来回收资源。
ServletConfig 与ServletContext
ServletConfig:代表一个Servlet对象的信息 通过this.getServletConfig();获取该
对象 通常通过该对象获取Servlet的初始化参数
<servlet>
<servlet-name>ServletConfigDemo</servlet-name>
<servlet-class>cn.test.initdemo.ServletConfigDemo</servlet-class>
<init-param>
<param-name>aaa</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
getInitParameter("参数名");
getInitParameterNames();
ServletContext:代表整个web应用
封装在ServletConfig对象中,随着init(ServletConfig config)方法传入Servlet
this.getServletConfig().getServletContext();
通常通过该对象在Servlet之间进行通信和获取web应用的初始化参数
<web-app>
<context-param>
<param-name>cxt_bbb</param-name>
<param-value>cxt_bbb_value</param-value>
</context-param>
</web-app>
getInitParameter("参数名");
getInitParameterNames();
加载配置文件:
InputStream is = context.getResourceAsStream("资源路径");
在Servlet中尽量避免使用成员变量,如果要使用成员变量,需要加上同步代码块,并且尽量缩小同步的范围。
1.调用constructor
2.调用带参数的init方法 然后调用无参数的init 方法
以上两个方法只会被调用一次
3.调用service方法
doGet()
doPost()
……
destroy:销毁servlet,在服务器关闭之前或者是应用重新加载(服务器重新启动)之前调用
用来回收资源。
ServletConfig 与ServletContext
ServletConfig:代表一个Servlet对象的信息 通过this.getServletConfig();获取该
对象 通常通过该对象获取Servlet的初始化参数
<servlet>
<servlet-name>ServletConfigDemo</servlet-name>
<servlet-class>cn.test.initdemo.ServletConfigDemo</servlet-class>
<init-param>
<param-name>aaa</param-name>
<param-value>value</param-value>
</init-param>
</servlet>
getInitParameter("参数名");
getInitParameterNames();
ServletContext:代表整个web应用
封装在ServletConfig对象中,随着init(ServletConfig config)方法传入Servlet
this.getServletConfig().getServletContext();
通常通过该对象在Servlet之间进行通信和获取web应用的初始化参数
<web-app>
<context-param>
<param-name>cxt_bbb</param-name>
<param-value>cxt_bbb_value</param-value>
</context-param>
</web-app>
getInitParameter("参数名");
getInitParameterNames();
加载配置文件:
InputStream is = context.getResourceAsStream("资源路径");
在Servlet中尽量避免使用成员变量,如果要使用成员变量,需要加上同步代码块,并且尽量缩小同步的范围。