关于登陆的问题
不太明白登陆所涉及的路径该怎么写
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'SelfController' available
at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBeanDefinition(DefaultListableBeanFactory.java:685)
at org.springframework.beans.factory.support.AbstractBeanFactory.getMergedLocalBeanDefinition(AbstractBeanFactory.java:1210)
at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291)
at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199)
at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1089)
at com.imooc.hp.global.DispatcherServlet.service(DispatcherServlet.java:45)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at com.imooc.hp.global.EncodingFilter.doFilter(EncodingFilter.java:21)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:198)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:493)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:140)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:81)
at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:650)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:87)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:342)
at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:800)
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:806)
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1498)
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:748)
项目结构
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 | package com.imooc.hp.controller; import com.imooc.hp.entity.User; import com.imooc.hp.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import javax.servlet.ServletException; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpSession; import java.io.IOException; @Controller ( "selfController" ) public class SelfController { @Autowired private UserService userService; // /toLogin.do public void toLogin(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher( "login.jsp" ).forward(request,response); } // /login.do public void login(HttpServletRequest request,HttpServletResponse response) throws IOException { String username = request.getParameter( "username" ); String password = request.getParameter( "password" ); User user = userService.getByUsername(username,password); if (user == null ){ response.sendRedirect( "toLogin.do" ); } else { HttpSession session = request.getSession(); session.setAttribute( "USER" ,user); response.sendRedirect( "category/list.do" ); } } // /main.do public void main(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException { request.getRequestDispatcher( "hospital_detail,jsp" ).forward(request,response); } } |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | <%@ page contentType= "text/html;charset=UTF-8" language= "java" %> <!DOCTYPE html> <html> <head> <meta charset= "UTF-8" > <title>登录</title> <link rel= "stylesheet" href= "css/login.css" > </head> <body> <div class = "login" > <div class = "header" > <h1> <a href= "login.do" >登录</a> </h1> <button></button> </div> <form action= "login.do" method= "post" > <div class = "name" > <input type= "text" id= "name" name= "username" > <p></p> </div> <div class = "pwd" > <input type= "password" id= "pwd" name= "password" > <p></p> </div> <div class = "btn-red" > <input type= "submit" value= "登录" id= "login-btn" > </div> </form> </div> </body> </html> |
核心控制器
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 | package com.imooc.hp.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 { @Override public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException { HttpServletRequest request = (HttpServletRequest)servletRequest; HttpServletResponse response = (HttpServletResponse)servletResponse; //规范 // /Category/add.do CategoryController add // /login.do SelfController login //获得路径 String path = request.getServletPath().substring( 1 ); // Category/add.do CategoryController add // login.do SelfController login int index = path.indexOf( "/" ); String beanName = null ; String methodName = null ; if (index != - 1 ){ beanName = path.substring( 0 ,index)+ "Controller" ; methodName = path.substring(index+ 1 ,path.indexOf( ".do" )); } else { beanName = "SelfController" ; methodName = path.substring( 0 ,path.indexOf( ".do" )); } //IOC容器中获取对应的对象 ApplicationContext context = new ClassPathXmlApplicationContext( "spring.xml" ); Object obj = context.getBean(beanName); //获取方法 try { Method method = obj.getClass().getMethod(methodName,HttpServletRequest. class ,HttpServletResponse. class ); method.invoke(obj,request,response); } catch (NoSuchMethodException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); } } } |
正在回答
1、如下图所示,根据报错提示,找不到SelfController这个bean,
原因如下:代码中的beanName首字母是大写的,
应该与下图标记的Controller中的单词相匹配。
2、关于登陆路径的问题不是很明白同学指哪里不明白呢,在form表单的action中写login.do就可以呀,同学是指哪里不会写呢?可以详细说明一下你的问题,方便我们具有针对性的为你解答,祝学习愉快~
1、实现后台登陆的一般都是通过login.do请求去访问分配器,然后有分配去访问对应的Controller,然后在Controller中去访问login.jsp页面,比如下图标记的这个路径,
2、路径的写法有很多种,同学可以配上截图描述一下,因为用文字描述我不知道到你的路径是怎么写的,祝学习愉快~
- 参与学习 人
- 提交作业 205 份
- 解答问题 4317 个
Java中非常实用的SSM整合开发内容,从Spring开始,到MyBaits的进阶内容,再到SpringMVC的应用,最后是SSM整合开发案例,逐步深入,助你成长为一名Java工程师!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