博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

06Web服务

Posted on 2019-03-07 19:30  心默默言  阅读(226)  评论(0编辑  收藏  举报

1.web开发入门

1.1 引入

软件结构分类:

CS结构:客户端和服务器端

特点:

1)必须安装特点的客户端程序

2)服务器端升级,客户端同步升级

BS结构:浏览器和服务器端                 

特点:

1)不需要安装特点的客户端(只需要浏览器)

2)服务器端升级,客户端不需要升级的。

 

1.2 服务器

从物理上一台PC机器,配置比较高。

  • web服务器:在PC机器安装web服务软件,提供web服务
  • 数据库服务器:在PC机器安装了数据库软件,提供数据管理服务
  • 邮件服务器:在PC机器上安装了可以收发邮件服务软件

1.3 web服务软件

web服务软件作用: 把本地资源文件共享给外部访问

package cn.jxufe.java.chapter03;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.ServerSocket;
import java.net.Socket;

/*
 * socket服务器端程序
 */
public class Server {

    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        // 1)创建ServerSocket对象,监听某个端口
        ServerSocket serverSocket = new ServerSocket(8080);
        System.out.println("服务器正在启动....");
        while (true) {
            // 2)接收客户端连接
            Socket socket = serverSocket.accept();
            // 3)把本地的hello.html文件内容发送给socket客户端
            // 3.1 构建数据发送通道
            OutputStream out = socket.getOutputStream();
            // 3.2 读取本地hello.html文件内容
            FileInputStream fis = new FileInputStream("e:/hello.html");
            /**
             * 输入流 输入字节流: InputStream FileInputStream BufferedInputStream
             * 
             * 方法: read(): 读取一个字节 read(byte[] data): 读取多个字节 如何判断文件结束? 返回的长度等于-1
             * 
             * 输入字符流: Reader FileReader BufferedReader
             * 
             * 方法: read(): 读取一个字符 read(char[] data): 读取多个字符
             */
            // 边读边写
            /*int len=0;
            while( (len = fis.read())!=-1  ){
                out.write(len);
            }*/

            // 使用字节数组形式
            byte[] buf = new byte[1024];
            int len = 0;
            while ((len = fis.read(buf)) != -1) {
                out.write(buf, 0, len);// 写出指定的buf数组内容,从0开始写,写到len位置
            }

            // 4.关闭资源
            fis.close();
            out.close();

        }
    }

}

 

1.4 市面上常见的web服务软件

WebSphere: 是IBM公司。是支持JavaEE规范的。收费的。                                 

IIS:是微软公司。收费的。和net语言兼容性最好。

WebLogic:是BEA公司。收费的。支持JavaEE规范的。

Tomcat: 免费的。和java语言兼容性最好。不完全支持javaEE规范的。支持servlet,jsp.jdbc,javamail,但是不支持ejb

 

2.tomcat服务器基本使用

2.1 基本使用

1)到apache开源组织下的官网下载

2)下载的版本:

安装版: EXE    msi

压缩版: zip   rar   tag.gz

3)启动软件

3.1 找到%tomcat%/bin/startup.bat。双击。

验证是否成功,打开浏览器:

http://localhost:8080

3.2 看到一只猫的页面,证明ok了!

4)关闭软件

4.1 找打%tomcat%/bin/shutdown.bat.双击

2.2 体验tomcat服务器如何共享文件

规则:把文件拷贝到webappps目录下,不能单独共享文件,必须以目录(网站)形式共享

 

2.3 URL

http://localhost:8080/web/hello.html   统一资源定位符

 http://      协议。http协议

执行流程:

1) 本地hosts文件,  ip地址 域名 (c:/windows/System32/drivers/etc/hosts)

2)在hosts文件中找不到,到网络运营商的DNS服务器中找域名对应的IP地址。

3)找到,访问对应的ip地址的PC机器.

localhost     域名。

本地域名: localhost

外部域名: www.baidu.com

8080        端口。软件监听端口

qq: 5555

tomcat: 8080

mysql: 3306

oracle: 1521

系统默认端口: 80  

注意: 一个软件监听了默认端口,那么访问这个软件不需要写80.

web         网站名称。(web应用的名称)

hello.html    网站中的资源名称。

2.4 tomcat启动常见的问题

1)闪退

原因: tomcat软件使用java语言开发,需要jvm运行。tomcat软件在启动时寻找JAVA_HOME环境变量,JAVA_HOME配置的是jdk的目录。

解决办法:配置JAVA_HOME环境变量

                  

2)端口占用的问题

原因:其他软件在占用端口

解决办法:

a)关闭其他软件

b)修改tomcat软件监听的端口

 

3)CATALINA_HOME变量的问题

 

4)tomcat启动出现乱码

  原因:Tomcat编码和电脑系统编码不一致

  解决办法:F:\apache-tomcat-7.0.94\conf\logging.properties文件中指定编码方式

  java.util.logging.ConsoleHandler.encoding = GBK(本来是UTF-8)

