一个路径问题
老师原来的代码中department是小写的
而我的路径里的User首字母是大写的,为什么呢,附上核心控制器代码:
package com.imooc.hospital.global; import org.springframework.context.ApplicationContext; import org.springframework.context.support.ClassPathXmlApplicationContext; 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 DispatcherServlet extends GenericServlet { //访问IOC容器,创建Application对象 private ApplicationContext context; public void init() throws ServletException { //采用init方法,在初始化阶段赋值 super.init(); context = new ClassPathXmlApplicationContext("spring.xml"); } public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { /*servletRequest无法拿到请求路径,所以需要强制转化 * */ HttpServletRequest request = (HttpServletRequest) servletRequest; HttpServletResponse response = (HttpServletResponse) servletResponse; /* * 访问路径: * staff/add.do /login.do * staff的控制器 beanName=staffController * 具体方法:这里的add和上门要对应 * public void add(HttpServletRequest request, HttpServletResponse response){} * */ //h获取用户请求的url,因为是分段截取,这里去掉根路径,所以是substring(1) String path = request.getServletPath().substring(1); //现在需要获取IOC容器中bean的名字和获取请求的方法名 String beanName = null; String methodName = null; //现在判断路径中的“/” int index = path.indexOf('/'); System.out.println("创建成功"); //if (index!=-1)的格式为:staff/add.do if (index != -1) { //从/开始截取到index结束 注意实际上beanName的后面有一个Controller,所以在后边带上Controller //这里的index相当于staff String path1 = path.toLowerCase(); beanName = path1.substring(0,index) + "Controller"; //方法名从staff/后面开始截取,一直截取到.do methodName = path.substring(index + 1, path.indexOf(".do")); } else { //第二种情况/login.do 特殊模块没有根路径 beanName = "selfController"; //因为没有根路径,直接从头截取 methodName = path.substring(0, path.indexOf(".do")); } //根据beanName获取对象 Object obj = context.getBean(beanName); //获取方法 try { Method method = obj.getClass().getMethod(methodName, HttpServletRequest.class, HttpServletResponse.class); //调用invoke方法进行反射,第一个是method方法的对象,然后再把参数传入 method.invoke(obj, request, response); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } }
我得要在截取Controller前将路径改为小写才能运行,但后面还是会有很多的路径问题,所以想问一下
正在回答 回答被采纳积分+1
同学这个地方配置了两个路径:
科室分类管理:点击链接以后进入的是CategoryController,但是根据你上面贴出来的代码:
CategoryController类通过@Controller注入类型名称为categoryController,所以同学需要将链接改为: ../category/list.do 再跳转的时候就可以正常跳转了。
科室管理:如果DepartmentController的注解为@Controller("departmentController"),那么链接应该改为 ../department/list.do
建议同学根据上面的思路,将所有设置链接的地方进行检查修改。
祝学习愉快!
但路径会是大写的,所以我在核心控制器里这样获取beanname:
先转化为小写的,再传给beanName,这样就不会出现找不到的现象
登陆过滤器是这个:
package com.imooc.hospital.global;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class LoginFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
String path = request.getServletPath();
if (path.toLowerCase().indexOf("login")!=-1){
//放行
filterChain.doFilter(request,response);
}else {
HttpSession session = request.getSession();
Object obj = session.getAttribute("USER");
//已经登陆的放行
if (obj!=null){
filterChain.doFilter(request,response);
}else {
//未登陆的跳转回登陆界面
//.do可能会有问题,使用绝对路径
response.sendRedirect(request.getContextPath()+"/toLogin.do");
}
}
}
@Override
public void destroy() {
}
}
另外,我也有像老师一样做了一个初始页面
这样就能成功跳转,但老师的页面是用小写的,而我的是大写的,我不太懂为什么会有这种区别,而且我的需要通过../来返回上级才能从User/路径里跳出来,不然会形成User/category/list.do这种错误路径
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星