老师,这是为什么呢,查不出来了

老师,这是为什么呢,查不出来了

http://img1.sycdn.imooc.com//climg/5e631beb09c94a7212880677.jpg

public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
   /*
   .do
   /login.do           DefaultController   login
   /Cake/detail.do     CakeController      detail
   /admin/Cake/add.do  CakeController      add
    */
   HttpServletRequest request = (HttpServletRequest) servletRequest;
   HttpServletResponse response = (HttpServletResponse)servletResponse;
   String path = request.getServletPath();
   /*如果请求是/admin开头的,则先截取/admin以后的字符,如果不是,则截取/后的字符*/
   if(path.indexOf("admin")!=-1){
       path = path.substring(7);
   }else{
       path = path.substring(1);
   }
   /*
   login.do           DefaultController   login
   Cake/detail.do     CakeController      detail
   Cake/add.do  CakeController      add
    */
   int index = path.indexOf("/");
   String className =null;
   String methodName =null;
   /*
    以/为分割线,截取/之前的字符,
    例如Cake/add.do 截取的是例如Cake,
    并拼接上Controller,以及包路径
    如果没有/,则进入到默认的DefaultController中
    */
   if(index!=-1){
       className = "com.shop.icake.controller."+path.substring(0,index)+"Controller";
      /* 从/后边的字符串,截止到.do 之前的字符串,该字符串为方法名*/
       methodName = path.substring(index+1,path.indexOf(".do"));
   }else{
       className = "com.shop.icake.controller.DefaultController";
       methodName = path.substring(0,path.indexOf(".do"));
   }
   try {
       /*使用反射获取到Class对象*/
       Class cla = Class.forName(className);
      /* 创建该对象的实例对象*/
       Object object = cla.newInstance();
      /* 通过反射的方式执行方法*/
       Method method = cla.getMethod(methodName,HttpServletRequest.class, HttpServletResponse.class);
       method.invoke(object,request,response);
   } catch (ClassNotFoundException e) {
       e.printStackTrace();
   } catch (IllegalAccessException e) {
       e.printStackTrace();
   } catch (InstantiationException e) {
       e.printStackTrace();
   } catch (NoSuchMethodException e) {
       e.printStackTrace();
   } catch (InvocationTargetException e) {
       e.printStackTrace();
   }
}



正在回答

登陆购买课程后可参与讨论,去登陆

3回答

同学你好

http://img1.sycdn.imooc.com//climg/5e6354e009f3e15903840115.jpg

同学的这个类名写的和控制器中的不同,同学这里第三个字母写的是l,而请求的是时候请求的是t

http://img1.sycdn.imooc.com//climg/5e63553709bd9d8a04540099.jpg

同学这里要保持一致哦

如果我的回答解决了你的问题,请采纳,祝学习愉快.

  • 阿满___最帅 提问者 #1
    我去。。谢谢老师,我错了
    2020-03-07 19:15:40
提问者 阿满___最帅 2020-03-07 15:23:24
好帮手慕阿莹 2020-03-07 14:10:08

同学你好,

请问同学的是自己写的还是用的老师的源码呢?

请同学贴一下你的项目目录截图,是否存在这个

http://img1.sycdn.imooc.com//climg/5e633ab309797c4004230030.jpg

这个类呢?

祝学习愉快

  • 提问者 阿满___最帅 #1
    我跟着老师自己写的,控制器是贴过来的
    2020-03-07 15:24:19
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师