3.Tomcat服务器目录结构

         |-bin目录: 存在tomcat软件操作指令。

                            startup.bat   catalina.bat start

                            shutdown.bat   catalina.bat stop

         |-conf目录: 存在tomcat软件的配置文件

         |-lib目录: 支持tomcat软件运行的jar包,因为tomcat使用java语言开发的。

         |-logs目录: 存放tomcat运行的日志信息

         |-temp目录: 存放临时文件

         |-webapps目录: 存放web应用(网站)的目录

         |-work目录: tomcat运行目录,存放jsp页面运行过程中产生的临时文件。

 

4.网站(web应用)目录结构

|-WebRoot         根目录

|- 普通文件(html,css,js,images)

|- WEB-INF      目录。固定写法

|-classes     目录。固定写法。存放class文件

 |-lib          目录。固定写法。存放jar包。

 |-web.xml    文件。

注意 :

1)WEB-INF外面的文件是可以直接通过浏览器访问的。

2)但是WEB-INF里面的文件是不可以通过浏览器直接访问的。如果想让WEB-INF里面的内容提供给外部访问,那么需要在web.xml文件中配置。

5.如何发布网站(web应用)

5.1 把整个网站拷贝到webapps目录下

 ROOT是默认网站,访问默认网站是不需要名称的。

 配置首页

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5"> 

    <!-- 配置网站的首页 -->
    <welcome-file-list>
        <welcome-file>hello.html</welcome-file>
    </welcome-file-list>    

</web-app>

访问首页不需要名称的!

 

弊端: tomcat软件和发布的网站是在一起的。

 

5.2 配置虚拟网站

<!-- 
#server.xml
配置虚拟网站
        docBase:网站绝对路径
        path:访问网站的名称
        -->
        <Context docBase="C:\web" path="/jxufe"/>

好处:软件和网站是分离的。

注意: path可以不写内容,表示当前网站是默认网站,优先于ROOT的网站。

 

弊端:修改server.xml文件,风险比较大

 

5.3 通过添加xml文件的方式配置虚拟网站(推荐)

1)在conf/Catalina/localhost  添加jxufe.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<Context docBase="C:\web" />

6.站点配置

 

name: 表示站点名称。访问站点就是使用站点名称。

appBases: 表示站点根目录

站点和网站的关系?

           一个站点可以包含多个网站。

           一个网站就在一个站点中。

1)在server.xml文件中添加host标签

 

2)在本地的hosts文件,中添加一个站点和ip地址的映射

 

3)访问站点的百度音乐项目

7.动态网站的开发

html/css/javascript 前端(静态网页)

 

静态网站: 只包含静态网页

动态网站: 既有静态网页,可以有动态网页

 

静态网页:用户多个访问这个网页时,网页的源码是不会改变的。

动态网页:用户多个访问这个网页时,网页的源码是有可能改变的。

 

使用servlet技术开发动态网页

 

Servlet特点:

1)servlet就是一个普通java类,继承HttpServlet类

2)servlet交给tomcat服务器运行(web服务器软件)!!!

手动开发一个servlet

1)编写一个普通的java类,继承HttpServlet类,覆盖doGet方法(
注意: 到tomcat的lib目录下拷贝servlet-api.jar导入到你的项目中

public class HelloServlet extends HttpServlet{
    
    //覆盖doGet
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {
        resp.setContentType("text/html;charset=utf-8");
        //向浏览器输出内容
        resp.getWriter().write("当前时间为:"+new Date());
    }
    
}


2)把servlet交给tomcat服务器运行!!!!!!

2.1 把servlet对应的class文件拷贝到tomcat的某个项目(bbs)的WEB-INF/classes目录下

2.2 在bbs项目的WEB-INF/web.xml文件配置servlet

<?xml version="1.0" encoding="utf-8"?>

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
   version="2.5"> 
    <!--配置servlet -->
    <servlet>
        <!-- servlet名称,自定义-->
        <servlet-name>HelloServlet</servlet-name>
        <!-- servlet类的全名:包名+类名 -->
        <servlet-class>gz.itcast.b_servlet.HelloServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <!-- servlet名称,和上面的名称保持一致 -->
        <servlet-name>HelloServlet</servlet-name>
        <!-- 公开给外部访问这个servlet的名称(路径) -->
        <url-pattern>/hello</url-pattern>
    </servlet-mapping>

</web-app>


3.通过URl访问这个servlet

http://localhost:8080/bbs/hello

用工具开发一个servlet

1)创建一个bbs的web project

2)在WebRoot下编写静态网页

3)在src下编写动态网页

    3.1 在src右键选择 “servlet”
    3.2 写上servlet的包,名,选择覆盖doGet方法 -> next
    3.3 修改servlet的名称,修改访问servlet的url -> finished    

4)myecplise关联tomcat服务器
    4.1 window-> preferences -》 搜索“tomcat” -> 找到“tomcat6.x”
    4.2 选择 tomcat的根目录
    4.3 把disable -> enable

5)部署网站
    5.1 点击发布图标 -> 选择网站- 》 选择发布的tomcat服务器
-> ok

6)访问:
    静态文件: http://localhost:8080/bbs/index.html
    动态文件: http://locahost:8080/bbs/hello