J2EE&XML建模

这篇具有很好参考价值的文章主要介绍了J2EE&XML建模。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

用一个xml-config文件实例:

先看config.xml文件

再看 ActionModel

ConfigModel

ActionNotFoundException

ForwardNotFoundException

ConfigModelFactory

ActionDuplicateDefinitionException

ForwardDuplicateDefinitionException

InvalidPathException


用一个xml-config文件实例:
  •  ActionModel
  • ConfigModel
  • ForwardModel     
  • ActionNotFoundException
  • ForwardNotFoundException
  • ConfigModelFactory
  • ActionDuplicateDefinitionException
  • ForwardDuplicateDefinitionException
  • InvalidPathException
先看config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[
	<!ELEMENT config (action*)>
	<!ELEMENT action (forward*)>
	<!ELEMENT forward EMPTY>
	<!ATTLIST action
	  path CDATA #REQUIRED
	  type CDATA #REQUIRED
	>
	<!ATTLIST forward
	  name CDATA #REQUIRED
	  path CDATA #REQUIRED
	  redirect (true|false) "false"
	>
]>
<config>
	<action path="/studentAction" type="org.lisen.mvc.action.StudentAction">
		<forward name="students" path="/students/studentList.jsp" redirect="false"/>
	</action>
</config>
再看 ActionModel
package com.zking.mymvc.framework;

import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * ActionModel类:表示一个Action的模型,包含了Action的路径、类型、转发模型、重定向等属性
 * */
public class ActionModel {
	
	private String path; //Action的路径
	private String type; //Action的类型,例如:request、ajax等
	
	private static Pattern pattern = Pattern.compile("^/.+$"); //静态的正则表达式,用于匹配Action的路径
	
	private Map<String, ForwardModel> forwardmap = new HashMap<>(); //转发模型的HashMap
	private Boolean redirect; //是否重定向
	
	
	public String getPath() {
		return path;
	}
	
	public void setPath(String path) {
		checkPath(path); //校验Action的路径是否符合规范,即必须以/开头
		this.path = path;
	}
	
	public String getType() {
		return type;
	}
	
	public void setType(String type) {
		this.type = type;
	}
	
	
	// put()方法用于将ForwardModel转发模型添加到HashMap集合中;
	public void put(ForwardModel forward) {
		if(!forwardmap.containsKey(forward.getName())) {
			forwardmap.put(forward.getName(), forward); //添加转发模型
		}
		else {
			throw new ForwardDuplicateDefinitionException("forward name:"+forward.getName()+" 不能重复");
			//如果转发模型已经存在,则抛出ForwardDuplicateDefinitionException异常
		}
	}
	
	// find()方法用于查找指定名称的转发模型,如果不存在则抛出ForwardNotFoundException异常
	public  ForwardModel find(String name) {
		if(!forwardmap.containsKey(name)) {
			return forwardmap.get(name);
		}
		else {
			throw new ForwardNotFoundException("forward name:"+name+"不存在");
			//如果转发模型不存在,则抛出ForwardNotFoundException异常
		}
	}
	
	// setRedirect()方法用于设置属性redirect的值必须为true或者false;
	public void setRedirect(String redirect) {
		if("true".equals(redirect) || "false".equals(redirect)){
			this.redirect=Boolean.valueOf(redirect);
		}
		else {
			throw new RuntimeException("属性redirect的值必须为true或者false");
			//如果属性redirect的值不为true或者false,则抛出RuntimeException异常
		}
	}
	
	// checkPath()方法用于校验路径是否符合规范,即必须以/开头;
	public void checkPath(String path) {
		Matcher matcher = pattern.matcher(path); //匹配Action的路径是否符合规范
		boolean b = matcher.matches();
		if(!b) {
			throw new InvalidPathException("ForwardModel.path["+path+"]必须以/开头");
			//如果Action的路径不符合规范,则抛出InvalidPathException异常
		}
	}
	
	
}
ConfigModel
public class ConfigModel {

    private Map<String, ActionModel> actionMap = new HashMap<>();
	//根据指定的路径 path,在 actionMap 中查找对应的 ActionModel 对象并返回。
	public ActionModel find(String path) {
		if(actionMap.containsKey(path)) {
			return actionMap.get(path);
		}
		else {
			throw new RuntimeException("action path:"+path+"没有找到");
		}
	}
	
    //将指定的 ActionModel 对象存储到 actionMap 中。
	public void put(ActionModel action) {
		
		if(!actionMap.containsKey(action.getPath())) {
			actionMap.put(action.getPath(), action);
		}
		else {
            //如果该对象的路径已经存在于 actionMap 中,则抛出自定义的 ActionDuplicateDefinitionException 异常,提示路径重复定义。 
			throw new ActionDuplicateDefinitionException("action path:"+action.getPath()+"重复定义");
		}
		
	}

    
}

