Servlet第一天2007年6月21日一、简述1、Servlet,服务器端的小程序,它是相对于Applet而言的,Applet是客户端小程序。Servlet,是接受来自网络的请求(form表单,以及其他的请求),并对不同请求作出不同的响应Servlet,是基于Http协议的,是运行在web服务器中的程序。这里要提出一个容器的概念。servlet是运行在web容器中,在后面会详细地讲解,这个web容器可以控制Servlet对象的生命周期,控制请求由Servlet对象处理。2、web服务器,这里的服务器不是硬件概念,而是软件,常用的web服务器有Tomcat,Jboss等,我们所用到的Tomcat是一个开源的服务器,Tomcat是一个用java语言编写的web服务器,所以需要有相应的java运行环境,也就是JVM,还要配置tomcat的具体路径。二、Tomcat的配置JAVA_HOME=/XXX/XXX/(JDK路径,bin的上一层目录)CATALINA_HOME=/XXXX/XXX(tomcat的绝对路径windows中X:\xxx\xxx)在启动Tomcat时,是运行Tomcat的bin目录下的startup.sh(windows中使用startup.bat)判断Tomcat是否启动成功,可以在浏览器的地址栏中使用或可以访问到tomcat的主页就是启动成功了。要想停止tomcat服务器要使用shutdown.sh(windows中使用shutdown.bat),如果直接关闭启动窗口,就会造成8080端口占用错误,这时可以在使用shutdown.sh关闭一下服务器。startup.sh,shutdown.sh,shutdown.bat,startup.bat这些文件其实是一些脚本文件用来执行大量的命令,也就是大量java命令。tomcat的默认监听端口是8080端口,当接受到每一个连接请求,就会为其分配一个线程。tomcat可以识别的资源只有在webapps文件夹下,webapps也就是web应用文件夹,webapps下的文件夹这些文件夹中存放的就是web应用,web应用是有格式规范的,每个web应用的文件夹下都要有WEB-INF文件夹,WEB-INF文件夹下有classes,和lib文件夹,以及一个web.xml文件,一些使用到的类文件放在classes中,一些使用到的相应的jar文件放在lib文件夹下,若多个应用都要用到的文件夹可放到common/lib文件夹下。注意:使用完有限的资源要进行释放。tomcat中配置了root缺省应用,也就是在不指定的情况下会默认访问这个应用。web.xml文件的写法?xmlversion=1.0encoding=ISO-8859-1?!DOCTYPEweb-appPUBLIC-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN在tomcat服务器中,访问应用下的资源可以在端口号后面加上web应用文件夹的名字就可以看到资源,静态页面只能放在web应用的文件夹下,不能够放在WEB-INF文件夹下,WEB-INF文件夹中的资源是受保护的,不能够通过网络访问到。三、Servlet基础Servlet,可以实现动态的页面,可以针对不同的请求作出不同的响应,可以实现页面的流转,Servlet可以充当MVC模式中的Ctrl模块,他可以控制信息的流向。web服务器会在web应用的WEB-INF文件夹下的classes文件夹下搜索到要加载的class文件,所以我们写的class文件要放在web应用中的WEB-INF文件夹下的classes文件夹下。设置servlet的类和访问的方式web.xml文件的配置,一个web.xml中可以配置多个Servlet!DOCTYPEweb-appPUBLIC-//SunMicrosystems,Inc.//DTDWebApplication2.3//EN的名字/servlet-nameservlet-classservlet类全名/servlet-class/servletservletservlet-nameservlet的名字1/servlet-nameservlet-classservlet类全名1/servlet-class/servletservlet-mappingservlet-nameservlet的名字(要和servlet标签中的相同)/servlet-nameurl-pattern指定servlet相对于应用目录的路径/url-pattern/servlet-mappingservlet-mappingservlet-nameservlet的名字1/servlet-nameurl-pattern指定servlet相对于应用目录的路径/url-pattern/servlet-mapping/web-appcatalina.shrun在控制台启动tomcat服务器。四、Servlet的调用过程1、服务器:startupA:加载${CATALINA-HOME}\webapps目录下的所有应用B:解析application\WEB-INF\web.xml2、客户端:输入应用文件夹(myservapp)/url-pattern(/basic/time)3、服务器:得到/myservapp,认为当前的请求中的内容来自${CATALINA_HOME}\webapps\myservapp,并得到resourcepath(/basic/time)①当resourcepath所指向的资源为static即html文件时则直接sendpagecontentstoclient②当resourcepath所指向的资源为dynamic(servlet)时,服务器便会根据web.xml中的关系(此时已经解析为内存中的对象)定位resourcepath对应的servlet字节码文件,然后容器通过反射机制创建一个servlet实例HttpServletservlet=(HttpServlet)Class.forName(ClassName).newInstance();然后根据客户端请求的方式选择调用doGet()或doPost()方法最后Sendservletoutputstoclienthttp的请求get请求在发出请求时会把参数写在地址栏上,post请求不会把要发送的参数显示在地址栏上。formmethod=getaction=应用名/url-pattern....../form我们可以通过ServletRequest对象的方法来获取请求中传送的参数。getParameter(Stringname)方法,可以获得form表单中指定名字的参数,多参数同名时,只取一个。getParameterNames(),可以获得一个迭代器Enumeration,通过这个迭代器,来获得form表单中参数的名字。getParameterValues(Stringname)获得指定的所有同名参数的值。五、错误404错误:一般都是资源找不到才产生的500错误:资源找到了,但是服务器执行时出错405错误:只有servlet中才有,jsp中不会出现该类错误六、服务器的配置在tomcat目录中的conf目录下可以进行一些设置1、在web.xml中init-paramparam-namelistings/param-nameparam-valuetrue/param-value/init-param当listings的值为true时,若在资源路径中转入目录时,会显示该目录中包含的可访问文件session-configsession-timeout30/session-timeout/session-config可以用来设置Session超时的时间(单位min)welcome-file-listwelcome-fileindex.html/welcome-filewelcome-fileindex.htm/welcome-filewelcome-fileindex.jsp/welcome-file/welcome-file-list可以用于设置欢迎页面2、在tomcat-users.xml中可以用来设置角色、用户名、密码、管理员tomcat-usersrolerolename=manager/rolerolename=tomcat/rolerolename=admin/rolerolename=role1/userusername=bothpassword=tomcatroles=tomcat,role1/userusername=tomcatpassword=tomcatroles=tomcat/userusername=adminpassword=adminadminroles=admin,manager/userusername=role1password=tomcatroles=role1//tomcat-users4、在server.xml中可以设置服务器所使用的端口等信息Connectorport=8888maxHttpHeaderSize=8192maxThreads=150minSpareThreads=25maxSpareThreads=75enableLookups=falseredirectPort=8443acceptCount=100connectionTimeout=20000disableUploadTimeout=true/七、杂项动态的获得应用路径:request.getContextPath()动态的获得资源路径:request.getServletPath()浏览器地址栏内路径后面可跟:?表单中的项目egname=heshuying&age=23;Jsessionid=45632330055845666Servlet第二天2007年6月22日一、复习servlet接口的实现类中的service()方法,在继承HttpServlet类时,如果没有覆盖父类的service()方法,那么父类的service()方法会根据请求类型不同的会分别调用覆盖的doGet(),doPost()方法,如果响应两种请求的动作相同,那么可以直接覆盖service()方法。如果覆盖了doGet(),doPost()方法之一,那么就会只对一种请求作出相应。在浏览器的地址栏操作按回车键,或者是热连接,都是get请求,form的method属性如果不指定,默认为get请求。我们可以通过ServletRequest对象或HttpServletRequest对象的方法来获取请求中传送的参数。getParameter(Stringname)方法,可以获得form表单中指定名字的参数,多参数同名时,只取一个。getParameterNames(),可以获得一个迭代器Enumeration,通过这个迭代器,来获得form表单中参数的名字。getParameterValues(Stringname)获得指定的所有同名参数的值。get请求,会将参数显示在浏览器的地址栏上