ServletServletServletServlet第一天2007200720072007年6666月21212121日一、简述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文件。注意:使用完有限的资源要进行释放。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,用户通过浏览器向web服务器发送请求,服务器为用户定位资源静态资源:/a.html/a/b.html(这里的路径是针对web应用文件夹目录)读文件并把内容发送到客户端动态资源:解析web.xml定位Servlet类的名字装载类(WEB-INF/classes|WEB-INF/lib/*.jar)创建该对象的实例Servletser=(Servlet)(Class.forName(servle的类名)).newInstance();//我们写的Servlet一定要实现Servlet接口或者继承实现了Servlet接口的类ser.service(request,response);servlet-mappingservlet-nameservlet的名字(要和servlet标签中的相同)/servlet-nameurl-pattern指定servlet相对于应用目录的路径/url-pattern/servlet-mappingurl-parttern的配置,这个url就是Servlet的虚拟路径,可以使用相对路径或者是绝对路径。/xxx/xxx(绝对路径),xxx(相对路径),尽量使用绝对路径。访问servlet的方法应用文件夹名/url-patternhttp的请求get请求,post请求。get请求在发出请求时会把参数写在地址栏上,而post请求不会把要发送的参数显示在地址栏上。formmethod=getaction=应用名/url-pattern....../form我们可以通过ServletRequest对象的方法来获取请求中传送的参数。getParameter(Stringname)方法,可以获得form表单中指定名字的参数,多参数同名时,只取一个。getParameterNames(),可以获得一个迭代器Enumeration,通过这个迭代器,来获得form表单中参数的名字。getParameterValues(Stringname)获得指定的所有同名参数的值。ServletServletServletServlet第二天2007200720072007年6666月22222222日一、复习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请求,会将参数显示在浏览器的地址栏上,其显示格式,在地址之后会以问号开始,以'&'分隔参数,可以通过HttpServletRequest对象的getQueryString()方法来获得get请求的参数值。ServletRequest对象的getInputStream()方法可以获得一个由Socket得来的输入流,可以使用这个流来实现文件的上传。getReader()方法可以直接获取post请求的参数。注意:getParameter()与getReader()方法不能同时调用ServletContext对象是Servlet的上下文对象,这个对象是在服务器启动时创建的,他可以看作是一个应用的对象,他可以看作是包含Servlet,管理Servlet的对象。二、servlet的生命周期遵守servlet规范的类,就可以通过服务器产生对象(反射机制),并处理请求。servlet接口中的方法所有的servlet都必须实现javax.servlet.Servlet接口publicclassTestServletimplementsServlet{ServletConfigconfig;publicvoidinit(ServletConfigconfig)throwsServletException{this.config=config;//这个ServletConfig对象是由服务器生成,也就是有系统提供的,通过他可以获得启动信息。ServletConfig对象和Servlet是一一对应的。//这个方法是在Servlet创建后调用的。如果要是用到ServletConfig对象是一定要为对象赋值。}publicServletConfiggetServletConfig(){returnthis.config;}publicvoidservice(ServletRequestrequest,ServletResponseresponse)throwsServletException,IOException{...;//这个方法是用来处理请求的核心方法}publicStringgetServletInfo(){return....;//这个是用来写Servlet信息的,用来写作者,以及版本信息}publicvoiddestroy(){...;//这个方法是用来销毁Servlet对象的}}HttpServlet和GenericServlet都实现了Servlet接口。HttpServlet中的service(HttpServletRequestrequest,HttpServletResponseresponse)方法是通过service(ServletRequestrequest,ServletResponseresponse)方法的调