JavaWeb 期末项目设计 业务逻辑与实现

1.1 业务逻辑设计与实现

业务逻辑层主要由控制层实现,需要实现的需求:

登陆注册:RegisterController:

package com.dpqq.springboot.web.controller;
import com.dpqq.springboot.web.Entity.User;
import com.dpqq.springboot.web.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import java.util.Map;
@Controller
public class RegisterController {
@Autowired
UserRepository userRepository;
@PostMapping(value = "/register")
public String register(@RequestParam("name") String name, String gender,
@RequestParam("phone") String phone,
@RequestParam("password") String password,
Map<String,String> map){
// 判断数据合法性
if(name.length()>4 || name.isEmpty()){map.put("warning1","姓名小于4个字");}
if(password.length()>16 || password.length()<8){map.put("warning2","密码8位到16位");}
if(phone.length()!=11){map.put("warning3","手机号11位");}
if(userRepository.existsByPhone(phone)){map.put("warning3","手机号已存在");}
if(!isNumeric(phone)){map.put("warning3","手机号数字");}
if(gender==null){map.put("warning4","性别不为空");}
// 合法则设置用户信息并保存至数据库
if(map.isEmpty()){
User user = new User();
user.setPassword(password);
user.setPhone(phone);
user.setName(name);
user.setGender(gender);
userRepository.save(user);
return "login";
}
// 不合法返回注册页
else{return "register";}

}
//判断字符串是否是数字函数
public static boolean isNumeric(String str)
{
for (int i =0;i<str.length();i++)
{
if(!Character.isDigit(str.charAt(i)))
{
return false;
}
}
return true;
}
}

package com.dpqq.springboot.web.controller;


import com.dpqq.springboot.web.Entity.User;
import com.dpqq.springboot.web.repository.CardRepository;
import com.dpqq.springboot.web.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;
import javax.servlet.http.HttpSession;
import java.util.Map;


@Controller
public class LoginController {
@Autowired
UserRepository userRepository;
@Autowired
CardRepository cardRepository;
@PostMapping(value = "/user/login")
public String login(@RequestParam("phone") String phone,
@RequestParam("password") String password,
Map<String,String> map, HttpSession session){
// 判断数据合法性
if(password.length()>16 || password.length()<8){map.put("warning2","密码8位到16位");}
if(phone.length()!=11){map.put("warning1","手机号11位");}
// 数据合法进一步判断,不合法返回登录页
if(map.isEmpty()) {
// 判断是否存在手机号密码匹配,存在即登陆可以登陆重定向至首页,不存在返回登录页
if (userRepository.existsByPhoneAndPassword(phone, password)) {
User user = userRepository.findByPhone(phone);
// 登陆后就再session中存放用户信息
session.setAttribute("loginUser",user);
return "redirect:/";
} else {
map.put("msg", "用户名或密码错误!");
return "login";
}
}
else{return "login";}
}
}

办卡:CardAddController:

 

package com.dpqq.springboot.web.controller;

