会员可以在此提问,百战程序员老师有问必答
对大家有帮助的问答会被标记为“推荐”
看完课程过来浏览一下别人提的问题,会帮你学得更全面
截止目前,同学们一共提了 132832个问题
JAVA 全系列/第二阶段:JAVA 基础深化和提高/异常机制 2926楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/异常机制 2927楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2928楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器 2930楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/网络编程 2931楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2934楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器(旧) 2935楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/IO 流技术(旧) 2936楼

package com.bjsxt.server;

import java.util.List;
import java.util.Map;

import com.bjsxt.servlet.Servlet;

/**
 * Web应用程序
 * @version 1.0
 *
 */
public class WebApp {
	private static ServletContext contxt;
	static{
		contxt=new ServletContext();
		//分别获取对应关系的Map集合
		Map<String,String> servlet=contxt.getServlet();
		Map<String,String> mapping=contxt.getMapping();
		//创建解析XML文件对象
		WebDom4j web=new WebDom4j();
		web.parse(web.getDocument());//解析xml
		//获取解析XML之后的List集合
		List<Entity> entityList=web.getEntityList();
		List<Mapping> mappingList=web.getMappingList();
		
		//将List集合中的数据存储到Map集合
		for (Entity entity : entityList) {
			servlet.put(entity.getName(), entity.getClazz());
		}
		//	System.out.println(servlet);
		for( Mapping map:mappingList){
			//遍历url-pattern的集合
			List<String> urlPattern=map.getUrlPattern();
			for(String s:urlPattern){
				mapping.put(s, map.getName());
			}
		}
		System.out.println(mapping);
	}
	/**
	 * 通过反射创建Servlet对象
	 * @param url
	 * @return Servlet
	 */
	public static Servlet getServlet(String url){
		if (url==null||url.trim().equals("")) {
			return null;
		}
		//调用无参构造方法创建Servlet对象
		
		try {
			//如果url正确
			//根据url的key获取servlet-name的值 /log=login, /reg=register
			String servletName=contxt.getMapping().get(url);
			//根据servletName得到对应的servlet-class
			String servletClass=contxt.getServlet().get(servletName);  //得到的是一个完整个的包名+类的字符串
			System.out.println(servletClass);
			//使用反射创建 Servlet对象
			Class<?> clazz=Class.forName(servletClass);
			Servlet servlet = (Servlet) clazz.newInstance();
			return servlet;
		} catch (ClassNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (InstantiationException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return null;
	}
	public static void main(String[] args) {
		System.out.println(getServlet("/log"));
		System.out.println(getServlet("/login"));		
	}
}

image.png

老师,为什么这里得到的是一个包名+类的字符串,过程具体是怎么实现的?

JAVA 全系列/第二阶段:JAVA 基础深化和提高/手写服务器项目(旧) 2937楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/多线程和并发编程(旧) 2938楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/容器 2939楼
JAVA 全系列/第二阶段:JAVA 基础深化和提高/XML 技术(旧) 2940楼

课程分类

百战程序员微信公众号

百战程序员微信小程序

©2014-2025百战汇智(北京)科技有限公司 All Rights Reserved 北京亦庄经济开发区科创十四街 赛蒂国际工业园
网站维护:百战汇智(北京)科技有限公司
京公网安备 11011402011233号    京ICP备18060230号-3    营业执照    经营许可证:京B2-20212637