ForwardModel     文章来源地址https://www.toymoban.com/news/detail-594396.html

public class ForwardModel {

    private String name;
	private String path;
	private boolean redirect;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public boolean isRedirect() {
		return redirect;
	}
	
	public void setRedirect(String redirect) {
		this.redirect = Boolean.valueOf(redirect);
	}
    
}
ActionNotFoundException
/*
 * action找不到指定路径
 */
public class ActionNotFoundException extends RuntimeException{

    public ActionNotFoundException() {
		super();
	}
	
	public ActionNotFoundException(String msg) {
		super(msg);
	}
	
	public ActionNotFoundException(String msg,Throwable cause) {
		super(msg,cause);
	}
    
}
ForwardNotFoundException
public class ForwardModel {

    private String name;
	private String path;
	private boolean redirect;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPath() {
		return path;
	}
	public void setPath(String path) {
		this.path = path;
	}
	public boolean isRedirect() {
		return redirect;
	}
	
	public void setRedirect(String redirect) {
		this.redirect = Boolean.valueOf(redirect);
	}
    
}
ConfigModelFactory
public class ConfigModelFactory {
    //私有化构造方法,确保该类不会被实例化
    private ConfigModelFactory() {}

    //使用饿汉模式,类加载时就初始化了config对象
    private static ConfigModel config = null;
    static {
        //读取配置文件config.xml
        InputStream in = ConfigModelFactory.class.getResourceAsStream("/config.xml");
        SAXReader reader  = new SAXReader();
        Document doc;
        try {
            doc = reader.read(in);
            Element root = doc.getRootElement();
            config = new ConfigModel();
            
            //读取每个action节点
            List<Element> actions = root.selectNodes("action");
            for (Element action : actions) {
                String actionPath = action.attributeValue("path");
                String actionType = action.attributeValue("type");
                //创建ActionModel对象
                ActionModel actionModel = new ActionModel();
                actionModel.setPath(actionPath);
                actionModel.setType(actionType);

                //读取每个action节点下的forward子节点
                List<Element> forwards = action.selectNodes("forward");
                for (Element forward : forwards) {
                    String forwardPath = forward.attributeValue("path");
                    String forwardName = forward.attributeValue("name");
                    String redirect = forward.attributeValue("redirect");
                    //创建ForwardModel对象
                    ForwardModel forwardModel = new ForwardModel();
                    forwardModel.setPath(forwardPath);
                    forwardModel.setName(forwardName);
                    forwardModel.setRedirect(redirect);
                    //将ForwardModel对象放入ActionModel对象中
                    actionModel.put(forwardModel);
                }
                //将ActionModel对象放入ConfigModel对象中
                config.put(actionModel);
            }
        } catch (Exception e) {
            //抛出运行时异常
            throw new RuntimeException("解析config.xml发生异常", e.getCause());
        }
    }

    //提供一个方法获取config对象
    public static ConfigModel getConfigModel() {
        return config;
    }

    public static void main(String[] args) throws DocumentException {
        //测试
        ActionModel action = config.find("/studentAction");
        System.out.println(action.getType());
        System.out.println("yes");
    }
}
ActionDuplicateDefinitionException
/*
 * action重复定义异常
 */
public class ActionDuplicateDefinitionException extends RuntimeException{
    
    public ActionDuplicateDefinitionException() {
		super();
	}
	
	public ActionDuplicateDefinitionException(String msg) {
		super(msg);
	}
	
	public ActionDuplicateDefinitionException(String msg,Throwable cause) {
		super(msg,cause);
	}
}
ForwardDuplicateDefinitionException
/**
 * forward重复定义异常
 * @author PC
 *
 */
public class ForwardDuplicateDefinitionException extends RuntimeException{

	public ForwardDuplicateDefinitionException() {
		super();
	}
	
	public ForwardDuplicateDefinitionException(String msg) {
		super(msg);
	}
	
	public ForwardDuplicateDefinitionException(String msg,Throwable cause) {
		super(msg,cause);
	}
InvalidPathException

public class InvalidPathException extends RuntimeException{

	public InvalidPathException() {
		super();
	}
	
	public InvalidPathException(String msg) {
		super(msg);
	}
	
	public InvalidPathException(String msg,Throwable cause) {
		super(msg,cause);
	}

到了这里,关于J2EE&XML建模的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • J2EE&通用分页02

