servlet(培训笔记).pdf
《servlet(培训笔记).pdf》由会员分享,可在线阅读,更多相关《servlet(培训笔记).pdf(21页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、ServletServletServletServlet第一天第一天2007200720072007年年 6 6 66月月 21212121日日一、简述1、Servlet,服务器端的小程序,它是相对于 Applet 而言的,Applet 是客户端小程序。Servlet,是接受来自网络的请求(form表单,以及其他的请求),并对不同请求作出不同的响应Servlet,是基于 Http 协议的,是运行在 web 服务器中的程序。这里要提出一个容器的概念。servlet 是运行在 web 容器中,在后面会详细地讲解,这个 web 容器可以控制 Servlet 对象的生命周期,控制请求由 Servlet
2、 对象处理。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:xxxxxx)在启动 Tomcat 时,是运行 Tomcat 的 bin 目录下的 sta
3、rtup.sh(windows中使用 startup.bat)判断 Tomcat 是否启动成功,可以在浏览器的地址栏中使用 http:/localhost:8080/或 http:/127.0.0.1:8080/可以访问到tomcat 的主页就是启动成功了。要想停止 tomcat 服务器要使用 shutdown.sh(windows中使用 shutdown.bat),如果直接关闭启动窗口,就会造成8080 端口占用错误,这时可以在使用 shutdown.sh 关闭一下服务器。startup.sh,shutdown.sh,shutdown.bat,startup.bat 这些文件其实是一些脚本文
4、件用来执行大量的命令,也就是大量 java命令。tomcat 的默认监听端口是 8080 端口,当接受到每一个连接请求,就会为其分配一个线程。tomcat 可以识别的资源只有在 webapps文件夹下,webapps也就是 web 应用文件夹,webapps 下的文件夹这些文件夹中存放的就是 web应用,web 应用是有格式规范的,每个web 应用的文件夹下都要有 WEB-INF文件夹,WEB-INF 文件夹下有 classes,和 lib 文件夹,以及一个 web.xml 文件,一些使用到的类文件放在 classes 中,一些使用到的相应的 jar 文件。注意:使用完有限的资源要进行释放。t
5、omcat 中配置了 root 缺省应用,也就是在不指定的情况下会默认访问这个应用。web.xml 文件的写法在 tomcat 服务器中,访问应用下的资源可以在端口号后架上 web 应用文件夹得名字就可以看到资源http:/localhost:8080/xxxxx/xxxx.html,静态页面只能放在 web 应用的文件夹下,不能够放在 WEB-INF文件夹下,WEB-INF 文件夹中的资源是受保护的,不能够通过网络访问到。三、Servlet 基础Servlet,可以实现动态的页面,可以针对不同的请求作出不同的响应,可以实现页面的流转,Servlet 可以充当MVC 模式中的 Ctrl 模块,
6、他可以控制信息的流向。web 服务器会 web 应用在 WEB-INF文件夹下的 classes 文件夹搜索要加载的 class 文件,所以我们写的 class 文件要放在 web应用中的 WEB-INF 文件夹下的 classes 文件夹下。设置 servlet 的类和访问的方式web.xml 文件的配置,一个 web.xml 中可以配置多个 Servletservlet 的名字servlet 类全名servlet 的名字 1servlet 类全名 1servlet 的名字(要和 servlet 标签中的相同)指定 servlet 相对于应用目录的路径servlet-mappingservl
7、et 的名字 1指定 servlet 相对于应用目录的路径catalina.sh run 带控制台启动 tomcat 服务器。Edited by Foxit ReaderCopyright(C)by Foxit Software Company,2005-2008For Evaluation Only.四、Servlet 的调用过程1,用户通过浏览器向 web服务器发送请求http:/serverip:port/apppath2,服务器为用户定位资源静态资源:/a.html/a/b.html(这里的路径是针对 web 应用文件夹目录)读文件并把内容发送到客户端动态资源:解析 web.xml 定
8、位 Servlet 类的名字装载类(WEB-INF/classes|WEB-INF/lib/*.jar)创建该对象的实例Servlet ser=(Servlet)(Class.forName(servle 的类名).newInstance();/我们写的 Servlet 一定要实现 Servlet 接口或者继承实现了 Servlet 接口的类ser.service(request,response);servlet 的名字(要和 servlet 标签中的相同)指定 servlet 相对于应用目录的路径url-parttern 的配置,这个 url 就是 Servlet 的虚拟路径,可以使用相对
9、路径或者是绝对路径。/xxx/xxx(绝对路径),xxx(相对路径),尽量使用绝对路径。访问 servlet 的方法http:/serverip:port/应用文件夹名/url-patternhttp 的请求get 请求,post请求。get 请求在发出请求时会把参数写在地址栏上,而 post 请求不会把要发送的参数显示在地址栏上。.我们可以通过 ServletRequest 对象的方法来获取请求中传送的参数。getParameter(String name)方法,可以获得 form表单中指定名字的参数,多参数同名时,只取一个。getParameterNames(),可以获得一个迭代器 Enu
10、meration,通过这个迭代器,来获得 form 表单中参数的名字。getParameterValues(String name)获得指定的所有同名参数的值。ServletServletServletServlet第二天第二天2007200720072007年年 6 6 66月月 22222222日日一、复习servlet 接口的实现类中的 service()方法,在继承 HttpServlet 类时,如果没有覆盖父类的 service()方法,那么父类的service()方法会根据请求类型不同的会分别调用覆盖的 doGet(),doPost()方法,如果响应两种请求的动作相同,那么可以直接
11、覆盖 service()方法。如果覆盖了 doGet(),doPost()方法之一,那么就会只对一种请求作出相应。在浏览Edited by Foxit ReaderCopyright(C)by Foxit Software Company,2005-2008For Evaluation Only.器的地址栏操作按回车键,或者是热连接,都是 get 请求,form 的 method 属性如果不指定,默认为 get 请求。我们可以通过 ServletRequest 对象或 HttpServletRequest 对象的方法来获取请求中传送的参数。getParameter(String name)方法
12、,可以获得 form表单中指定名字的参数,多参数同名时,只取一个。getParameterNames(),可以获得一个迭代器 Enumeration,通过这个迭代器,来获得 form 表单中参数的名字。getParameterValues(String name)获得指定的所有同名参数的值。get 请求,会将参数显示在浏览器的地址栏上,其显示格式,在地址之后会以问号开始,以&分隔参数,可以通过 HttpServletRequest 对象的 getQueryString()方法来获得 get 请求的参数值。ServletRequest 对象的 getInputStream()方法可以获得一个由
13、Socket 得来的输入流,可以使用这个流来实现文件的上传。getReader()方法可以直接获取 post请求的参数。注意:getParameter()与 getReader()方法不能同时调用 ServletContext 对象是 Servlet 的上下文对象,这个对象是在服务器启动时创建的,他可以看作是一个应用的对象,他可以看作是包含 Servlet,管理 Servlet 的对象。二、servlet 的生命周期遵守 servlet 规范的类,就可以通过服务器产生对象(反射机制),并处理请求。servlet 接口中的方法所有的 servlet 都必须实现 javax.servlet.Ser
14、vlet 接口public class TestServlet implements Servlet ServletConfig config;public void init(ServletConfig config)throws ServletException this.config=config;/这个 ServletConfig 对象是由服务器生成,也就是有系统提供的,通过他可以获得启动信息。ServletConfig对象和 Servlet 是一一对应的。/这个方法是在 Servlet 创建后调用的。如果要是用到 ServletConfig 对象是一定要为对象赋值。public Se
15、rvletConfig getServletConfig()returnthis.config;public void service(ServletRequest request,ServletResponseresponse)throwsServletException,IOException.;/这个方法是用来处理请求的核心方法public String getServletInfo()return.;/这个是用来写 Servlet 信息的,用来写作者,以及版本信息public void destroy().;/这个方法是用来销毁 Servlet 对象的HttpServlet 和 Gen
16、ericServlet 都实现了 Servlet 接口。HttpServlet 中的 service(HttpServletRequest request,HttpServletResponse response)方法是通过 service(ServletRequestrequest,ServletResponse response)方法的调用来实现对请求的处理。1、Servlet 的生命周期分为四个阶段(1)创建 Servlet 对象,通过服务器反射机制创建 Servlet 对象,第一次请求时才会创建。(默认)(2)调用 Servlet 对象的 init()方法,初始化 Servlet 的信
17、息,init()方法只会在创建后被调用一次(3)响应请求,调用 service()或者是 doGet(),doPost()方法来处理请求,这些方法是运行的在多线程状态下的。(4)在长时间没有被调用或者是服务器关闭时,会调用 destroy()方法来销毁 Servlet 对象。2、servlet 创建时机:(1)第一个请求到来的时候创建(2)在 web.xml 中标签下添加2,则在服务器启动的时候就创建标签体是正数的时候,启动服务器,即创建 servlet并且当多个标签都定义了这个时,数字小的先加载3、初始化参数可以通过标签来配置初始化参数,可以用 ServletConfig 对象的getIni
18、tParameter(String name)方法来得到参数。.三、多线程下的操作多线程下所操作的变量,如果操作的是一个变量,且兼有读写操作,就要考虑加上同步,但同步不能乱加,否则会造成死锁问题。init()和 destroy()方法都是运行在单线程下的。四、分布式模型把系统部署在不同的地址空间执行在有限的硬件条件下,服务更多的用户在 Servlet 中可以访问,JDBC,RMI(远程方法调用),以及跨语言平台的组件等资源。在 Servlet 中是用 JDBC 很容易,也就是在 Servlet 中调用 JDBC 中的方法,就可以实现对数据库的访问五、有参和无参的 init 方法。Edited
19、by Foxit ReaderCopyright(C)by Foxit Software Company,2005-2008For Evaluation Only.public void init(ServletConfig config)throwsServletExceptionthis.config=config;init();public void init()throws ServletException.;/覆盖了的无参的 init()方法,会在 Servlet 创建,调用有参的 init 方法时也会被调用。先覆盖 init(),有父类调 init(config)init()方法可
20、抛异常,初始化成功才进入 service()方法中六、war文件扩展名为“.war”的文件放在 tomcat 的 webapps下,当服务器启动的时候,自动把文件解压开注意:文件名字,就是将来访问时应用的名字ServletServletServletServlet第三天第三天2007200720072007年年 6 6 66月月 25252525日日一、连接池在应用的 META-INF 文件夹下 context.xml 文件中以下是从连接池去取数据库连接的代码public static Connection getConnection(String JNDIName)auth=Containe
21、rEdited by Foxit ReaderCopyright(C)by Foxit Software Company,2005-2008For Evaluation Only.LDAP:把数据存放在内存中JNDI:管理LDAPConnection conn=null;tryContext initCtx=new InitialContext();Context envCtx=(Context)initCtx.lookup(java:comp/env);/这个是在 tomcat 下默认绑定 Context 的JNDInameDataSource ds=(DataSource)envCtx.l
22、ookup(JNDIName);conn=ds.getConnection();catch(NamingException ne)ne.printStackTrace();catch(SQLException se)se.printStackTrace();returnconn;二、JavaEE 编程分层表现层,业务层,数据层。表现层,也就算用来显示数据,接受数据的。JSP,Servlet业务层,是处理核心业务的程序 EJB,JDBC(Hibernate)数据层,也就是数据库,用来存放数据。Oracle,SQLServerMVC 框架Model,模型层,这一层一般是进行数据库访问,并且封装对象
23、,这一层中也存放在访问数据库取出信息封装成对象的类,也就是实体类的信息,可以使用 JDBC 或者 Hibernate 实现这一层的功能。Ctrl,控制层,用来相应请求和调用写好的相应的访问数据库的方法,这一层是用来控制请求的响应的,现在我们是使用 Servlet 来实现这一层,不过一般是会用开源的 MVC 框架来实现这层,例如 struts,或者是Spring 的 MVC框架。View,表现曾,他只用来显示数据和收集必要数据,收集数据的一般是 form表单,不过要保证数据的正确性要是用 JavaScript 验证信息,以后我们会学到的 JSP(java serverpage)就是用来表现、显示
24、数据的。三、Servlet 的控制流转ServletContext,Servlet 上下文对象,在每个 Servlet 中都会有一个 ServletContext 的引用,这个 ServletContext 是一个全局的对象,每个应用中只有一个 ServletContext 对象。HttpServlet 中的 getServletContext()方法,获得 ServletContext 对象。ServletContext 类的 getRequestDispatcher(String path)方法获得一个 RequestDispatcher 对象,并且跳转到指定的 Servlet,getRe
25、questDispatcher(String path)方法中的参数就是 path,就是指定跳转的 Servlet 的 url-pattern。RequestDispatcher 类的 forward(ServletRequest request,ServletResponse response)方法,可以把请求对象转发给其他的 Servlet。include 用在 v 层 forward 用在 c层ServletRequest.getRequestDispatcher();/relativeServletContext.getRequestDispatcher();/absolute一个 S
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- servlet 培训 笔记
限制150内