为什么会出现servlet?
需求:请用你现有的java技术,开发一个动态网页,比如可以让用户留言,其他人可以回复。
显然现有的普通的java技术很难实现这样一些和用户交互的功能。Sun公司就开发了servlet技术供程序员使用。
●什么是servlet
Servlet技术是在java EE出现之前就存在了,在开发动态网页中,得到广泛应用,直到现在的java EE项目中也是非常重要的,同时jsp也是在servlet的基础上发展起来的。因此,掌握好servlet太重要了。
Servlet(java服务器端小程序)是用java编写的服务器程序,它的特点:
-
他是由服务器端(tomcat)调用和执行的。
-
他是用java语言编写的。
-
他是按照Servlet规范开发的。
-
功能强大,可以完成几乎所有的网站功能。
-
是学习jsp的基础。
●servlet/jsp开发工具
▶普通的文本编辑器:notepad,uedit32,editplus
▶集成开发工具jcreator,jbuilder,eclipse,netbean
▶运行环境:
浏览器:绝大部分浏览器
Web服务器:Tomcat、Bea weblogic、Ibm websphere、Resin、JBoss
数据库:sql server2000,sybase,mysql,access,oracle ,db2
●Tomcat和servlet在网络中的位置
Tomcat是一个免费的开源Servlet容器,它是Apache基金会的Jakarta项目中的一个核心项目,由Apache,Sun和其他一些公司及个人共同开发而成。
●Servlet的快速入门案例
开发Servlet的三种方法:
a.实现servlet接口
b.继承GenericServlet
c.继承HttpServlet
重点是第一种和第三种,真正的开发一般采用第三种,但第一种更能体现Servlet的生命周期。
需求如下:请使用实现Servlet接口的方法,来开发一个Servlet,要求该Servlet能够显示一句话:Hello,World,同时显示当前时间(体现动态效果)。
步骤如下:
-
建立一个Web应用myWeb
-
在myWeb下建立WEB-INF/web.xml文件(可以从ROOT/WEB-INF拷贝)
-
在myWeb下建立classes目录和lib目录,我们的Servlet就要在classes目录下开发。
-
开发myFirstServlet.java
package com.gavin.servlet;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class myFirstServlet implements Servlet{
//该函数用于初始化servlet,即把该servlet装载到内存中
//该函数只会被调用一次
public void init(ServletConfig config)
throws ServletException{
}
//该函数得到ServletConfig对象
public ServletConfig getServletConfig(){
return null;
}
//该函数是服务函数,我们的业务逻辑代码就是写在这里的
//对于浏览器的每次请求,该函数每次都会被调用
public void service(ServletRequest req,
ServletResponse res)
throws ServletException,
java.io.IOException{
//在控制台输出
System.out.println("Hello,World "+new java.util.Date());
//在浏览器输出
res.getWriter().println("Hello,World "+new java.util.Date().toLocaleString());
}
//该函数得到servlet的配置信息
public java.lang.String getServletInfo(){
return null;
}
//销毁该servlet,从内存中清除,该函数和init函数是配对的
//该函数也只会被调用一次
public void destroy(){
}
}
5.根据servlet的规范,我们还需要部署Servlet
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">
<!--根据Servlet规范,需要将Servlet部署到web.xml文件-->
<!--没开发一个Servlet,都要在web.xml中部署-->
<servlet>
<!--servlet-name,指定servlet名称,可以自己定义
并不一定和Servlet的类名一致,但习惯上一致-->
<servlet-name>myFirstServlet</servlet-name>
<!--servlet-class要指明该servlet放在哪个包下的,形式如下:包.类-->
<servlet-class>com.gavin.servlet.myFirstServlet</servlet-class>
</servlet>
<!--servlet-mapping是servlet的映射-->
<servlet-mapping>
<!--这里要和上面的servlet-name一致,这样才能匹配上-->
<servlet-name>myFirstServlet</servlet-name>
<!--url-pattern这里就是将来访问该servlet的资源名称,可以自定义-->
<!--默认命名规范就是该servlet的名字,前面的斜杠绝对不能丢-->
<url-pattern>/myFirstServlet</url-pattern>
</servlet-mapping>
</web-app>
6.测试
在浏览器中输入http:localhost:8080/myWeb/ myFirstServlet回车
运行效果:
7.分析一下手工配置web.xml时可能出现的错误
①servlet-name前后映射不一致
②servlet-class后面有.java或者.class后缀,会报500错误
③在浏览器中输入url时资源名称与web.xml中配置的url-pattern不一致,会报404错误
【补充知识点1:如果使用javac去编译一个java文件,则需要带命令参数:
javac–d . java文件】
【补充知识点2:如何不重启tomcat,就指定去reload一个web应用?方法:进入到tomcat的manager界面,在之中找到自己的web应用,并点击reload即可。
】