import com.dpqq.springboot.web.Entity.Card;
import com.dpqq.springboot.web.Entity.User;
import com.dpqq.springboot.web.repository.CardRepository;
import com.dpqq.springboot.web.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.servlet.http.HttpSession;
import java.util.Date;
import java.util.Map;
import java.util.UUID;
@Controller // 表示这是一个控制器类
public class CardAddController {
@Autowired
private CardRepository cardRepository;
@Autowired
private UserRepository userRepository;
// @RequestMapping(
// method = {RequestMethod.POST}
//)
@PostMapping(value = "/CardAdd")
// 接受前台发送的数据
public String CardAdd(@RequestParam("cardpassword") String cardpassword ,
@RequestParam("phone") String phone ,
@RequestParam("password") String password,
Map<String,String> map ,
HttpSession session){
// 判断数据合法性
if(cardpassword.length()>16 || cardpassword.length()<8){map.put("warning1","密码8位到16位");}
if(password.length()>16 || password.length()<8){map.put("warning3","密码8位到16位");}
if(phone.length()!=11){map.put("warning2","手机号11位");}
// 合法则再数据库增加卡信息
if(map.isEmpty()){
// 通过输入的手机号和密码判断是否存在,否则返回申请页
if(userRepository.existsByPhoneAndPassword(phone, password)){
User user=new User();
user=userRepository.findByPhone(phone);
Card card=new Card();
String CardNum=getUUID(); // 获取随机生成16位卡号
// 设置用户和卡的信息,最后保存进数据库
user.setCard(CardNum);
card.setCardNum(CardNum);
card.setCardpassword(cardpassword);
card.setDate(new Date());
card.setBalance(0);
cardRepository.save(card);
userRepository.save(user);
// 添加用户卡信息到session中
User loginUser = (User)session.getAttribute("loginUser");
Card loginUserCard=cardRepository.findByCardNum(loginUser.getCard());
session.setAttribute("loginUserCard",loginUserCard);
map.put("CardNum",CardNum);
return "ApplyCardSuccess";
}
else
{
map.put("msg","不存在此账户");
return "CardApply";
}
}
else {
return "CardApply";
}

}
//生成
// 16位唯一性的订单号
public static String getUUID(){
//随机生成一位整数
int random = (int) (Math.random()*9+1);
String valueOf = String.valueOf(random);
//生成uuid的hashCode值
int hashCode = UUID.randomUUID().toString().hashCode();
//可能为负数
if(hashCode<0){
hashCode = -hashCode;
}
String value = valueOf + String.format("%015d", hashCode);
return value;
}
}

 

存钱savemoneyController:

 

package com.dpqq.springboot.web.controller;

import com.dpqq.springboot.web.Entity.Card;
import com.dpqq.springboot.web.Entity.User;
import com.dpqq.springboot.web.repository.CardRepository;
import com.dpqq.springboot.web.repository.UserRepository;
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.PostMapping;

import javax.servlet.http.HttpSession;
import java.util.Map;

@Controller
public class SaveMoneyController {
@Autowired
UserRepository userRepository;
@Autowired
CardRepository cardRepository;
@GetMapping(value = "savemoney")
public String savemoney(HttpSession session, Map<String,String> map){
// 判断session中是否有用户信息,没有则不能存钱,返回首页
if(session.getAttribute("loginUser")==null){return "/";}
// 有用户信息进一步判断有没有办卡
else{
// 取出用户信息
User user=(User)session.getAttribute("loginUser");
// 判断办卡与否,没办卡跳转办卡页面,否则进入存钱页面
if(user.getCard()==null){map.put("msg","请先办卡再存钱!"); return "CardApply";}
else {
Card card=cardRepository.findByCardNum(user.getCard());
session.setAttribute("loginUserCard",card);
return "savemoney" ;
}
}
}
@PostMapping(value = "/Tosavemoney")
public String savemoney( String balance,Map<String,String> map,HttpSession session){
// 判断数据合法性
if(balance.isEmpty()){map.put("warning","金额不为空!"); }
if(!isNumeric(balance)){map.put("warning","含数字以外字符!"); }
if(map.isEmpty()){
// 因为是从session中取登陆后的用户信息,所以无需判断数据库中是否存在要素,取出用户信息后直接与输入的账户卡号
// 进行转账操作
User user=(User)session.getAttribute("loginUser");
// 获取用户信息中的卡号
Card card=cardRepository.findByCardNum(user.getCard());
// 设置卡的金额
card.setBalance(card.getBalance()+Integer.parseInt(balance));
// 保存进数据库,更新金额
cardRepository.save(card);
return "savemoneySuccess";
}
// 数据不合法返回存钱页
else {return "savemoney";}

}
//判断字符串是否是数字函数
public static boolean isNumeric(String str)
{
for (int i =0;i<str.length();i++)
{
if(!Character.isDigit(str.charAt(i)))
{
return false;
}
}
return true;
}
}

 

转账TranferAccountController:

 

package com.dpqq.springboot.web.controller;

import com.dpqq.springboot.web.Entity.Card;
import com.dpqq.springboot.web.Entity.User;
import com.dpqq.springboot.web.repository.CardRepository;
import com.dpqq.springboot.web.repository.UserRepository;
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.PostMapping;

import javax.servlet.http.HttpSession;
import java.util.Map;

