实现SSM实现查看列表和ajax验证用户名是否重复
1.新建maven项目
2.在pom中导包war
3.创建webapp路径,配置xml文件
4.导包 json jstl spring springmvc jsp junit log freemarker
5.web.xml
6.中文乱码,核心servlet,过滤器
7.application.xml
8.扫描
9.新建jdbc,加载属性文件
10.创建包dao,dao.xml
package com.pro.dao;
import com.pro.domain.User;
import java.util.List;
public interface UserDao {
public List<User> selectUser();
public User selectUserByName(String name);
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pro.dao.UserDao">
<select id="selectUser" resultType="user">
select * from user
</select>
<select id="selectUserByName" resultType="user" parameterType="String">
select * from user where username=#{name}
</select>
</mapper>
11.mvc注解 mvc静态default 数据源Duir freemaker sqlSessionFactoryBean 改名
12.创建service的接口和实现类
package com.pro.service;
import com.pro.domain.User;
import java.util.List;
public interface UserService {
public List<User> getUsers();
public Boolean getUserName(String name);
}
package com.pro.service;
import com.pro.dao.UserDao;
import com.pro.domain.User;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Override
public List<User> getUsers() {
List<User> usersList = userDao.selectUser();
return usersList;
}
@Override
public Boolean getUserName(String name) {
User users = userDao.selectUserByName(name);
if (users == null) {
return true;
} else {
return false;
}
}
}
13.控制器
package com.pro.controller;
import com.pro.domain.User;
import com.pro.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.servlet.ModelAndView;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@Controller
public class UserController {
@Autowired
private UserService userService;
@GetMapping("/getUsers")
public ModelAndView getUsers() {
ModelAndView mav = new ModelAndView("/index");
List<User> usersList = userService.getUsers();
mav.addObject("usersList", usersList);
return mav;
}
@GetMapping("/checkName")
@ResponseBody
public String checkName(String userName){
Boolean userName1 = userService.getUserName(userName);
if(userName1==true){
return "keyi";
}else{
return "buxing";
}
}
}
14.新建index.ftl
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<script type="text/javascript" src="/jason/js/jquery-3.6.0.min.js"></script>
<script type="text/javascript">
$(function () {
$("#userName").blur(function () {
$.ajax({
url: 'checkName',
type: 'get',
dataType: 'text',
data: $('#frm').serialize(),
success: function (result) {
$('#info').text(result);
}
})
});
});
</script>
</head>
<body>
用户列表:<br>
<#list usersList as user>
${user.userId}+${user.userName}+${user.userName}<br>
</#list>
<br>
<form action="" id="frm">
username:
<input type="text" id="userName" name="userName"/>
<span id="info"></span>
</form>
</body>
</html>
项目基本实现要求,遇到的困难在
1.控制器中第二个方法缺少@ResponseBody
@ResponseBody
作用:
该注解用于将Controller的方法返回的对象,通过适当的HttpMessageConverter转换为指定格式后,写入到Response对象的body数据区。
使用时机:
返回的数据不是html标签的页面,而是其他某种格式的数据时(如json、xml等)使用;
那么只需删除注解:@ResponseBody 便可以返回页面pay/success.jsp。而且达到了与客户端后台交互的效果。
2.index无法把输入框的值传到控制器
<input type="text" id="userName" name="userName"/>
public String checkName(String userName) { Boolean user = userService.getUserName(userName); }
实际上传入文本框的name ——userName 到控制器的方法
String userName即可