前后端分离登录注册Demo
前端
登录demo
methods: {
submitForm(formName) {
this.$refs[formName].validate((valid) => {
if (valid) {
let url = "/user/loginServlet";
let params=`username=${this.ruleForm.username}&password=${this.ruleForm.password}`;
axios.post("/user/loginServlet",`username=${this.ruleForm.username}&password=${this.ruleForm.password}`)
axios.post(url,params)
.then(resp=>{
if(resp.data){
this.$message.success('登录成功');
window.location.href='#/success';
}else{
this.$message.error('用户名或者密码错误');
}
});
} else {
this.$message.error('校验失败,不能提交表单');
return false;
}
});
},
resetForm(formName) {
this.$refs[formName].resetFields();
}
}
后端
Dao层
public interface UserMapper {
@Select("select * from user where username=#{username}")
User queryUserByUserName(@Param("username") String username);
@Insert("insert into user values(null,#{username},#{password})")
void register(User user);
}
Service层
public class UserServiceImpl {
public User login(User user) {
SqlSession sqlSession = SqlSessionUtil.getSqlSession(false);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User u = mapper.login(user);
sqlSession.close();
return u;
}
public boolean register(User user) {
SqlSession sqlSession = null;
try {
sqlSession = SqlSessionUtil.getSqlSession(false);
UserMapper mapper = sqlSession.getMapper(UserMapper.class);
User u = mapper.queryUserByUserName(user.getUsername());
if (u == null) {
mapper.register(user);
sqlSession.commit();
return true;
} else {
return false;
}
} finally {
if (sqlSession != null) {
sqlSession.close();
}
}
}
}
Web层
@WebServlet("/registerServlet")
public class RegisterServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String username = request.getParameter("username");
String password = request.getParameter("password");
User user = new User();
user.setUsername(username);
user.setPassword(password);
UserServiceImpl userService = new UserServiceImpl();
boolean result = userService.register(user);
response.getWriter().print(result);
}
}
小结
登录注册案例demo小结:
使用技术点:
前端:Element-ui axios异步请求 Vue-cli(脚手架)
后端:mybatis、mysql、servlet、maven
web:接受前端传输过来的数据,并将其封装为pojo实体;给前端返回查询结果
Service:接收web层传输的对象,定义方法判断数据是否存在;返回web数据
dao分层:注解开发,和数据库进行交互查询;
遇到的困难点:
前端
axios未理解到位:获取后端url、get、post要携带的参数
axios.post().then()
前后端服务器交互流程不理解,数据流的传输存在模糊
后端:
针对前端传输参数乱码处理
mybatis环境配置
注解开发
后续注意点:
没有思路时,画流程图、尽可能把每一步的详细步骤写下来
利用浏览器抓包参考携带数据
加强debug的使用,测试程序的正确
养成完成一个小功能后进行测试的习惯
小知识点需要掌握,不然综合案例Demo会存在一定技术盲区
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了