@Controller
public class SaveMoneyController {
@Autowired
UserRepository userRepository;
@Autowired
CardRepository cardRepository;
@GetMapping(value = "savemoney")
public String savemoney(HttpSession session, Map<String,String> map){
// 判断session中是否有用户信息,没有则不能存钱,返回首页
if(session.getAttribute("loginUser")==null){return "/";}
// 有用户信息进一步判断有没有办卡
else{
// 取出用户信息
User user=(User)session.getAttribute("loginUser");
// 判断办卡与否,没办卡跳转办卡页面,否则进入存钱页面
if(user.getCard()==null){map.put("msg","请先办卡再存钱!"); return "CardApply";}
else {
Card card=cardRepository.findByCardNum(user.getCard());
session.setAttribute("loginUserCard",card);
return "savemoney" ;
}
}
}
@PostMapping(value = "/Tosavemoney")
public String savemoney( String balance,Map<String,String> map,HttpSession session){
// 判断数据合法性
if(balance.isEmpty()){map.put("warning","金额不为空!"); }
if(!isNumeric(balance)){map.put("warning","含数字以外字符!"); }
if(map.isEmpty()){
// 因为是从session中取登陆后的用户信息,所以无需判断数据库中是否存在要素,取出用户信息后直接与输入的账户卡号
// 进行转账操作
User user=(User)session.getAttribute("loginUser");
// 获取用户信息中的卡号
Card card=cardRepository.findByCardNum(user.getCard());
// 设置卡的金额
card.setBalance(card.getBalance()+Integer.parseInt(balance));
// 保存进数据库,更新金额
cardRepository.save(card);
return "savemoneySuccess";
}
// 数据不合法返回存钱页
else {return "savemoney";}

}
//判断字符串是否是数字函数
public static boolean isNumeric(String str)
{
for (int i =0;i<str.length();i++)
{
if(!Character.isDigit(str.charAt(i)))
{
return false;
}
}
return true;
}
}

 

销户CancellationController:

 

 

package com.dpqq.springboot.web.controller;

import com.dpqq.springboot.web.Entity.Card;
import com.dpqq.springboot.web.Entity.User;
import com.dpqq.springboot.web.repository.CardRepository;
import com.dpqq.springboot.web.repository.UserRepository;
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.PostMapping;

import javax.servlet.http.HttpSession;
import java.util.Map;

@Controller
public class SaveMoneyController {
@Autowired
UserRepository userRepository;
@Autowired
CardRepository cardRepository;
@GetMapping(value = "savemoney")
public String savemoney(HttpSession session, Map<String,String> map){
// 判断session中是否有用户信息,没有则不能存钱,返回首页
if(session.getAttribute("loginUser")==null){return "/";}
// 有用户信息进一步判断有没有办卡
else{
// 取出用户信息
User user=(User)session.getAttribute("loginUser");
// 判断办卡与否,没办卡跳转办卡页面,否则进入存钱页面
if(user.getCard()==null){map.put("msg","请先办卡再存钱!"); return "CardApply";}
else {
Card card=cardRepository.findByCardNum(user.getCard());
session.setAttribute("loginUserCard",card);
return "savemoney" ;
}
}
}
@PostMapping(value = "/Tosavemoney")
public String savemoney( String balance,Map<String,String> map,HttpSession session){
// 判断数据合法性
if(balance.isEmpty()){map.put("warning","金额不为空!"); }
if(!isNumeric(balance)){map.put("warning","含数字以外字符!"); }
if(map.isEmpty()){
// 因为是从session中取登陆后的用户信息,所以无需判断数据库中是否存在要素,取出用户信息后直接与输入的账户卡号
// 进行转账操作
User user=(User)session.getAttribute("loginUser");
// 获取用户信息中的卡号
Card card=cardRepository.findByCardNum(user.getCard());
// 设置卡的金额
card.setBalance(card.getBalance()+Integer.parseInt(balance));
// 保存进数据库,更新金额
cardRepository.save(card);
return "savemoneySuccess";
}
// 数据不合法返回存钱页
else {return "savemoney";}

}
//判断字符串是否是数字函数
public static boolean isNumeric(String str)
{
for (int i =0;i<str.length();i++)
{
if(!Character.isDigit(str.charAt(i)))
{
return false;
}
}
return true;
}
}

 

