服务器启动成功,运行正常,可无法跳转页面,同时,localhost8080无法打开

服务器启动成功,运行正常,可无法跳转页面,同时,localhost8080无法打开

package com.liujia.cake.global;

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class GlobalController extends GenericServlet {
   public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
       /*
       /.do
       * /login.do  DefaultCtroller login
       * /Cake/detail.do CakeCtroller detail
       * /admin/Cake/add.do CakeCtroller add
       * */
       System.out.println("开始处理");
       HttpServletRequest request=(HttpServletRequest) servletRequest;
       HttpServletResponse response=(HttpServletResponse) servletResponse;
       String path=request.getContextPath();
       if(path.indexOf("/admin")!=-1){
           path=path.substring(7);
       }else{
           path=path.substring(1);
       }
       /*
       * login.do
       * Cake/detail.do
       * Cake/add.do
       *
       * */
       int index=path.indexOf("/");
       String className=null;
       String  methodName=null;
       if (index!=-1){
           className="com.liujia.cake.controller."+path.substring(0,index)+"Controller";
           methodName=path.substring(index+1,path.indexOf(".do"));
       }else {
           className="com.liujia.cake.controller.DefaultController";
           methodName=path.substring(0,path.indexOf(".do"));
       }

       try {
           Class cl=Class.forName(className);
           Object object=cl.newInstance();
           Method method= cl.getMethod(methodName,HttpServletRequest.class,HttpServletResponse.class);
           method.invoke(object,request,response);
           } catch (InvocationTargetException e) {
               e.printStackTrace();
           } catch (InstantiationException e) {
               e.printStackTrace();
           } catch (IllegalAccessException e) {
               e.printStackTrace();
           } catch (NoSuchMethodException e) {
               e.printStackTrace();
           } catch (ClassNotFoundException e) {
            e.printStackTrace();
       }
   }
}



package com.liujia.cake.controller;

import com.liujia.cake.biz.CatalogBiz;
import com.liujia.cake.biz.CatalogBizImpl;
import com.liujia.cake.entity.Catalog;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

public class CatalogController {
   private CatalogBiz catalogBiz=new CatalogBizImpl();

   public CatalogController() throws IOException {

   }

   //  /admin/Catalog/list.do
   public void  list(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       Catalog root=catalogBiz.getRoot();
       request.setAttribute("root",root);
       System.out.println("调用这个玩意了");
       request.getRequestDispatcher("/WEB-INF/pages/admin/catalog_list.jsp").forward(request,response);
   }
   //  /admin/Catalog/toAdd.do
   public void  toAdd(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
       Catalog root=catalogBiz.getRoot();
       request.setAttribute("root",root);
       request.getRequestDispatcher("/WEB-INF/pages/admin/catalog_add.jsp").forward(request,response);
   }

   //  /admin/Catalog/add.do
   public void  add(HttpServletRequest request, HttpServletResponse response) throws IOException {
       String[] titles=request.getParameterValues("title");
       String[] pids=request.getParameterValues("pid");
       String[] infors=request.getParameterValues("infor");
       List<Catalog> list=new ArrayList<Catalog>();
       for(int i=0;i<titles.length;i++){
           Catalog catalog=new Catalog();
           catalog.setTitle(titles[i]);
           catalog.setPid(Integer.parseInt(pids[i]));
           catalog.setInfo(infors[i]);
           list.add(catalog);
       }
       catalogBiz.add(list);
       response.sendRedirect("list.do");
   }
   //  /admin/Catalog/remove.do
   public void  remove(HttpServletRequest request, HttpServletResponse response) throws IOException {
       int id=Integer.parseInt(request.getParameter("id"));
       catalogBiz.remove(id);
       response.sendRedirect("list.do");
   }

}

http://img1.sycdn.imooc.com//climg/5f5a822a093cf05311140620.jpghttp://img1.sycdn.imooc.com//climg/5f5a824c0956922110450719.jpghttp://img1.sycdn.imooc.com//climg/5f5a82aa090fb7cb13660328.jpghttp://img1.sycdn.imooc.com//climg/5f5a82c60929b7b104850298.jpghttp://img1.sycdn.imooc.com//climg/5f5a82d809abbcdc09710413.jpg

正在回答 回答被采纳积分+1

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

4回答
好帮手慕阿满 2020-09-11 18:44:19

同学你好,如下配置是指所有以.do的请求都会转到GlobalController控制器进行处理。

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

这里所有的请求是指访问该项目的请求,例如该项目是的是本地访问,端口是8080,所有访问localhost:8080,以.do结尾的请求都会转到GlobalController控制器处理。其他例如端口不同,即使以.do结尾,也不会转到GlobalController处理。

祝:学习愉快~

好帮手慕阿满 2020-09-11 16:15:25

同学你好,Application context处是配置上下文路径,相当于项目名。如果这里配置了/admin/Catalog/list.do,那么访问路径中也需要加上该路径。如果要访问分类列表页面,需要写两个/admin/Catalog/list.do。即localhost:8080/admin/Catalog/list.do/admin/Catalog/list.do。这种路径是不正确的,通常Application context处会省略不写。

祝:学习愉快~

  • 提问者 大圣归来² #1
    <servlet> <servlet-name>GlobalServlet</servlet-name> <servlet-class>com.liujia.cake.global.GlobalController</servlet-class> </servlet> <servlet-mapping> <servlet-name>GlobalServlet</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> 这个的意思是,只要是以.do结尾的请求都会被控制器处理吗? 这样不会被比如说sdc.do的这样请求攻击吗?造成服务器过载问题
    2020-09-11 17:55:07
提问者 大圣归来² 2020-09-11 12:01:31

请看下面,为啥我把标红的地方去掉了,就正常了哦

提问者 大圣归来² 2020-09-11 12:00:56
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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