一、Servlet简介

  1. Servlet是动态网页开发技术,Servlet程序就是一个小的java程序,它运行在web服务器中。

  2. 编写第一个Servlet程序,向网页中输出”Hello World”

1.在tomcat中新建一个web应用目录(test),在test目录下新建WEB-INF目录,在该目录下新建classes目录,然后新建一个FirstServlet类,编写相应代码。

2.编译FirstServlet,转到该目录下,一般情况下我们的classpath指定的是j2se里面的核心类库,在编译之前在doc窗口中输入以下命令:set classpath=%classpath%;D:\apache-tomcat-6.0.35-windows-x86\apache-tomcat-6.0.35\lib\servlet-api.jar,后面的是tomcat服务器中servlet支持jar包的路径。然后使用javac命令进行编辑。

二、Servlet的生命周期

servlet servletconfig servletcontext_Servlet

 

三、使用MyEclipse开发Servlet

 

servlet servletconfig servletcontext_Servlet_02

 

四、HttpServlet

  1. HttpServlet在实现Servlet接口的时候,重写了Service()方法,该方法内部会自动判断请求方式,如果为Get则自动调用doGet(),如果为Post则自动调用doPost(),因此我们在创建Servlet时只要重写doGet(),doPost()方法,而不需要重写Service()。

五、Servlet开发细节

  1. 注册Servlet,主要通过servlet节点的<servlet-name> 和 <servlet-class>

  2. 映射Servlet,主要通过servlet-mapping节点的<servlet-name>和<url-pattern>

  3. 同一个Servlet可以被映射到多个URL上去,通过多个< servlet-name >相同的<servlet-mapping>来实现

  4. <url-pattern>中可以使用通配符,一种格式是*.扩展名,另一种格式是/开头,/*结尾

  5. 调用servlet的java程序叫做servlet引擎。

  6. 如果在<servlet>中配置了<load-on-startup>元素则服务棋会在启动时就加载并创建Servlet对象。

  7. 如果某个Servlet的映射路径是’/’则该Servlet是缺省Servlet,他处理所有其他Servlet都不处理的请求。(所有的请求都是访问Servlet的,访问网页资源的时候正是通过缺省Servlet来实现的)

六、Servlet的线程安全问题

  1. 当多个客户并发访问同一个Servlet时,web服务器会为每个请求创建一个线程调用Service方法,如果Service方法中访问了同一个资源就会引发县城安全问题。

如果某个Servlet实现了SingleThreadModel接口,那么Servlet引擎将会以单线程的模式调用Service方法。

七、ServletConfig对象

  1. 在Servlet的配置文件中可以使用一个或多个<init-param>标签为Servlet配置初始化参数,web服务器会在创建Servlet对象时,将这些参数封装在ServletConfig对象中,因此我们可以通过ServletConfig对象来获取一个Servlet的初始化参数。通常将Servlet运行时要读取的配置文件写在这里。

八、ServletContext对象

  1. ServletContext对象代表了一个应用,他是一个Context域对象,它里面的方法主要是一些全局性的方法,可以用来存储各个Servlet之间的共享数据。

  2. ServletContext对象的应用场景,主要用于Servlet之间数据共享(可以用来做聊天室),获取web应用的初始化参数,实现Servlet转发,读取资源文件。

  3. 配置web应用的初始化参数,在web.xml文件中使用标签<context-param>,通常在这里配置数据库连接,

  4. Servlet的转发和重定向,转发(你来请求我,我将请求转给他),通常转发给jsp用来美化输出,重定向(你来请求我,我让你重新请求他)

RequestDispatcher rd = this.getServletContext().getRequestDispatcher("/1.jsp");
rd.forward(request,response);

 

 

九、利用ServletContext读取资源文件

1.

1 InputStream stream = this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
2 Propertied prop = new Properties();
3 prop.load(stream);
4 prop.getProperty("user");

 

2.

//这种方式,可以很方便的获取文件名称
String path = this.getServletContext().getRealPath("/WEB-INF/classes/db.properties");
FileInputStream inStream = new FileInputStream(path);
Propertied prop = new Properties();
prop.load(stream);
prop.getProperty("user");

 

 

十、Java web应用中非Servlet程序读取资源文件

1.

servlet servletconfig servletcontext_Servlet_03
//使用类装载器,文件不能太大
publicclass UserDao
{
privatestatic Properties prop = new Properties();
static
{
//InputStream inStream = UserDao.class.getClassLoader().getResourceAsStream("db.properties");    这种方式无法获取到更新后的数据

String path = UserDao.class.getClassLoader().getResource("db.properties");
FileInputStream inStream = new FileInputStream(path); //这种方式可以获取到更新后的数据

prop.load(inStream);
}

publicvoid update()
{
//引用inStream
}

publicvoid find()
{
//引用inStream
}
}