第二天(—2022/2/7—)
编写Service层
@Service
public class UserService {
@Autowired
UserMapper userMapper;
/**
* 登录
*/
public List<User> doLogin(User user){
return userMapper.selectByAccount(user);
}
}
编写Controller层
@Controller
@SessionAttributes(value = {"hasUser"},types = {User.class})
public class UserController {
@Autowired
UserService userService;
/**
* 登录逻辑
*/
@RequestMapping(value = "/login",method = RequestMethod.POST)
public String doLogin(User user, Model model){
List<User> users = userService.doLogin(user);
if (!users.isEmpty() && users.size()<2){
for (User user1 : users) {
System.out.println(user1);
if (user1.getUserPassword().equals(user.getUserPassword())){
model.addAttribute("hasUser","true");
return "index";
}
}
}
return "fail";
}
@RequestMapping(value = "toLogin")
public String toLoginPage(Model model){
model.addAttribute("hasUser","false");
return "login";
}
}
问题:ioc找不到Controller,因为没有service可以注入
进行测试
@Test
public void test02(){
ApplicationContext ioc = new ClassPathXmlApplicationContext("applicationContext.xml");
UserMapper mapper = ioc.getBean(UserMapper.class);
User user1 = new User(null,"",123456,"123456","男","");
List<User> users = mapper.selectByAccount(user1);
for (User user : users) {
System.out.println(user.toString());
}
UserService bean = ioc.getBean(UserService.class);
System.out.println(bean);
UserController bean1 = ioc.getBean(UserController.class);
System.out.println(bean1);
}
发现service已经注册到容器中,而controller没有注册
检查配置文件,applicationContext文件扫描了除controller以外所有包,springmvc-servlet.xml只扫描了controller包,而且两个配置文件都加载了
修改:将applicationContext.xml包扫描改为全部,发现测试可以输出controller,进行项目部署
问题:依旧报controller没有的错
解决:在web.xml文件的启动ioc容器下方加入
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
不配置ContextLoaderListener的话,spring默认去这个目录加载/WEB-INF/applicationContext.xml,这也可能是导致之前没有注册controller的错,因为我们的controller是写在springmvc-servlet.xml中的,没加载springmvc-servlet.xml当然没有了,一个下午吃了一个教训。