java 如何实现mvc,java实现简单的MVC框架

该博客详细介绍了基于Java的Servlet实现,包括初始化配置、路径映射以及请求处理。通过PropertiesUtil加载配置文件,根据请求URI动态查找并执行相应类的方法。如果找不到对应的类或方法,会返回错误信息。此实现展示了如何将URL路径映射到特定的类和方法,增强了Web应用的灵活性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

packagecom.wangyang.web;importjava.io.IOException;importjava.lang.reflect.InvocationTargetException;importjava.lang.reflect.Method;importjava.util.HashMap;importjava.util.Map;importjava.util.Properties;importjavax.servlet.ServletConfig;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importcom.wangyang.model.ShopSc;importcom.wangyang.util.PropertiesUtil;

@WebServlet("/")public class BaseServlet extendsHttpServlet{private Map map = new HashMap();private static final long serialVersionUID = 1L;

@Overridepublic void init(ServletConfig config) throwsServletException {

Properties prop=PropertiesUtil.getMvcProp();for(String key : prop.stringPropertyNames()){

map.put(key, prop.getProperty(key));

}

System.out.println(map);

}

@Overrideprotected void service(HttpServletRequest req, HttpServletResponse resp) throwsServletException, IOException {

path(req, resp);

}/*** 基于路径的映射*/

public voidpath(HttpServletRequest req, HttpServletResponse resp){

String method= req.getRequestURI().replace(req.getServletContext().getContextPath()+"/", "");try{

String[] str= method.split("/");

String className;

String methodName;if(str.length<=1){

className=str[0];

methodName="execute";

}else{

className= str[0];

methodName= str[1];

}

System.out.println(className+"--"+methodName);

Class>clz;try{

clz=Class.forName(map.get(className));

}catch(NullPointerException e1) {

error("没有找到处理的类!!", req, resp);return;

}

Method m;try{

m= clz.getMethod(methodName, HttpServletRequest.class,HttpServletResponse.class);

}catch(NoSuchMethodException e) {

error("该类没有要执行的方法!!", req, resp);return;

}

String path=(String)m.invoke(clz.newInstance(), req,resp);

req.getRequestDispatcher("/WEB-INF/"+path).forward(req, resp);

}catch(ClassNotFoundException e) {

e.printStackTrace();

}catch(SecurityException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IllegalAccessException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IllegalArgumentException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(InvocationTargetException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(InstantiationException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(ServletException e) {//TODO Auto-generated catch block

e.printStackTrace();

}catch(IOException e) {//TODO Auto-generated catch block

e.printStackTrace();

}

}public void error(String msg,HttpServletRequest req,HttpServletResponse resp) throwsServletException, IOException{

req.setAttribute("error",msg);

req.getRequestDispatcher("/WEB-INF/error.jsp").forward(req, resp);

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值