1.2 表现层设计与实现

表现层用thtmeleaf模板引擎,导入bootstrapwebjars,使用其中的css

 

 

 

1.3 项目难点及解决方案

问题报错1

JPARepository中自动定义查询方法的驼峰命名不是十分理解深刻,只知道单词中间大写会变成下划线加小写,当我有一个字段中间有大写单词时,编写JPARepository自定义方法时报错。

解决方案:

我大概知道错误,就把实体类中字段改成小写,再把数据库表删除,重新启动则运行通过。

问题难点2

编写MvcConfig配置类时,在网上看到的时配置WebMvcConfigAdapter,但是我像实现这个接口是显示方法弃用。

解决方案:

尝试webmvcConfig实现,发现这个与WebMvcConfigAdapter可实现的方法一致,得到解决。

1.4 典型代码片段与设计过程

配置拦截器:

 

package com.dpqq.springboot.web.component;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//配置拦截器,重写拦截器必要方法
public class ApplyCardHandlerInterceptor implements HandlerInterceptor{
@Override //重写方法
// 重写预处理方法,返回值Boolean 通行与不通行
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// 从Session根据键“loginUser”取值,赋值给user
Object user=request.getSession().getAttribute("loginUser");
// 判断取值是否为空,为空则表示没有登陆,跳转回登录页,否则表示登陆了,放行
if(user == null){
request.setAttribute("msg","请先登陆");
request.getRequestDispatcher("/login").forward(request,response);
return false;
}
else{return true;}
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

}
}

MvcConfig添加拦截器:

 

 

package com.dpqq.springboot.web.component;

import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//配置拦截器,重写拦截器必要方法
public class ApplyCardHandlerInterceptor implements HandlerInterceptor{
@Override //重写方法
// 重写预处理方法,返回值Boolean 通行与不通行
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response,
Object handler) throws Exception {
// 从Session根据键“loginUser”取值,赋值给user
Object user=request.getSession().getAttribute("loginUser");
// 判断取值是否为空,为空则表示没有登陆,跳转回登录页,否则表示登陆了,放行
if(user == null){
request.setAttribute("msg","请先登陆");
request.getRequestDispatcher("/login").forward(request,response);
return false;
}
else{return true;}
}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {

}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {

}
}

DuridConfig配置durid数据源:

 

package com.dpqq.springboot.web.config;

import com.alibaba.druid.pool.DruidDataSource;
import com.alibaba.druid.support.http.StatViewServlet;
import com.alibaba.druid.support.http.WebStatFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.boot.web.servlet.FilterRegistrationBean;
import org.springframework.boot.web.servlet.ServletRegistrationBean;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import javax.servlet.Filter;
import javax.sql.DataSource;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

@Configuration //配置注解,表示这是一个配置类
public class DuridConfig {
//按application.yml中前缀为“spring.datasource”属性
@ConfigurationProperties(prefix = "spring.datasource")
@Bean //注解Bean,加入容器以使用
public DataSource druid(){
return new DruidDataSource();
}
@Bean //注解Bean,加入容器以使用
public ServletRegistrationBean StatViewServlet(){
// 声明ServletRegistrationBean并配置路由
ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(), "/druid/*");
Map<String,String> initparams = new HashMap<>();
// 设置登陆用户及密码,放行路由
initparams.put("loginUsername","admin");
initparams.put("loginPassword","123456");
initparams.put("allow","");
// initparams.put("deny","localhost");
bean.setInitParameters(initparams);
return bean;
}
@Bean
// 配置过滤器
public FilterRegistrationBean webStatFilter(){
FilterRegistrationBean<Filter> bean = new FilterRegistrationBean<>();
bean.setFilter(new WebStatFilter());
Map<String,String> initparams = new HashMap<>();
initparams.put("exclusions","*.js,*.css");
bean.setInitParameters(initparams);
bean.setUrlPatterns(Arrays.asList("/*"));
return bean;
}
}

 

 

转载于:https://www.cnblogs.com/dpqq/p/10949496.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值