学习思维导图:

1.xml建模(由内到外)
什么叫xml建模:
将XML配置文件中的元素、属性、文本信息转换成对象的过程叫做XML建模
①ConfigModel
有新增、删除、获取的行为,无属性
②ActionModel
③ForwardModel
④ConfigModelFactory
建模思路:
* 1.将原有的config.xml进行解析
* 2.对应标签的内容,将其封装赋值给相对应的对象
* forward标签值 赋值给ForwardModel对象
* action标签值 赋值给ActionModel对象
* config标签值 赋值给ConfigModel对象
2.工厂模式
含义:对象包罗万象
给出的xml文件:

所建的类:

ActionModel类:
public class ActionModel {
private String path;
private String type;
private Map<String, ForwardModel> fMap=new HashMap<>();
public String getPath() {
return path;
}
public void setPath(String path) {
this.path = path;
}
public String getType() {
return type;
}
public void setType(String type) {
this.type = type;
}
// 压栈
public void push(ForwardModel forwardModel) {
fMap.put(forwardModel.getName(), forwardModel);
}
// 弹栈
public ForwardModel pop(String name) {
return fMap.get(name);
}
}
ConfigModel类:
public class ConfigModel {
private Map<String, ActionModel> acMap=new HashMap<String, ActionModel>();
public void push(ActionModel actionModel) {
acMap.put(actionModel.getPath(), actionModel);
}
// 弹栈
public ActionModel pop(String path) {
return acMap.get(path);
}
public static void main(String[] args) throws DocumentException {
// 此时ConfigModel对象里面没有xml内容
// ConfigModel configModel=new ConfigModel();
ConfigModel configModel=ConfigModelFactory.build();
ActionModel actionModel = configModel.pop("/loginAction");
System.out.println(actionModel.getType());
ForwardModel forwardModel = actionModel.pop("success");
System.out.println(forwardModel.getPath());
}
}
ConfigModelFactory类:
public class ConfigModelFactory {
public static ConfigModel build() throws DocumentException {
return build("config.xml");
}
public static ConfigModel build(String resourcepath) throws DocumentException {
InputStream is = ConfigModelFactory.class.getResourceAsStream(resourcepath);
SAXReader saxReader=new SAXReader();
Document doc= saxReader.read(is);
ConfigModel configModel=new ConfigModel();
List<Element> actionEles=doc.selectNodes("/config/action");
for (Element actionEle : actionEles) {
ActionModel actionModel=new ActionModel();
// 将xml文件解析的得来的path值赋值给actionModel对象中的path属性
actionModel.setPath(actionEle.attributeValue("path"));
actionModel.setType(actionEle.attributeValue("type"));
List<Element> forwardEles=actionEle.selectNodes("forward");
for (Element forwardEle : forwardEles) {
ForwardModel forwardModel=new ForwardModel();
forwardModel.setName(forwardEle.attributeValue("name"));
forwardModel.setPath(forwardEle.attributeValue("path"));
// redirect只有在配置文件中赋值false的时候,代表转发,其他代表重定向
forwardModel.setRedirect(!"false".equals(forwardEle.attributeValue("redirect")));
actionModel.push(forwardModel);
}
configModel.push(actionModel);
}
return configModel;
}
}
ForwardModel类:
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(boolean redirect) {
this.redirect = redirect;
}
}
案例:

web文件:

所建的类:

这些类建成的方法同上面建类的方法一样




①建模
public class WebAppModelFactory {
public static WebAppModel buildWebAppModel() {
String xmlPath = "/web.xml";
return buildWebAppModel(xmlPath);
}
public static WebAppModel buildWebAppModel(String xmlPath) {
InputStream in = WebAppModelFactory.class.getResourceAsStream(xmlPath);
SAXReader saxReader = new SAXReader();
WebAppModel webAppModel = new WebAppModel();
try {
Document doc = saxReader.read(in);
List<Element> servletEles = doc.selectNodes("/web-app/servlet");
for (Element servletEle : servletEles) {
ServletModel servletModel = new ServletModel();
Element servletNameEle = (Element) servletEle.selectSingleNode("servlet-name");
Element servletClassEle = (Element) servletEle.selectSingleNode("servlet-class");
ServletNameModel servletNameModel = new ServletNameModel();
ServletClassModel servletClassModel = new ServletClassModel();
servletNameModel.setContext(servletNameEle.getText());
servletClassModel.setContext(servletClassEle.getText());
servletModel.setServletNameModel(servletNameModel);
servletModel.setServletClassModel(servletClassModel);
webAppModel.pushServletModel(servletModel);
}
List<Element> servletMappingEles = doc.selectNodes("/web-app/servlet-mapping");
for (Element servletMappingEle : servletMappingEles) {
ServletMappingModel servletMappingModel = new ServletMappingModel();
Element servletNameEle = (Element) servletMappingEle.selectSingleNode("servlet-name");
ServletNameModel servletNameModel = new ServletNameModel();
servletNameModel.setContext(servletNameEle.getText());
servletMappingModel.setServletNameModel(servletNameModel);
List<Element> urlPatternEles = servletMappingEle.selectNodes("url-pattern");
for (Element urlPatternEle : urlPatternEles) {
UrlPatternModel urlPatternModel = new UrlPatternModel();
urlPatternModel.setContext(urlPatternEle.getText());
servletMappingModel.pushUrlPatternModel(urlPatternModel);
}
webAppModel.pushServletMappingModel(servletMappingModel);
}
} catch (Exception e) {
e.printStackTrace();
}
return webAppModel;
}
static String getServletClassByUrl(WebAppModel webAppModel, String url) {
String servletClass = "";
String servletName = "";
List<ServletMappingModel> servletMappingModels = webAppModel.getServletMappingModels();
for (ServletMappingModel servletMappingModel : servletMappingModels) {
List<UrlPatternModel> urlPatternModels = servletMappingModel.getUrlPatternModels();
for (UrlPatternModel urlPatternModel : urlPatternModels) {
if(url.equals(urlPatternModel.getContext())) {
ServletNameModel servletNameModel = servletMappingModel.getServletNameModel();
servletName = servletNameModel.getContext();
}
}
}
List<ServletModel> servletModels = webAppModel.getServletModels();
for (ServletModel servletModel : servletModels) {
ServletNameModel servletNameModel = servletModel.getServletNameModel();
if(servletName.equals(servletNameModel.getContext())) {
ServletClassModel servletClassModel = servletModel.getServletClassModel();
servletClass = servletClassModel.getContext();
}
}
return servletClass;
}
public static void main(String[] args) {
WebAppModel webAppModel = WebAppModelFactory.buildWebAppModel();
String res = getServletClassByUrl(webAppModel, "/jrebelServlet");
String res2 = getServletClassByUrl(webAppModel, "/jrebelServlet2");
String res3 = getServletClassByUrl(webAppModel, "/jrebelServlet3");
System.out.println(res);
System.out.println(res2);
System.out.println(res3);
}
}
解析:
将select的标签内容填充进webappmodel

给selectModel填充xml的内容

将select-mapping的标签内容填进webapp

给selectmappingmodel填充xml内容

②通过浏览器输入网址找到对应的后台处理器类
找到浏览器网址对应的select-name

找到select-name对应的后台处理类


1万+

被折叠的 条评论
为什么被折叠?



