实现servlet的三种方式:
-Servlet
-GenericServlet
-HttpServlet
-Servlet
-GenericServlet
-HttpServlet
【servlet】
servlet里边的所有方法:
init(ServletConfig config):servlet对象之后调用一次。
getServletConfig():可以获取servlet的配置信息。
getServletInfo():获取servlet的描述信息,返回一个字符串。没啥用。
service(ServletRequest resuqest,ServletResponse response):每次请求都会调用。
destroy():servlet对象销毁之前调用一次。
servlet中的方法大多数(innit、service、destroy)不由我们来调用,而是由服务器(如tomcat)来调用。
servlet中的对象也是由服务器来创建。
servlet里边的所有方法:
init(ServletConfig config):servlet对象之后调用一次。
getServletConfig():可以获取servlet的配置信息。
getServletInfo():获取servlet的描述信息,返回一个字符串。没啥用。
service(ServletRequest resuqest,ServletResponse response):每次请求都会调用。
destroy():servlet对象销毁之前调用一次。
servlet中的方法大多数(innit、service、destroy)不由我们来调用,而是由服务器(如tomcat)来调用。
servlet中的对象也是由服务器来创建。
要想通过浏览器访问servlet,就需要在web.xml中为servlet配置一个访问路径url:servlet[name,class]、servlet-mapping[name,url]
servlet的特点:
servlet是在第一次接受请求访问时生成的(基于java反射),在服务器关闭时关闭。
servlet是单例的,线程不安全。效率高。
ServletConfig:(在init方法中被赋值)
getServletName():获取servlet配置名。<servlet><servlet-name>xxx</servlet-name></servlet>
ServletContext getServletContext():获取Servlet上下文对象。
String getInitparameter(String name):根据名称虎丘初始化参数值。
Enumeration getInitParameterNames():获取所有的初始化参数名称。
{<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
}
ServletContext:
上下文信息,attribute
servlet的特点:
servlet是在第一次接受请求访问时生成的(基于java反射),在服务器关闭时关闭。
servlet是单例的,线程不安全。效率高。
ServletConfig:(在init方法中被赋值)
getServletName():获取servlet配置名。<servlet><servlet-name>xxx</servlet-name></servlet>
ServletContext getServletContext():获取Servlet上下文对象。
String getInitparameter(String name):根据名称虎丘初始化参数值。
Enumeration getInitParameterNames():获取所有的初始化参数名称。
{<init-param>
<param-name>p1</param-name>
<param-value>v1</param-value>
</init-param>
}
ServletContext:
上下文信息,attribute
【GenericServlet】--抽象类,简化Servlet。实现Servlet和ServletConfig。
本质:将ServletConfig的功能直接委托到自定义在Servlet中。
主要需要子类实现service()方法即可。
本质:将ServletConfig的功能直接委托到自定义在Servlet中。
主要需要子类实现service()方法即可。
【HttpServlet】--支持http协议的servlet
service(ServletRequest resuqest,ServletResponse response){
[类型强转:ServletRequest->HttpServletRequest;ServletResponse->HttpServletResponse]
service(HttpServletRequest resuqest,HttpServletResponse response){
if(GET){
doGet()
}
if(POST){
doPost()
}
}
}
需要用户实现doGet()或doPost()。这两个方法的默认实现时给客户端相应一个405错误。所以有必要的话就需要用户重写此方法。
【servlet的细节】
线程安全:
1、不要在servlet中创建成员,而使用局部变量。
2、可以创建无状态成员,无变量(即不受多线程影响的成员)。
3、可以创建有状态的成员,但是内容只读。
servlet的创建:
默认情况servlet会在第一次被调用是创建(“第一次惩罚”)。如果想保证在容器启动即创建,可以为servlet添加load-on-starup配置。
<servlet>
<load-on-starup>0</load-on-starup>--各个servlet之间的创建顺序
</servlet>
url-pattern:
一个servlet可以配置多个访问路径。可以使用通配符。
<serlvet-mappring>
<servlet-name>xxx</servlet-name>
<url-pattern>/A</url-pattern>
<url-pattern>/B</url-pattern>
<url-pattern>/servlet/*</url-pattern>--路径匹配
<url-pattern>*.do</url-pattern>--扩展名匹配
<url-pattern>/*</url-pattern>--匹配所有URL
(注意:*只能出现在两端,不能出现在中间,如/a/*/c)
</serlvet-mappring>
web.xml文件的继承:
tomcat config文件夹下的web.xml是所有项目web.xml的父文件。
①里面配置了一个默认的servlet[DefaultServlet]。url-pattern是“/”。是一个返回404的servlet。
②还有一个处理jsp的servlet[JspServlet]。功能是将一个动态资源转换为一个静态资源。
③session超时时间配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
④扩展名,mine类型。
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
service(ServletRequest resuqest,ServletResponse response){
[类型强转:ServletRequest->HttpServletRequest;ServletResponse->HttpServletResponse]
service(HttpServletRequest resuqest,HttpServletResponse response){
if(GET){
doGet()
}
if(POST){
doPost()
}
}
}
需要用户实现doGet()或doPost()。这两个方法的默认实现时给客户端相应一个405错误。所以有必要的话就需要用户重写此方法。
【servlet的细节】
线程安全:
1、不要在servlet中创建成员,而使用局部变量。
2、可以创建无状态成员,无变量(即不受多线程影响的成员)。
3、可以创建有状态的成员,但是内容只读。
servlet的创建:
默认情况servlet会在第一次被调用是创建(“第一次惩罚”)。如果想保证在容器启动即创建,可以为servlet添加load-on-starup配置。
<servlet>
<load-on-starup>0</load-on-starup>--各个servlet之间的创建顺序
</servlet>
url-pattern:
一个servlet可以配置多个访问路径。可以使用通配符。
<serlvet-mappring>
<servlet-name>xxx</servlet-name>
<url-pattern>/A</url-pattern>
<url-pattern>/B</url-pattern>
<url-pattern>/servlet/*</url-pattern>--路径匹配
<url-pattern>*.do</url-pattern>--扩展名匹配
<url-pattern>/*</url-pattern>--匹配所有URL
(注意:*只能出现在两端,不能出现在中间,如/a/*/c)
</serlvet-mappring>
web.xml文件的继承:
tomcat config文件夹下的web.xml是所有项目web.xml的父文件。
①里面配置了一个默认的servlet[DefaultServlet]。url-pattern是“/”。是一个返回404的servlet。
②还有一个处理jsp的servlet[JspServlet]。功能是将一个动态资源转换为一个静态资源。
③session超时时间配置
<session-config>
<session-timeout>30</session-timeout>
</session-config>
④扩展名,mine类型。
<mime-mapping>
<extension>jpg</extension>
<mime-type>image/jpeg</mime-type>
</mime-mapping>
【ServletContext】--上下文对象,一个项目只有一个ServletContext。与天地同寿!也叫Application(应用程序)
获取ServletContext:
GenericServlet#getServletContext()
ServletConfig#getServletContext()
HttpSession#getServletContext()
ServletContextEvent#getServletContext()
功能:
①多个Servlet之间的"通信员",资源共享。
②获取公共的初始化参数。
<context-param>
<param-name>context-param</param-name>
<param-value>context-value</param-value>
</context-param>
③获取资源信息
String realPath = servletContext.getRealPath("/index.jsp");--获取绝对路径
InputStream is = servletContext.getResourceAsStream("/index.jsp");--获取资源流对象
【域对象的功能】
域对象的功能是在各个servlet之间传递数据。
ServletContext是javaWeb四大域对象之一:
PageContext;
ServletRequest;
HttpSession;
ServletContext。
{
void setAttribute(String name,Object value);
Object getAttribute(String name);
void removeAttribute(String name);
Enumeration getAttributeNames();
}
【其他:获取类路径下资源】--重要!重要!重要!
通过ClassLoader获取:
loader.getResourceAsStream("a/b/temp.txt");--获取src下/a/b包下的temp.txt资源
通过Class获取:
加"/":
与ClassLoader一样。class.getResourceAsStream("/a/b/temp.txt")
不加"/":
class.getResourceAsStream("temp.txt")。表示获取当前类路径下的资源。
【servlet过滤器】
Fileter:说白了就是一个特殊的servlet。过滤器在Web容器启动的时候创建完成,只创建一次。
web.xml 中的 filter-mapping 元素的顺序决定了 Web 容器应用过滤器到 Servlet 的顺序。
获取ServletContext:
GenericServlet#getServletContext()
ServletConfig#getServletContext()
HttpSession#getServletContext()
ServletContextEvent#getServletContext()
功能:
①多个Servlet之间的"通信员",资源共享。
②获取公共的初始化参数。
<context-param>
<param-name>context-param</param-name>
<param-value>context-value</param-value>
</context-param>
③获取资源信息
String realPath = servletContext.getRealPath("/index.jsp");--获取绝对路径
InputStream is = servletContext.getResourceAsStream("/index.jsp");--获取资源流对象
【域对象的功能】
域对象的功能是在各个servlet之间传递数据。
ServletContext是javaWeb四大域对象之一:
PageContext;
ServletRequest;
HttpSession;
ServletContext。
{
void setAttribute(String name,Object value);
Object getAttribute(String name);
void removeAttribute(String name);
Enumeration getAttributeNames();
}
【其他:获取类路径下资源】--重要!重要!重要!
通过ClassLoader获取:
loader.getResourceAsStream("a/b/temp.txt");--获取src下/a/b包下的temp.txt资源
通过Class获取:
加"/":
与ClassLoader一样。class.getResourceAsStream("/a/b/temp.txt")
不加"/":
class.getResourceAsStream("temp.txt")。表示获取当前类路径下的资源。
【servlet过滤器】
Fileter:说白了就是一个特殊的servlet。过滤器在Web容器启动的时候创建完成,只创建一次。
web.xml 中的 filter-mapping 元素的顺序决定了 Web 容器应用过滤器到 Servlet 的顺序。