java自建服务器

搭建服务器整体结构和接口-编写XML文件

格式如下:
在这里插入图片描述
创建一个xml文件:web.xml

<?xml version="1.0" encoding="UTF-8" ?>
<web-app>
    <servlet>
        <servlet-name>login</servlet-name><!-- 我们自己起的小名 -->
        <servlet-class>bjsxt.servlet.LoginServlet</servlet-class>     <!--根据上面的小名可以获取到的包下的类-->
    </servlet>
    <servlet-mapping>   <!--映射 在浏览器地址栏输入不同的路径去访问共享资源-->
        <servlet-name>login</servlet-name>  <!--和上面自己起的小名相同-->
        <url-pattern>/login</url-pattern>   <!--谁可以访问--> 
        <url-pattern>/log</url-pattern>
    </servlet-mapping>
</web-app>

创建一个解析XML文件的类:

package bjsxt.server;

/**
 * 用于解析xml文件
 */
public class WebDom4j {
   
}

package bjsxt.server;

/**
 * 这是一个路径请求一个资源的实体类
 * servlet-name和一个servlet-name对应的实体类
 *
 *     <servlet>
 *         <servlet-name>login</servlet-name>
 *         <servlet-class>bjsxt.servlet.LoginServlet</servlet-class>
 *     </servlet>
 */
public class Entity {
   

}

package bjsxt.server;
/**
/**
 * 这是多个路径请求一个资源的实体类
 * 是映射关系,多个路径访问共享资源
 *
 *     <servlet-mapping>
 *         <servlet-name>login</servlet-name>
 *         <url-pattern>/login</url-pattern>
 *         <url-pattern>/log</url-pattern>
 *     </servlet-mapping>
 */
 */
public class Mapping {
   

}

package bjsxt.server;

/**
 * 请求
 */
public class Request {
   
}

package bjsxt.server;

/**
 * 响应
 */
public class Response {
   
}

package bjsxt.server;

/**
 * 用于启动和停止服务
 */
public class Server {
   
}

package bjsxt.server;

/**
 * 描述的是 Entity和Mapping的映射关系
 */
public class ServletContext {
   

}

package bjsxt.server;

/**
 * 应用程序
 */
public class WebApp {
   
}

package bjsxt.servlet;

/**
 * 是所有请求的Servlet的父类
 */
public class Servlet {
   
}

package bjsxt.servlet;

/**
 * 创建一个请求的servlet类
 */
public class LoginServlet extends Servlet{
   
}

package bjsxt.util;

import java.io.Closeable;
import java.io.IOException;

/**
 * 用于关闭流
 */
public class IOCloseUtil {
   
    public static void closeAll(Closeable...close){
   
        for (Closeable closeable:close){
   
            if (closeable!=null){
   
                try {
   
                    closeable.close();
                } catch (IOException e) {
   
                    e.printStackTrace();
                }
            }
        }
    }
}

以上,是搭建一个服务器的前期框架


DOM4J解析XML配置文件

我们先对XML文件的内容进行一些添加

<?xml version="1.0" encoding="UTF-8" ?>
<web-app>
    <servlet>
        <servlet-name>login</servlet-name><!-- 我们自己起的小名 -->
        <servlet-class>bjsxt.servlet.LoginServlet</servlet-class>     <!--根据上面的小名可以获取到的包下的类-->
    </servlet>
    <servlet-mapping>   <!--映射 在浏览器地址栏输入不同的路径去访问共享资源-->
        <servlet-name>login</servlet-name>  <!--和上面自己起的小名相同-->
        <url-pattern>/login</url-pattern>   <!--谁可以访问-->
        <url-pattern>/log</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>register</servlet-name>
        <servlet-class>bjsxt.servlet.RegisterServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>register</servlet-name>
        <url-pattern>/reg</url-pattern>
        <url-pattern>/register</url-pattern>
        <url-pattern>/regis</url-pattern>
    </servlet-mapping>
</web-app>

使用WebDom4j.java文件解析XML文件

package bjsxt.server;

import java.io.File;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;


/**
 * 用于解析xml文件
 */
public class WebDom4j {
   
    private List<Entity> entityList;//用于存储是N多Entity,而每一个Entity都是servlet-name与servlet-class
    private List<Mapping> mappingList;//用于存储N多Mapping,而每一个Mapping都是一个servlet-name与N多个url-pattern

    public WebDom4j() {
   
       entityList = new ArrayList<Entity>();
       mappingList = new ArrayList<Mapping>();
    }

    public WebDom4j(List<Entity> entityList, List<Mapping> mappingList) {
   
        this.entityList = entityList;
        this.mappingList = mappingList;
    }

    @Override
    public String toString() {
   
        return "WebDom4j{" +
                "entityList=" + entityList +
                ", mappingList=" + mappingList +
                '}';
    }

    public void setEntityList(List<Entity> entityList) {
   
        this.entityList = entityList;
    }

    public List<Entity> getEntityList() {
   
        return entityList;
    }

    public List<Mapping> getMappingList() {
   
        return mappingList;
    }

    public void setMappingList(List<Mapping> mappingList) {
   
        this.mappingList = mappingList;
    }

    //解析XML,获取Document对象的方法
    public Document getDocument(){
   
        //1.创建SAXReader对象
        SAXReader reader = new SAXReader();
        //2.调用read方法
        try {
   
            return reader.read(new File("src/WEB_INFO/web.xml"));
        } catch (DocumentException e) {
   
            e.printStackTrace();
        }
        return null;
    }
    public void parse(Document doc){
   
        //1.获取根元素
        Element root = doc.getRootElement();    //可以获取到根元素web-app
        //2.获取servlet子元素
        for (Iterator<Element> ite=root.elementIterator("servlet");ite.hasNext();){
   
            Element subElement = ite.next();   //得到每一个servlet
            //创建一个实体类
            Entity ent = new Entity();  //用于存储servlet-name与servlet-class
            //因为servlet下有许多子元素,再次使用一个for循环
            for (Iterator<Element> subIte=subElement.elementIterator();subIte.hasNext();){
   
                Element ele = subIte.next();//可能是servlet-name,也可以能是servlet-class
                if ("servlet-name".equals(ele.getName())){
     //如果获得的元素节点的名称为servlet-name
                    ent.setName(ele.getText());//那么就对实体类的name赋值
                }else if("servlet-class".equals(ele.getName())){
   
                    ent.setClazz(ele.getText());
                }
            }
            //将Entity放置到集合内
            entityList.add(ent);
        }

        //测试
        System.out.println("开始测试XML是否工作正常");
        for (Entity entity : entityList) {
   
         System.out.println(entity.getName()+"\t"+entity.getClazz());
         }
        System.out.println("=======================+");
        //解析servlet-mapping
        for(Iterator<Element> ite=root.elementIterator("servlet-mapping");ite.hasNext();){
   
            Element subEle=ite.next();//得到每一个servlet-mapping
            //创建一个Mapping类的对象
            Mapping map=new Mapping();
            //解析servlet-mapping下的子元素
            for (Iterator<Element> subIte=subEle.elementIterator(); subIte.hasNext();){
   
                Element ele = subIte.next();//servlet-name,也有可能是url-pattern
                if ("servlet-name".equals(ele.getName())){
   
                    map
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值