    目录 一.重构-提取公用方法            1.为了进行公共方法的抽取,需要找出上面实习中的可通用部分,和差异化部分     2.公用方法封装思路       3. 具体实现 二.分页标签 2.1 准备一个Servlet  3.2 结果展示页面 三. 过滤器解决中文乱码问题 四.加入分页功能 四.封装分

    2024年02月15日
    浏览(43)
  • J2EE&集合框架&Set

    目录 一.Set特点 特点:无序,不重复 思考:如果对List容器中的元素去重? 二.遍历:foreach,迭代器 三.扩容: 初始容量16,负载因子0.75,扩容增量1倍 性能参数:初始容量,负载因子 默认值: 初始容量16,负载因子0.75 示例:new HashSet(20, 0.5f); 四.HashSet 五.思考 1. 如何给Arra

    2024年02月13日
    浏览(39)
  • J2EE&集合框架&List

    目录 一.UML ①集合类图 ②线下教育平台用例图  二.List集合特点 ①学集合框架就是了解容器的数据结构(增删改查) ②有序的 可重复的 三.遍历方式 ① foreach ② iterator 迭代器 ③ for 四.LinkedList ①对比ArrayList是数据结构 Linkedlist: 链表 特点:查询修改慢,增加删除快 Arrayli

    2024年02月13日
    浏览(36)
  • J2EE&集合框架&Map

    目录 一.Map特点 1.无序,键值对,键不能重复,值可以重复 2.键重复则覆盖,没有继承Collection接口 二.遍历方式 1.拿到key,再拿值2.拿到映射关系,键值都有  取出保存所有Entry的Set,再遍历此Set即可 三.HashMap与Hashtable的区别 1.Hashtable更安全 2.JDK 1.8之前hashtable的key不能存放null

    2024年02月15日
    浏览(48)
  • J2EE&集合框架&set集合

    目录 一.Set特点 特点:无序,不重复 思考:如果对List容器中的元素去重? 二.遍历:foreach,迭代器 三.扩容: 初始容量16,负载因子0.75,扩容增量1倍 性能参数:初始容量,负载因子 默认值: 初始容量16,负载因子0.75 示例:new HashSet(20, 0.5f); 四.HashSet 五.思考 1. 如何给Arra

    2024年02月13日
    浏览(39)
  • J2EE项目部署与发布(Linux版本)

    目录 一.jdktomcat安装 1.jdk的安装  1.2解压对应的安装包 1.3配置环境变量  2.tomcat的安装  二.mysql的安装 三.后端接口部署  后端部署 导入war包 修改端口  开启访问 1.jdk的安装 登录VMware Workstation Pro 然后连接MobaXterm      将 jdk tomcat mysql 导入到MobaXterm   1.2解压对应的安装包  

    2024年02月06日
    浏览(34)
  • J2EE项目部署与发布(Windows版本)

    目录 一、会议OA单体项目Windows部署 1.1 数据测试 1.2 项目部署 1.3 报错解决 1.4 最终效果 二、spa前后端分离项目Windows部署 2.1 后端代码测试 2.2 前端代码测试 2.3 项目部署 2.3.1 数据导入 2.3.2 后端部署 2.3.3 前端部署 2.3.3.1 Node.js环境配置 2.3.4 端口问题解决 2.3.4.1 method1 2.3.4.2 meth

    2024年02月07日
    浏览(44)
  • J2EE自定义mvc【框架配置及功能】

    目录 一、配置步骤 二、配置框架前三步 导入相应的jar 导入相应的Class 导入xml文件 三、优化基本操作(增删改) 1、基础优化 编写实体类 编写BookDao类 优化BookDao JUnit测试 2、后台优化 3、前端优化 将框架打成jar包,然后导入新工程,并且把框架的依赖jar包导入进去 将分页标

    2024年02月12日
    浏览(53)
  • 虚拟机部署与发布J2EE项目(Linux版本)

                                                      🎬 艳艳耶✌️:个人主页                                                   🔥 个人专栏 :《Spring与Mybatis集成整合》《Vue.js使用》                                                     ⛺️ 越努力 ,越幸

    2024年02月06日
    浏览(45)
  • 小研究 - J2EE 应用服务器的软件老化测试研究

    软件老化现象是影响软件可靠性的重要因素,长期运行的软件系统存在软件老化现象,这将影响整个业务系统的正常运行,给企事业单位带来无可估量的经济损失。软件老化出现的主要原因是操作系统资源消耗殆尽,导致应用系统的性能下降甚至崩溃或宕机。文中监测J2EE 应

    2024年02月11日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包