




已阅读5页,还剩54页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
u 背景知识介绍J2EE的13种技术java-servlet-jsp 技术总是有一个演变过程zip粘贴到word设置u 回顾一下我们现有的技术java 基础(面向对象,集合,界面,线程,文件,网络)jdbc (java 的数据库编程)oracle / mysql / sqlserverhtml css javascript (web 开发) -网页设计xml serlvet+jsp -java web开发使用java技术做 web开发u java ee 体系的介绍u servlet项目演示u web 开发介绍 静态页面 (html) 动态页面1. 用户可以输入数据,和页面交互(注册,购物,发帖子,付款.)2. 不同时间打开页面,内容是变化.3. 目前比较流行的左动态页面的技术 ( servlet/jsp , php , , asp, cgi )u 动态网页技术的比较(了解)u bs 和 cs的比较(1) BS:browser server 浏览器服务器(用HttpWatch Professional抓浏览器包)(2)cs client server 客户服务u 为什么需要的web服务器/web究竟是干什么的?模拟一个web服务器 MyWebServer.javaimport java.io.*;import .*;public class MyWebServerpublic static void main(String args) throws ExceptionServerSocket ss=new ServerSocket(80);/提示一句话System.out.println(在 9999 上等待连接.);Socket s=ss.accept();OutputStream os=s.getOutputStream();BufferedReader br=new BufferedReader(new FileReader(d:hello.html);String buf=;while(buf=br.readLine()!=null)os.write(buf.getBytes();/关闭流br.close();os.close();s.close();u 通过tomcat来讲解BS结构u 安装tomcat服务器(1) 解压即可(2) 配置Java中设置classpath、path、JAVA_HOME的作用Thinking in Java对classpath作用的解释Java 解释器的工作程序如下:首先,它找到环境变量CLASSPATH(将Java 或者具有Java 解释能力的工具如浏览器安装到机器中时,通过操作系统进行设定)。CLASSPATH 包含了一个或多个目录,它们作为一种特殊的“根”使用,从这里展开对.class 文件的搜索。从那个根开始,解释器会寻找包名,并将每个点号(句点)替换成一个斜杠,从而生成从CLASSPATH 根开始的一个路径名(所以package foo.bar.baz 会变成foobarbaz 或者foo/bar/baz;具体是正斜杠还是反斜杠由操作系统决定)。随后将它们连接到一起,成为CLASSPATH 内的各个条目(入口)。以后搜索.class 文件时,就可从这些地方开始查找与准备创建的类名对应的名字。此外,它也会搜索一些标准目录这些目录与Java 解释器驻留的地方有关。为进一步理解这个问题,下面以我自己的域名为例,它是。将其反转过来后,com.bruceeckel 就为我的类创建了独一无二的全局名称(com,edu,org,net 等扩展名以前在Java 包中都是大写的,但自Java 1.2 以来,这种情况已发生了变化。现在整个包名都是小写的)。由于决定创建一个名为util 的库,我可以进一步地分割它,所以最后得到的包名如下:package com.bruceeckel.util;现在,可将这个包名作为下述两个文件的“命名空间”使用:/: Vector.java/ Creating a packagepackage com.bruceeckel.util;public class Vector public Vector() System.out.println(com.bruceeckel.util.Vector);/: List.java/ Creating a packagepackage com.bruceeckel.util;public class List public List() System.out.println(com.bruceeckel.util.List);这两个文件都置于我自己系统的一个子目录中:C:DOCJavaTcombruceeckelutil若通过它往回走,就会发现包名com.bruceeckel.util,但路径的第一部分又是什么呢?这是由CLASSPATH环境变量决定的。在我的机器上,它是:CLASSPATH=.;D:JAVA LIB;C:DOCJavaT可以看出,CLASSPATH 里能包含大量备用的搜索路径。然而,使用JAR 文件时要注意一个问题:必须将JAR文件的名字置于类路径里,而不仅仅是它所在的路径。所以对一个名为grape.jar 的JAR 文件来说,我们的类路径需要包括:CLASSPATH=.;D:JAVA LIB;C:flavorsgrape.jar个人理解说明:其实从上面可以看出,如果你用记事本来写java程序(在Window下),并用cmd命令窗口中输入javac,java命令,如果你的代码中用到了其它的jar或者你自己的写的类,但又和你的主程序没在一个包下,这时你就要在classpath中设置你要用到的jar或者自己写的类的路径,让Java在编译器可以找到你要用的东西,如上面例子所示。在我们用一些工具时,如eclipse中,我们可以把一些Jar包什么的添加进来,然后搜索路径的事工具帮我们做了,所以不用在手动加进去,如下图,eclipse工程中专门有一个文件来记录classpath.CLASSPATH是什么?它的作用是什么?它是javac编译器的一个环境变量。它的作用与import、package关键字有关。当你写下improt java.util.*时,编译器面对import关键字时,就知道你要引入java.util这个package中的类;但是编译器如何知道你把这个package放在哪里了呢?所以你首先得告诉编译器这个package的所在位置;如何告诉它呢?就是设置CLASSPATH啦 :) 如果java.util这个package在c:jdk 目录下,你得把c:jdk这个路径设置到CLASSPATH中去!当编译器面对import java.util.*这个语句时,它先会查找CLASSPATH所指定的目录,并检视子目录javautil是否存在,然后找出名称吻合的已编译文件(.class文件)。如果没有找到就会报错! CLASSPATH有点像cc+编译器中的INCLUDE路径的设置哦,是不是?当cc+编译器遇到include 这样的语句,它是如何运作的?哦,其实道理都差不多!搜索INCLUDE路径,检视文件! 当你自己开发一个package时,然后想要用这个package中的类;自然,你也得把这个package所在的目录设置到CLASSPATH中去! CLASSPATH的设定,对JAVA的初学者而言是一件棘手的事。所以Sun让JAVA2的JDK更聪明一些。你会发现,在你安装之后,即使完全没有设定CLASSPATH,你仍然能够编译基本的JAVA程序,并且加以执行。.1. PATH环境变量。作用是指定命令搜索路径,在命令行下面执行命令如javac编译java程序时,它会到PATH变量所指定的路径中查找看是否能找到相应的命令程序。我们需要把jdk安装目录下的bin目录增加到现有的PATH变量中,bin目录中包含经常要用到的可执行文件如javac/java/javadoc等待,设置好PATH变量后,就可以在任何目录下执行javac/java等工具了。2. CLASSPATH环境变量。作用是指定类搜索路径,要使用已经编写好的类,前提当然是能够找到它们了,JVM就是通过CLASSPATH来寻找类的.class文件。我们需要把jdk安装目录下的lib子目录中的dt.jar和tools.jar设置到CLASSPATH中,当然,当前目录“.”也必须加入到该变量中。javac -c 路径(可以指定class文件存放目录)java -cp 路径 (可以指定要执行的class目录)3. JAVA_HOME环境变量。它指向jdk的安装目录,Eclipse/NetBeans/Tomcat等软件就是通过搜索JAVA_HOME变量来找到并使用安装好的jdk。在windows桌面上右击“我的电脑” “属性” “高级” “环境变量”,在“系统变量”里我们可以看到系统的各个环境变量的值。双击某个变量名可以修改变量值,变量值之间用“;”隔开。我们还可以“新建”原先没有的变量。与jdk有关的有3个环境变量;“java_home”,“path”,“classpath”。我的系统中“path”变量已经存在,可以直接添加新值(其它变量值不要动,防止其它程序运行异常),其它两个变量需要新建。“java_home”,设置jdk的安装路径,比如“e:javajdk1.5”,以下简称“%java_home%”。“path”,设置jdk中各个程序的路径,“%java_home%bin;%java_home%jrebin;”“classpath”,设置java各个类的路径,“.;%java_home%lib;%java_home%libtools.jar”。前面的“.”不可少,它代表了我们为自己的java类建立的工作路径,其它的是jdk自带的标准类库路径。设置好环境变量后按“确定”退出。按“win”+“r”键进入“运行”窗口,运行“cmd”进入DOS窗口,在输入“javac”后回车,如果有显示java的帮助信息,就说明环境变量设置成功。classpath= .;%JAVA_HOME%lib;%JAVA_HOME%libtools.jarjava_home = C:Program FilesJavajdk1.5.0path =%JAVA_HOME%bin;%JAVA_HOME%jrebin 在环境变量中添加JAVA_HOME= 指向你的jdk的主目录(并不是bin文件目录) 在不配置JAVAHOME的前提下启动tomcat在startup.bat的第25行中添加set JAVA_HOME=JKD路劲 (3) 启动tomcat服务器到 tomcat 主目录下 bin/startup.bat(4) 验证是否安装成功http:/localhost:8080(8080是默认端口如果该端口已经被占用需要修改端口)u tomcat安装后问题解决(1)tomcat无法正常启动的原因分析1. JAVA_HOME 配置错误,或者没有配置 2. 如果你的机器已经占有了8080 端口,则无法启动, 解决方法(1) 你可以8080 先关闭netstat an netstat anb 来查看谁占用该8080(2) 主动改变tomcat的端口.到 conf/server.xml 文件中修改server.xml的端口号)protocol=org.apache.coyote.http11.Http11NioProtocol redirectPort=8443/(3) 能够正常启动,但是会导航到另外一个页面.去修改工具-管理加载项,把默认的导航给禁用即可.(4) 在访问 tomcat时候,一定保证 tomcat 服务器是启动u tomcat的目录结构文件bin: 启动和关闭tomcat的bat文件conf: 配置文件 -server.xml : 该文件用于配置和 server 相关的信息, 比如 tomcat启动端口后,配置Host, 配置Context 即web应用 -web.xml : 该文件配置与 web应用(web应用就相当于是一个 web站点)-tomcat-users.xml: 该文件用户配置tomcat 的用户密码 和 权限lib 目录: 该目录放置运行tomcat 运行需要的jar包logs 目录:存放日志, 当我们需要去查看日志的时候,很有用!,当我们启动tomcat错误时候,可以查询信息.webapps 目录: 该目录下,放置我们的web应用(web 站点), 比如:建立 web1 目录 下面放置我们的html 文件 jsp 文件.图片. 则 web1就被当做一个web应用管理起来( 特别说明tomcat 6.0 以后支持 tomcat 5 版本 还有别的设置) work: 工作目录: 该目录用于存放jsp被访问后 生成的对应的 server文件 和.class文件u 如何去访问一个 web 应用的某个文件u 首页面设置及目录规范结构现在我们要求:把hello.html文件设置成 该 web应用的首页,则需要把web应用的目录格式做的更加规范:在web文件夹下配置WEB-INF文件夹在 web.xml 文件中添加配置的代码: hello1.html 通过http:/localhost:8088/web1来访问hello1.htmlweb-inf目录下的 classes目录将来是存放 class文件lib 目录将来时存放 jar文件web.xml 配置当前这个web应用的信息.u tomcat如何去管理虚拟目录需求: 当我们把 web 应用放到 webapps目录,tomcat会自动管理,如果我们希望tomcat可以管理其它目录下的web应用?- 我在d 盘有一个web应用元素的属性tomcatpath:指定访问该Web应用的URL入口。 docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于的appBase属性的相对路径,如果Web应用采用开放目录结构,则指定Web应用的根目录,如果Web应用是个war文件,则指定war文件的路径。(指定项目所在地址) reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。 在默认安装后,tomcat的主目录是webapps/root目录,如果我们想改变tomcat的主目录的话可以这样做:1.打开C:Tomcatconfserver.xml,在之间加入代码:这样重新启动tomcat,我们的主目录就被设置为jeasyCMS这个项目了。2.另外tomcat会生成一个C:TomcatconfCatalinalocalhost目录,里面自动生成了一个ROOT.xml(root大写)文件,我们打开文件可以看到这些代码:3.注意:我们创建虚拟目录的时候也是这样来进行设置的,只是context这个标签的path属性不为空。4.我们设置虚拟目录和主目录,都会在C:TomcatconfCatalinalocalhost目录下生成相应的xml文件,因此,当我们在server.xml里面删除了主目录和虚拟目录的设置后,如果系统还没有生效,这时候我们就要察看一下这个目录下的xml文件是不是已经被删除了,如果没有被删除,他还是对tomcat起作用的,我们必须手动删除。5.基于第4点,通过测试我发现,每当我们访问一个地址的时候,tomcat首先是到C:TomcatconfCatalinalocalhost目录下去察看有没有存在主目录或虚拟目录的xml文件,如果有xml文件,就按xml里的路径进行访问,如果没有xml文件,就到server.xml文件里去察看是否配置context标签,如果配置了context标签,则在C:TomcatconfCatalinalocalhost目录下生成一个对应的xml文件,以便于下次直接验证而不再访问server.xml,与此同时打开context里指定的路径,如果server.xml里没有配置context标签,则返回访问错误页面。6.基于第5点,我们其实可以直接在C:TomcatconfCatalinalocalhost下建立一个xml文件,用于主目录或者虚拟目录,而不需要去修改server.xml就可以达到配置主目录和虚拟目录的目的,具体xml的格式可以如下:具体是主目录的配置还是虚拟目录的配置取决于path的值。另外主目录文件名必须是ROOT.XML(root大写),而虚拟目录的文件名称和虚拟目录的名称一致并且为小写,譬如:以上则定义了一个名为:cms的虚拟目录,同时要将以上文本保存为cms.xml文件。7.以上住目录配置好后就可以按以下地址访问了:http:/localhost:8080/(访问主目录)http:/localhost:8080/cms (访问名为cms的虚拟目录). u 虚拟目录配置步骤: 找到server.xml文件 编辑host节点 添加Context path在server.xml中添加:myweb2(web应用别名,可以区分和默认目录下同名应用):是访问时输入的web名,实际取出的是web2中的资源d:web2:绝对路径下web2中存放资源如:hello2.html实际访问时输入的地址:http:/localhost:8088/myweb2/hello2.html绝对路径:从根分区找某个文件相对路径:从该文件位置去找另一个文件 需要重启tomcat,才能生效.(因为是采用的dom技术讲信息加载到内存中)u context 的几个属性的说明path:docbase:reloadable ;如果设为ture ,表示 tomcat 会自动更新 web应用,这个开销大,建议在开发过程中,可以设为true, 但是一旦真的发布了,则应当设为false;upackWAR: 如果设为 ture ,则自动解压,否则不自动解压.(当webapps下有war文件时tomcat自动将其解压) :打war包 cd:d/web2 然后jar cvf web2.war *:浏览打好的war包 Deploy发布后会在webapps中自动生存改文件web项目的重命名u 配置域名我们看和一个如何配置自己的主机名:我们在实际访问网站的过程中,不可能使用http:/localhost:8080/web应用/资源名 的方式去访问网站,实际上使用类似 或者 的方式去访问网站,这个又是怎么实现的呢?看看ie浏览器访问一个web站点的流程.实现的步骤如下:(1) 在C:WINDOWSsystem32driversetc 下的host文件 添加 (2) 在tomcat 的server.xml文件添加主机名 Tomcat下 appBase和docBase的区别2010-08-18 16:05:19|分类: tomcat |标签:tomcatappbasedocbase |举报 |字号大中小订阅 我们先看appBase,这个目录表示: 1 这个目录下面的子目录将自动被部署为应用。 2 这个目录下面的.war文件将被自动解压缩并部署为应用 而docBase只是指向了你某个应用的目录,这个可以和appBase没有任何关系。 总结: 如果你想自己指定路径,那么应该在docBase里面 如果你想简单,那么直接把他们复制到appBase下面就行了 如果你把他们弄重复了,也就是2个指向了一个目录,看上去也能运行,但你的应用下面的每个子目录,其实是被部署为单独的应用的。 比如你的应用为 myApp, 放在了 d:projectmyApp 里面有2个子目录 d:projectmyAppimages d:projectmyAppjs 你可以通过 1 设置 appBase 指向 d:project 来让系统自动部署 2 你可以手工指定docBase到 d:projectmyApp 3 如果你指定了 appBase到 d:projectmyApp 那么 d:projectmyAppimages这个将不再是普通的子目录,而是一个单独的虚拟目录,或者叫应用了。因为其被自动部署 d:projectmyAppjs 也一样的后果!-(3) 在d:web3 加入了一个 /WEB-INF/web.xml 把 hello2.html设为首页面如果连端口都不希望带,则可以吧tomcat的启动端口设为80即可.(4) 重启生效u tomcat体系的再说明 图:如何配置默认主机:在tomcat/conf/server.xml 文件(一个引擎可以管理管理多个主机,一个ip地址可以对应多个域名)u 为什么需要servlet技术?比如需求:我们希望用户可以贴,用户还可以回复 .这样一些和用户可以交互的功能,用普通的java技术就完成不了, sun 就开发了 servlet技术供程序员使用.u servlet的介绍 servlet 其实就是java程序(java类) 该 java 程序(java 类)要遵循servlet开发规范 serlvet是运行在服务端 serlvet 功能强大,几乎可以完成网站的所有功能 是学习jsp基础u tomcat 和 servlet 在网络中的位置u servlet的生命周期是怎样的/servlet究竟是怎样工作的UML 时序图帮助大家理解参看execel 域名系统面试题: 请简述servlet的生命周期(工作流程)答:标准版本:WEB服务器首先会检查是否已经装载并创建了该servlet实例对象。如果是直接进行第步,否则执行第步。装载并创建该Servlet的一个实例对象。调用Servlet实例对象的init()方法。创建一个用于封装HTTP请求消息的HttpServletRequest对象和一个代表HTTP响应消息的HttpServletResponse对象,然后调用service()方法并将请求和响应作为参数传递进去。WEB应用被停止或重启之前,Servlet引擎将卸载Servlet,在卸载之前调用Servlet的destroy()方法1. 当serlvet 第一次被调用的时候,会触发init函数,该函数会把servlet实例装载到内存.init函数只会被调用一次2. 然后去调用servlet 的 service 函数3. 当第二次后访问该servlet 就直接调用 service 函数.4. 当 web应用 reload 或者 关闭 tomcat 或者 关机 都会去调用destroy函数,该函数就会去销毁serlvet5. Servlet的生命周期当客户端第一次向web服务器发出一个servlet请求时,web服务器将会创建一个该servlet的实例,并且调用servlet的init()方法;如果当服务器已经存在了一个servlet实例,那么,将直接使用此实例;然后再调用service()方法,service()方法将根据客户端的请求方式来决定调用对应的doXXX()方法;当 web应用 reload 或者 关闭 tomcat 或者 关机,web服务器将调用destroy()方法,将该servlet从服务器内存中删除。生命全过程:1.加载2.实例化 3.初始化 4.处理请求 5.退出服务u 开发servlet有三种方法 (1) 实现 Servlet接口(2) 通过继承 GenericServlet(3) 通过继承 HttpServletu 实现servlet接口的方式需求如下: 请使用实现 接口的方式,来开发一个Servlet ,要求该Servlet 可以显示Hello,world,同时显示当前时间.步骤1. 在webapps下建立一个web应用 hspWeb12. 在hspWeb1 下建立 WEB-INF-web.xml web.xml可以从 ROOT/WEB-INF/web.xml拷贝 3. 在WEB-INF 下建立 classes 目录(我们的Servlet 就要在该目录开发.),建立 lib文件夹4. 开发MyServlet.javapackage com.hsp;import javax.servlet.*;import javax.servlet.http.*; 为了能将servlet-api.jar包引入,需要配置环境变量变量值; E:tomcatapache-tomcat-6.0.20libservlet-api.jar 记得带上文件名import java.io.*;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/该函数时得到servlet配置信息public java.lang.String getServletInfo()return null;/销毁该servlet,从内存中清除,该函数被调用一次public void destroy()5. 根据Servlet规范,我们还需要部署Servlet MyFirstServlet com.hsp.MyFirstServlet 注意:后面不要带.java MyFirstServlet /ABC 服务器调用流程:http:/localhost:8088/ABC-6. 在浏览器中测试在浏览器中输入http:/localhost:8088/hspweb1/ABC7. 分析一下自己写可能出现的错误(1) MyFirstServlet 名字不一样 (启动tomcat错误)(2) com.hsp.MyFirstServlet 写成 MyFirstServlet.java,会报告500(3) 资源名自己写错http:/localhost:8088/hspweb1/错误的资源url-pattern404 错误补充: 如果使用javac 去编译一个java文件,则需要带命令参数javac d(空格).(空格)java文件 例:javac d . MyFirstServlet.java补充: 如何不重启tomcat,就指定去 reload 一个web应用,方法:进入到 tomcat 的 manager:点击reload即可.课堂练习自己使用 实现Servlet接口的方法,开发一个Servlet,该servlet 可以输出自己的名字在显示当前日期.u 使用GenericServlet开发servlet了解即可:案例 :package com.hsp;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class MyGenericServlet extends GenericServletpublic void service(ServletRequest req, ServletResponse res) throws ServletException, java.io.IOExceptionres.getWriter().println(hello,world,i am geneirc servlet);将该Servlet部署到web.xml文件中: MyGenericServlet com.hsp.MyGenericServlet MyGenericServlet /MyGenericServletu 使用继承 HttpServlet 的方法来开发Serlvet(1) 在软件公司 90%都是通过该方法开发.(2) 举例说明; 还是显示 hello,world 当前日期代码:package com.hsp;import javax.servlet.*;import javax.servlet.http.*;import java.io.*;public class MyHttpServlet extends HttpServlet/在HttpServlet 中,设计者对post 提交和 get提交分别处理/回忆 ,默认是getprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOExceptionresp.getWriter().println(i am httpServet doGet();protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, java.io.IOExceptio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年飞机系统试题及答案
- 2025年闸门运行工(高级)职业技能考试题及答案
- XJJT 096-2018 农村厕所粪污处理技术规程
- 免疫治疗公平性研究-洞察及研究
- 安财管理学考试题及答案
- 阿克苏兵团公务员考试题及答案
- 出差人员工作绩效评价与激励合同
- 工程机械运输合同含设备拆解、运输及重组服务
- 酒店管理权转让及经营合同范本
- 2025公务员选拔面试题及答案
- 项目整体回购方案模板(3篇)
- 法国国家介绍
- 公园的欢乐时光记叙文(10篇)
- 用英语讲好中国故事课件
- 信息储存设备管理制度
- 人防机房管理制度
- 2025年轴流冷却风扇行业深度研究分析报告
- 《商法学》本科笔记
- 读书分享会红色书籍《保卫延安》课件
- 华能集团薪酬管理制度
- T/CIE 147-2022空间行波管加速寿命试验评估技术规范
评论
0/150
提交评论