开发servlet有三种方法:
1.实现servlet 接口
2.继承GenericServet (了解即可)
3.继承HttpServlet
servlet 不能独立运行,它运行完全由servlet引擎来控制和调度
面试题:请简述servlet的生命周期(工作流程)
其生命周期全过程:加载(Classloader);实例化(new);初始化(init(ServletConfig));处理请求(doget dopost);退出服务( destroy() 只会new一个对象,以后再调用也不会new )
a》当servlet第一次被调用的时候,会触发init函数,该函数会把servlet实例装载到内存。init函数只会被调用一次。
b》然后去调用 servlet 的service函数
c》当第二次后访问该servlet就直接调用serivice 函数
d》当web 应用reload 或者是关闭 tomcat 或者关机 都会调用 destory 函数,该函数应付去销毁servlet.
为什么需要web服务器/web究竟是干什么的??下面正在解答、、、、、
在DOS窗口下,netstat -anb来查看端口使用
Servlet 的单例问题:
当servlet 被第一次访问后,就被加载到内存,以后该实例对各个请求服务,即就是一个单例
.
1.实现servlet 接口
package heng.java.servlet;
import java.io.IOException;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class MyfirstServlet implements Servlet {
@Override//销毁该servlet,从内存中清除,该函数被调用一次。
public void destroy() {
}
@Override//得到servletConfig对象
public ServletConfig getServletConfig() {
return null;
}
@Override//该函数时得到servlet配置信息。
public String getServletInfo() {
return null;
}
@Override//该函数用于初始化servlet,就是把该servlet装载到内存中,该函数只会被调用一次
public void init(ServletConfig arg0) throws ServletException {
}
@Override//该函数是服务函数,我们的业务逻辑代码就是写在这里。该函数每次都会被调用
public void service(ServletRequest req, ServletResponse res)
throws ServletException, IOException {
System.out.println("helloworld21656"+new java.util.Date());
res.getWriter().println("helloworld "+new java.util.Date());
}
}
doGet 和doPost 的区别:
tomcat 环境变量配置
方法一:
方法二:
在tomcat 文件中修改启动文件(startu.bat) 在此文件中第二十五行添加 set JAVA_HOME= C:\Program Files (x86)\Java\jdk1.6.0_10
Tomcat 目录层次结构:
bin:启动和关闭tomcat的bat文件
conf:配置文件
server.xml:该文件用于配置和server相关的信息。比如tomcat启动端口后,配置Host,配置Context既web应用
web.xml:该文件配置与web应用(web应用就相当于是一个web站点)
tomcat-users.xml:该文件用户配置tomcat的用户密码和权限
lib: 该目录放置运行tomcat运行需要的jar包
logs:该目录存放日志,当我们需要去查看日志的时候,很有用!当我们启动tomcat错误时候,可以查询信息。
webapps:该目录下,放置我们的web应用(web站点)比如:建立web1目录,下面放置各种文件。。。则web1就被当做一个web应用管理起来(tomcat6.0 以后支持)
work:工作目录。该目录用于存放jsp被访问生成的对应的server文件和class文件。
在对servlet 进行映射的时候,可以使用通配符合有两种格式:
第一种格式:*扩展名 比如 *.do *.sdfsdfsdf
第二种格式:以/ 开头 同时以/* 结尾 比如:/* /sdfsd/*
第三种:/ 这是说此servlet是缺省的servlet,那么该servlet就只处理别的servlet都不处理的请求
在匹配的时候,要参考的标准:
(1)看谁的匹配度高,谁就被摆选择
(2)*. do 的优先级最低。
Servlet 的启动配置:
<servlet>
<servlet-name>MyServlet</servlet-name>
<servlet-class>com.heng.servlet.MyServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
这样,在tomcat启动时,servlet 对应的应用就初始化了,并创建了实例。。。。。不然只有当访问到该应用时才会初始化servlet,创建实例。
注意:static 修饰的属性,当类加载时就会被调用,从而写到内存里。。。所以static的必定是共享的,so容易造成线程并发,使程序崩溃