web入门(tomcat+http)

来源:互联网 发布:c语言代码大全下载 编辑:程序博客网 时间:2024/06/05 20:09
通信模式    * C/S (client、server) ,客户端与服务器。要求客户端必须安装。例如:QQ、网络游戏    * B/S (Browser、Server),浏览器与服务器。就是通过浏览器查看网页,不需要下载客户端    优缺点对比:        B/S只要有操作系统和浏览器就行,与操作系统平台无关,也无需专门安装其它软件        B/S对计算机配置要求较低,且升级方便,服务器升级即可,浏览器查看的就是最新的版本        C/S安全性较高,响应速度快,且客户端软件使用起来更方便    * web开发就是指网页开发,即B/S结构    * web采用的是HTTP协议,无状态传输        即一次传输完成之后,浏览器与服务器就不会存在任何关系        有请求才有响应, 服务器不能主动推送消息URL    * URL :统一资源定位符,路径必须是完整。    * URI :统一资源标识符,标记,有可能不完整。URI是URL的子集。    * 格式:         协议://域名或IP:端口/资源路径            协议                http / ftp / svn / https 等            域名或IP                IP --> 用于在全球标识每一台计算机。IPv4 (0-255.0.0.0), IPv6                    本机IP:127.0.0.1                    局域网IP:192.168.3.100                    外网IP:202.123.34.45                域名 --> 由于IP不便于记忆,所以出现了域名,域名在使用前会先去DNS服务器查询域名对应的IP,然后再发送请求                    本地域名:localhost                    外网域名:www.itcast.cn                    注意:localhost 与 127.0.0.1存在对应关系                DNS,域名解析服务            端口                端口范围:0-65535 , 一般0-1024不建议使用,系统预留                一个程序可以占用多个端口,但一个端口只能被一个程序占用。                http协议默认端口80,如果是80端口可以省略                tomcat端口8080            资源路径                请求的网址,服务器根据不同资源路径做出不同的处理静态网页和动态网页    动态网页是动态生成的,然后展示给用户.    在一次请求中,服务器处理请求并动态生成相应的网页,不同的用户看到的信息可能不一样,    如网页上登陆后出现的 XXX,欢迎您. XXX对于不同的用户看到的不一样    静态web资源开发技术:Html    常用动态web资源开发技术:JSP/Servlet、ASP、PHP等常用web服务器(了解)    * WebLogic : Oracle公司的产品,是目前应用最广泛的Web服务器,支持J2EE规范(13种核心:Servlet、JSP等),收费    * WebSphere : IBM公司,支持J2EE规范,收费    * Glass Fish : Oracle中型服务器,开源    * tomcat ;apache组织,开源。只支持:Servlet 和 JSP开发企业级应用介绍(了解)    ERP:企业资源计划( Enterprise Resource Planning ),针对物资资源管理(物流)、人力资源管理(人流)、财务资源管理(财流)、信息资源管理(信息流)集成一体化的企业管理软件    CRM:客户关系管理(Customer Relationship Management)是指用计算机自动化分析销售、市场营销、客户服务以及应用支持等流程的软件系统    BPM:业务流程管理(Business Process Management),即,是一套达成企业各种业务环节整合的全面管理模式。    OA:办公自动化(Office Automation)是将现代化办公和计算机网络功能结合起来的一种新型的办公方式。J2EE的13种核心技术(了解)    一、JDBC(Java Database Connectivity)      JDBC API为访问不同的数据库提供了一种统一的途径,象ODBC一样,JDBC对开发者屏蔽了一些细节问题,另外,JDBC对数据库的访问也具有平台无关性。    二、JNDI(Java Name and Directory Interface)      JNDI API被用于执行名字和目录服务。它提供了一致的模型来存取和操作企业级的资源如DNS和LDAP,本地文件系统,或应用服务器中的对象。    三、EJB(Enterprise JavaBean)      J2EE技术之所以赢得媒体广泛重视的原因之一就是EJB。它们提供了一个框架来开发和实施分布式商务逻辑,由此很显著地简化了具有可伸缩性和高度复杂的企业级应用的开发。EJB规范定义了EJB组件在何时如何与它们的容器进行交互作用。容器负责提供公用的服务,例如目录服务、事务管理、安全性、资源缓冲池以及容错性。但这里值得注意的是,EJB并不是实现J2EE的唯一途径。正是由于J2EE的开放性,使得有的厂商能够以一种和EJB平行的方式来达到同样的目的。    四、RMI(Remote Method Invoke)      调用远程对象上的方法。它使用了序列化方式在客户端和服务器端传递数据。RMI是一种被EJB使用的更底层的协议。    五、Java IDL/CORBA      在Java IDL的支持下,开发人员可以将Java和CORBA集成在一起。他们可以创建Java对象并使之可在CORBA ORB中展开,或者他们还可以创建Java类并作为和其它ORB一起展开的CORBA对象的客户。后一种方法提供了另外一种途径,通过它Java可以被用于将你的新的应用和旧的系统相集成。    六、JSP(Java Server Pages)      JSP页面由HTML代码和嵌入其中的Java代码所组成。服务器在页面被客户端所请求以后对这些Java代码进行处理,然后将生成的HTML页面返回给客户端的浏览器。    七、Java Servlet      Servlet是一种小型的Java程序,它扩展了Web服务器的功能。作为一种服务器端的应用,当被请求时开始执行,这和CGI Perl脚本很相似。Servlet提供的功能大多与JSP类似,不过实现的方式不同。JSP通常是大多数HTML代码中嵌入少量的Java代码,而servlets全部由Java写成并且生成HTML。    八、XML(Extensible Markup Language)      XML是一种可以用来定义其它标记语言的语言。它被用来在不同的商务过程中共享数据。      XML的发展和Java是相互独立的,但是,它和Java具有的相同目标正是平台独立性。通过将Java和XML的组合,您可以得到一个完美的具有平台独立性的解决方案。    九、JMS(Java Message Service)      JMS是用于和面向消息的中间件相互通信的应用程序接口(API)。它既支持点对点的域,又支持发布/订阅(publish/subscribe)类型的域,并且提供对下列类型的支持:经认可的消息传递,事务型消息的传递,一致性消息和具有持久性的订阅者支持。JMS还提供了另      一种方式来对您的应用与旧的后台系统相集成。    十、JTA(Java Transaction Architecture)      JTA定义了一种标准的API,应用系统由此可以访问各种事务监控。    十一、JTS(Java Transaction Service):      JTS是CORBA OTS事务监控的基本的实现。JTS规定了事务管理器的实现方式。该事务管理器是在高层支持Java Transaction API (JTA)规范,并且在较底层实现OMG OTS specification的Java映像。JTS事务管理器为应用服务器、资源管理器、独立的应用以及通信资源管理器提供了事务服务。    十二、JavaMail      JavaMail是用于存取邮件服务器的API,它提供了一套邮件服务器的抽象类。不仅支持SMTP服务器,也支持IMAP服务器。    十三、JAF(JavaBeans Activation Framework)      JavaMail利用JAF来处理MIME编码的邮件附件。MIME的字节流可以被转换成Java对象,或者转换自Java对象。大多数应用都可以不需要直接使用JAF。 tomcat    * 安装        1. 解压apache-tomcat-xxx.zip        2. 配置JAVA_HOME环境变量,指定jdk目录        3. 启动 : %tomcat%/bin/startup.bat        4. 用浏览器访问 : http://localhost:8080    * 常见问题        tomcat的错误信息可在%tomcat%/logs/catalina.xxx.log中查看        问题:打不开startup.bat,窗口闪烁然后消失            报错信息:                Neither the JAVA_HOME nor the JRE_HOME environment variable is defined                At least one of these environment variable is needed to run this program            没有配置环境变量JAVA_HOME,配置一下即可        问题:tomcat启动报错Caused by: java.net.BindException: Address already in use: JVM_Bind <null>:8080            端口被占用            先检查有没有开其他的tomcat            如果没有的话,打开任务管理器,查看进程有没有javaw.exe,有的话结束进程    * 修改端口号        修改文件:%tomcat%/conf/server.xml            主要修改:                  原内容:<Connector port="8080" protocol="HTTP/1.1"                修改后:<Connector port="80" protocol="HTTP/1.1"            其他修改:                原内容:                    <Server port="8005" shutdown="SHUTDOWN">                    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />                修改后:                    <Server port="9005" shutdown="SHUTDOWN">                    <Connector port="9009" protocol="AJP/1.3" redirectPort="8443" />            通常指修改最上面的即可,修改的是http协议监听的端口号            如果想同时启动两个tomcat,则要全部修改    * tomcat常用目录        bin 目录:脚本 (tomcat 使用java程序编写)  --> day03/soft/tomcat6.zip tomcat源码但可以运行            startup.bat 启动脚本            shutdown.bat 停止脚本        conf 目录:存放配置文件 (config)            server.xml ,tomcat主配置文件            tomcat-users.xml ,tomcat用户配置文件            web.xml ,tomcat管理的所有web程序的默认配置文件        lib 目录:所有的jar文件            servlet-api.jar , tomcat支持javaee servlet            jsp-api.jar ,tomcat支持javaee jsp        logs 目录:日志目录 ,记录运行的运行过程。tomcat每一天记录一组。            catalina.日期.log , 主记录日志文件        temp 目录:临时目录。此目录中的内容可以随时删除。            临时文件的扩展名 tmp        webapps 目录 , tomcat用于存放所有的web项目。此目录下一个文件夹就是一个web项目。        work 目录,tomcat用于处理jsp文件目录,此目录中的内容可以删除(关闭tomcat时)    * catalina_home环境变量        安装版本的tomcat时,进行CATALINA_HOME配置,作用:无论运行是哪一个tomcat startup.bat ,只会执行指定catalina_home指定的tomcat的startup.bat        注意:一般不配置    * 访问路径(在没有配置虚拟路径和虚拟主机的情况下)        http://localhost:8080/                  -->  %tomcat%/webapps/ROOT 目录        http://localhost:8080/a.html            -->  %tomcat%/webapps/ROOT/a.html        http://localhost:8080/demo              -->  %tomcat%/webapps/demo 目录        http://localhost:8080/demo/d.html       -->  %tomcat%/webapps/demo/d.html        http://localhost:8080/demo/abc/123.html -->  %tomcat%/webapps/demo/abc/123.html        * 精简访问路径            1 欢迎页面                默认访问:http://localhost:8080/demo/d.html                配置欢迎页面:在web.xml文件添加                    <welcome-file-list>                        <welcome-file>d.html</welcome-file>                    </welcome-file-list>                访问:http://localhost:8080/demo/            2 省略项目名称:将web项目的名称修改ROOT                访问:http://localhost:8080/            3 修改端口为80                访问:http://localhost            4 hosts文件                配置文件位置:C:\Windows\System32\drivers\etc\hosts                添加内容:                    127.0.0.1       www.baidu.com                访问:http://www.baidu.com                在域名解析之前,先查看本地有没有记录(即hosts文件),没有的话再去DNS服务器查询                只能修改自己的机器,对别人的机器无效,以上三个别人访问你的机器都有效    * conf/server.xml说明        示例:            <Engine name="Catalina" defaultHost="localhost">                <Host name="localhost"  appBase="webapps"                    unpackWARs="true" autoDeploy="true">        <Engine> 为引擎        defaultHost属性为默认的虚拟主机        <Host>标签代表虚拟主机        name属性为主机名        appBase属性为虚拟主机的根目录路径        注意:修改server.xml后要重新启动tomcat才能使配置生效    * 配置发布项目存放位置        需要在conf/server.xml进行修改        更改对应<Host>标签中appBase属性的值即可    * 配置虚拟路径        作用: 为一个文件夹设置虚拟的访问路径,这样也可以设置多个根目录(即不必都放在webapps目录下)        第一种配置,需要在conf/server.xml进行修改,注意:必须重启tomcat            <Host><Context path="/xxx" docBase="F:\myweb"/>                path : URL中访问路径 (浏览器地址栏)                docBase : web项目的所在盘符路径 (硬盘位置)                注意:区分大小写        第二种配置,需要conf/Catalina/localhost添加一个xml文件,不需要重启tomcat            xml文件的文件名称,将作为path的值            内容:                <?xml version='1.0' encoding='utf-8'?>                <Context docBase="F:\myweb"/>            注意:Catalina 和 localhost 目录都是配置在conf/server.xml中的,如果改变了配置,则上面的目录结构也会改变    * 设置基于主机名的虚拟主机        作用: 如果通过多个域名访问到同一个tomcat,则tomcat可以根据访问域名的不同,进行不同的操作        通过conf/server.xml进行配置,和别的<Host>同级            <Host name="www.baidu.com"  appBase="F:\mywebapps"                unpackWARs="true" autoDeploy="true">            </Host>        则访问www.baidu.com会访问到F:\mywebapps下的资源(当然,你得先改变hosts文件)        而访问localhost会访问到webapps下的资源,因为下面这个是默认的            <Host name="localhost"  appBase="webapps"        如果域名没有找到匹配项(如直接用ip访问),则会根据<Engine name="Catalina" defaultHost="localhost">中的defalutHost中配置的主机进行处理    * 设置基于端口号的虚拟主机(可以同时监听多个端口)        作用: 使tomcat能够同时监听多个端口,并且根据端口不同可以进行不同的操作        找到<Service name="Catalina">标签,将标签连内容全部复制一份放到下面        如:            <Service name="Catalina">                <Connector port="8080" protocol="HTTP/1.1"                           connectionTimeout="20000"                           redirectPort="8443" />                <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />                <Engine name="Catalina" defaultHost="localhost">                  <Realm className="org.apache.catalina.realm.LockOutRealm">                    <Realm className="org.apache.catalina.realm.UserDatabaseRealm"                           resourceName="UserDatabase"/>                  </Realm>                  <Host name="localhost"  appBase="webapps"                        unpackWARs="true" autoDeploy="true">                    <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                           prefix="localhost_access_log." suffix=".txt"                           pattern="%h %l %u %t &quot;%r&quot; %s %b" />                  </Host>                </Engine>              </Service>        修改Service标签的name属性        修改第一个Connector标签的port属性        修改第二个Connector标签的port属性或直接删除那个标签        修改Engine标签的name属性        修改Host标签的appBase属性        如:            <Service name="myCatalina">            <Connector port="80" protocol="HTTP/1.1"                       connectionTimeout="20000"                       redirectPort="8443" />            <Engine name="Catalina1" defaultHost="localhost">              <Realm className="org.apache.catalina.realm.LockOutRealm">                <Realm className="org.apache.catalina.realm.UserDatabaseRealm"                       resourceName="UserDatabase"/>              </Realm>              <Host name="localhost"  appBase="webapps2"                    unpackWARs="true" autoDeploy="true">                <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"                       prefix="localhost_access_log." suffix=".txt"                       pattern="%h %l %u %t &quot;%r&quot; %s %b" />              </Host>            </Engine>          </Service>          这样可以用80端口进行访问,并且访问的是webapps2文件夹中的内容          同时可以用8080端口进行访问,访问的是webapps文件夹中的内容    * 配置用户权限        作用: 使用户可以在tomcat首页上对tomcat进行操作        给conf/tomcat-users.xml 添加            <role rolename="manager-gui"/>      --> 注册角色(权限)(manager-gui是其中一种权限)            <user username="账号名" password="密码" roles="manager-gui"/>        然后进入http://localhost:8080中点击Host Manager即可弹出登录界面        登录后可对tomcat进行管理tomcat,servlet和javaee的版本关系    tomcat版本      servlet/jsp     javaee版本  jdk版本    7.0.x           3.0/2.2         6.0         1.6    6.0.x           2.5/2.1         5.0         1.5解除占用端口(了解)    netstat -an 查看哪些端口正在被监听    netstat -anb  查看被监听端口的详细信息    找到端口正在被哪个程序占用,在任务管理器,或计算机右键-->管理-->服务中关闭相应程序即可    使用命令行结束被占用端口上运行的程序        1.取得被占用端口上正在运行程序的进程号(PID号)            netstat -ano            记住对应端口上正在运行程序的PID号        2.强制结束进程            taskkill /pid 进程号 /f            例 taskkill /pid 7252 /fMyEclipse配置tomcat    Window-->Preferences-->MyEclipse-->Servers-->Tomcate x.x-->选择tomcat根目录,并Enabletomcat中发布的web项目的目录结构    项目文件夹        WEB-INF目录 , 不允许浏览器直接访问 (可以没有)            classes 目录,存放字节码文件或源码包中的其它文件。(源文件夹编译后的文件)(对应java 项目的bin目录)            lib 目录,存放当前web项目需要jar文件 web项目添加jar之后,不需要build path(java项目,手动创建lib目录,需要build path)            web.xml文件 ,当前web项目的配置文件,默认配置在%tomcat%/conf/web.xml中myeclipse创建的web项目的目录结构    项目        src         ,源码        WebRoot     ,通过myeclipse发布web项目时,将此目录下的所有内容都拷贝到tomcat下面 (可以在项目--属性中找到并更改配置)            WEB-INF                classes                lib                web.xml发布web项目    手动发布web项目        将web项目的WebRoot下的所有内容拷贝到%tomcat%/webapps文件夹下即可        也可以先WebRoot下的所有内容打成war包,再拷贝到%tomcat%/webapps文件夹下    自动发布的web项目        访问的根路径是创建web项目时填写的Context root URL的值        即项目右键-->Properties-->MyEclipse-->Web下的Web Context-root的值,而不是项目名称HTTP协议    * 基于TCP协议传输协议。默认端口80,基于请求--响应模式    * telnet模拟浏览器        建立链接:telnet localhost 8080        发送请求:            发送请求前要先按ctrl+],否则不能输入,然后再按回车,进入编辑状态            GET /myweb1/1.html HTTP/1.0            Host:localhost            GET /demo/userServlet?username=李凯昊 HTTP/1.1        服务器响应            HTTP/1.1 200 OK            Server: Apache-Coyote/1.1            Accept-Ranges: bytes            ETag: W/"29-1385450900391"            Last-Modified: Tue, 26 Nov 2013 07:28:20 GMT            Content-Type: text/html            Content-Length: 29            Date: Tue, 26 Nov 2013 07:51:23 GMT            Connection: close            webapps tomcat default a.html        注意:win7 telnet命令默认是不可用的,需要开启一下.步骤: 控制面板-->程序-->打开或关闭Windows功能-->telnet客户端 和 telnet服务器    * http协议版本        HTTP/1.1,一个链接,多个请求,多个响应        HTTP/1.0,一个链接,一次请求,一次响应。http请求--request    * 请求示例:        参数均为username=李凯昊&password=123        get请求            GET /demo/?username=%E6%9D%8E%E5%87%AF%E6%98%8A&password=123 HTTP/1.1            Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*            Referer: http://localhost:8080/demo/            Accept-Language: zh-CN            User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)            Accept-Encoding: gzip, deflate            Host: localhost:8080            Connection: Keep-Alive            Cookie: JSESSIONID=17AC598659C4FD9316D2E4F2F2C5CCF8        post请求            POST /demo/ HTTP/1.1            Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, */*            Referer: http://localhost:8080/demo/            Accept-Language: zh-CN            User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)            Content-Type: application/x-www-form-urlencoded            Accept-Encoding: gzip, deflate            Host: localhost:8080            Content-Length: 49            Connection: Keep-Alive            Cache-Control: no-cache            Cookie: JSESSIONID=17AC598659C4FD9316D2E4F2F2C5CCF8            username=%E6%9D%8E%E5%87%AF%E6%98%8A&password=123        注意:超链接也是get请求,参数也放在请求行中,不过参数没有经过url的编码处理        (超链接和手动在地址栏输入一样,但get请求和手动在地址栏输入不一样,会先进行url编码处理)    * 格式:请求行、请求头、请求体    * 请求行        例如:GET /myweb1/1.html HTTP/1.1        格式:请求方式 资源路径 协议/版本            请求方式:共7种,常用2种:POST、GET                POST,将请求参数添加到请求体中,一般情况看不到。安全,还可以传输大数据                GET,将请求参数追加到URL之后(即参数在请求行中),第一个参数与URL使用?分隔、其他参数与第一个参数使用&分隔。可以在地址栏显示,长度有限1024字符,不安全。                    例如:http://192.168.3.100:8080/myweb1/1.html?username=jack&password=1234    * 请求头:        Accept: text/html,image/*       --支持数据类型        Accept-Charset: ISO-8859-1      --字符集        Accept-Encoding: gzip           --支持压缩        Accept-Language:zh-cn           --语言环境        Host: www.itcast.com:80         --访问主机        If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT                --缓存时间        Referer: http://www.itcast.com/index.jsp                        --来自哪个页面、防盗链        User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)  --浏览器和操作系统信息        Cookie:JSESSIONID=3F56EB28E5E2D25219E0054CABBDDEC7              --cookie信息        Connection: close/Keep-Alive                                    --链接状态        Date: Tue, 11 Jul 2000 18:23:51 GMT                             --时间    * 请求体:        post请求通过请求体传递参数        请求体与请求头之间存在一个空行http响应--response    * 响应示例        HTTP/1.1 200 OK        Server: Apache-Coyote/1.1        Content-Type: text/html;charset=utf-8        Content-Length: 651        Date: Tue, 21 Oct 2014 13:36:26 GMT        <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">        <html>        ...    * 格式:响应行、响应头、响应体    * 响应行        例如:HTTP/1.1 200 OK        格式:协议/版本 状态码 状态码对应的描述信息            状态码                1xx 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程                2xx 表示成功接收请求并已完成整个处理过程,常用200                    200 正常                3xx 请求已经部分完成,需要进一步完全其他请求,使整个请求全部完成。例如,请求的资源已经移动一个新地址,常用302、307和304                    304 请求资源浏览器已经缓存了,并且与服务器的资源相同,需要浏览器读取本地缓存。                    302 当前请求已经完成,但需要进一步再一次发送请求,请求到location指定的位置。重定向                4xx 客户端的请求有错误,常用404                    404 页面不存在                5xx 服务器端出现错误,常用 500                    500 服务器端异常    * 响应头        Location: http://www.it315.org/index.jsp            --跳转地址        Server:apache tomcat                                --服务器型号        Content-Encoding: gzip                              --数据压缩        Content-Length: 80                                  --数据长度        Content-Language: zh-cn                             --语言环境        Content-Type: text/html; charset=GB2312             --数据类型        Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT        --最后修改时间        Refresh: 1;url=http://www.it315.org                 --定时刷新        Content-Disposition: attachment; filename=aaa.zip   --下载        Set-Cookie:SS=Q0=5Lb_nQ; path=/search               -- 客户端需要存储的cookie        Expires: -1                                         --缓存        Cache-Control: no-cache                             --缓存        Pragma: no-cache                                    --缓存        Connection: close/Keep-Alive                        --连接        Date: Tue, 11 Jul 2000 18:23:51 GMT                 --时间    * 响应体        返回的页面Html代码或其它内容(图片),浏览器将解析html代码,显示页面        响应体与响应行之间有个空行。    * 小应用        设置字符集,处理中文乱码            response.setHeader("content-type","text/html;charset=utf-8");        重定向            response.setHeader("location","form.html");            response.setStatus(302);        定时刷新页面(秒)            response.setHeader("refresh","3");        指定秒数后跳转到指定页面            response.setHeader("refresh","3;url=form.html");
0 0