24@Servlet_day01
1、什么是servlet?
sun公司制订的一种用于扩展web服务器功能的组件规范。
1)扩展web服务器功能:
早期的web服务器(apache web server , iis )只能够处理静态资源(即需要事先写好html文件,放到特定的目录下面)的请求。
扩展方式:
方式一:cgi(common gateway
interface),可以使用c,perl等语言来开发cgi程序,将该程序放到web服务器特定的目录下面,当请求到达服务器时,服务器判断是静态资
源的请求还是动态资源的请求,如果是动态资源的请求,会调用cgi程序来处理。
cgi程序有两个问题:第一,是开发人员需要处理请求参数。另外一个是,程序的可移植差。
方式二:使用servlet
当请求到达web服务器时(使用tomcat,这种类型的web服务器同时也是一个
servlet容器,如果是apache
webserver或者是iis,则需要安装相应的插件)web服务器负责处理网络相关的问题(比如负责从http请求数据包中分析出相应的请求参数
等),servlet只需要处理业务逻辑就可以了。另外,sevlet是一个规范,即我们开发的servlet可以在不同的web服务器当中运行,不存在可移值性问题。
2)组件规范
组件:
实现了部分功能的软件模块,该软件模块不能够单独运行,必须要依赖容器才能运行。
容器:
提供组件的运行环境,并且管理组件的生命周期的一种程序。
组件和容器都必须符合相应的规范。
组件不依赖于特定的容器,即一个组件开发完了以后,可以在不同的容器当中运行(前提是:该组件和容器要符合同一个规范)。
2、如何开发一个servlet?
step1 写一个java类,需要实现Servlet接口或者继承HttpServlet。
step2 编译
step3 打包
需要建一个文件夹:
appname (名称可以自已定义,一般称为应用名)
--WEB-INF
----classes (.class文件)
----
lib (可选,放的是servlet运行时需要的一些jar文件,比如数据库的jdbc驱动)
----web.xml (servlet的描述)
step4 部署
将step3建立的整个文件夹或者使用jar命令整个文件夹进行压缩之后生成的.war文件进行拷贝。
拷贝到web服务器特定的文件夹,比如对于tomcat,是webapps文件夹。
step5 启动服务器,访问servlet
http://ip:port/appname/servlet-url(servlet-url在web.xml文件中有相应的配置)
http://localhost:8080/firstweb/sayHello
3、tomcat的安装与简单使用
tomcat本身是一个servlet容器(即可以提供servlet运行环境的一个程序,但是,tomcat还提供了webserver所具有的所有功能,所以,我们也称tomcat
是一个web server。其实,所有的servlet容器,都是一个web server)。
1)安装
step1 : /opt/apache...tomcat..解压缩到 /home/soft01
step2 : 环境变量
cd /home/soft01
vi .bash_profile
JAVA_HOME: jdk的安装路径,比如 /opt/jdk5
CATLINA_HOME: tomcat的安装路径,比如/home/soft01/tomcat5
PATH: /home/soft01/tomcat5/bin
step3 :启动tomcat
cd /home/soft01/tomcat5/bin
sh startup.sh (linux,unix)
或者
sh catalina.sh run(如果startup执行出错)
startup.bat(windows)
在浏览器地址栏输入 http://localhost:8080
2)简单使用
a, 关闭服务器
cd /home/soft01/tomcat5/bin
sh shutdown.sh(linux,unix)
shutdown.bat(windows)
b,了解各个文件夹的作用
bin: 可执行文件
common: 可以被部署在该服务器上的应用程序共享的一些jar文件。
conf: 服务器的配置文件。
webapps: 部署文件夹,里面包含了一些自带的web应用。
work:tomcat运行时,生成的一些临时文件
。
4、使用myeclipse开发servlet?
1)让myeclipse管理tomcat
step1 如果tomcat已经启动,先关闭。
cd /home/soft01/tomcat5/bin
sh shutdown.sh
step2 启动myclipse,点击 configserver,找到Myeclipse-->applicationservers-->tomcat,
选择对应的版本(比如你用的tomcat5.5,就使用tomcat5.x)
,选择tomcat的安装路径(比如/home/soft01/tomcat5),注意看一下jdk是否配置正确,还有启动模式改为run。
2)创建一个web工程。
3) 在src下面创建一个java类
4) 在web.xml添加servlet的描述信息
5) 部署
6) 访问(检查服务器是否已经启动,如果没有,要启动)
5、常见的错误
1) 404错误:
表示要访问的地址不存在。
解决方式:
检查你的servlet的访问地址,正确的地址应该是:http://localhost:8080/appname/servlet-url
2)405错误:
service方法写错了
解决方式:
仔细检查service方法的签名,正确的格式是:
public void service(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException
3)500错误:
程序出错
解决方式:
检查servlet源文件
检查web.xml配置文件
6、servlet的运行过程
当从浏览器地址栏输入 http://localhost:8080/web01/sayHello?name=zs
step1 浏览器依据ip,port建立与服务器之间的连接
step2 浏览器将请求资源路径(web01/sayHello?name=zs)以及其它相关信息按http协议打成一个数据包。
step3 发送请求。
step4 服务器对请求数据包进行解析(拆包),将处理结果存放到request对象(请求对象)里。
step5 同时,服务器还会创建一个对象response(响应对象)。
step6 服务器通过appname(即web01)找到webapps下面的web01文件夹。通过web01下面的web.xml文件,找到servlet的完整的类名,然后依据反射机制创建该servlet对象。
step7 服务器调用servlet对象的service方法,在调用时,会将事先创建好的request,response对象作为参数传递给servlet对象。
step8 可以在servlet的service方法里,调用request对象的方法来获得请求参数(request.getParameter),然后进行相应的处理(业务逻辑)。
step9 servlet将处理结果输出到response对象。
step10 服务器从response对象里取出数据。
step11 服务器将取出的数据打包。
step12 服务器发送数据给浏览器。
step13 浏览器从数据包中解析出相应的数据(拆包)
step 14 浏览器生成相应的界面。
我们只需要手动完成步骤8和步骤9即可完成一个Servlet程序的开发。
从中可以得出一个结论: 服务器为servlet提供了
很多基础服务(比如网络问题),开发人员只需要在servlet类里面编写相应的业务逻辑就可以了。
练习1:
写一个DateServlet,在浏览器地址栏输入http://ip:port/web01_lab/date会输出当前的系统日期,比如,会输出2012-05-21
cd /sbin
./ifconfig
练习2:
写一个BMIServlet,在浏览器地址栏输入
http://localhost:8080/web01_home/bmi?weigth=70&height=1.8&
gender=m该servlet会计算对应的bmi指数,最后输出体质情况,比如输出"过轻"。
bmi计算的规则:
体质指数(BMI)=体重(kg)/身高(m)/ 身高(m)
EX:70kg/1.75/1.75=22.86
成人的BMI数值
体重指数, 男性, 女性
过轻, 低于20, 低于19
适中, 20-25, 19-24
过重, 25-30, 24-29
肥胖, 30-35, 29-34
非常肥胖, 高于35, 高于34
专家指出最理想的体重指数是22