读万卷书不如行万里路,只学书上的理论是远远不够的,只有在实战中才能获得能力的提升,本篇文章手把手带你用java SSM JSP maven Mysql实现一个网上电子书城,大家可以在过程中查缺补漏,提升水平
项目描述:spring mvc jsp实现的简单书城项目,可以在支付宝沙箱内实现支付
运行环境:jdk8 tomcat9 mysql IntelliJ IDEA
项目技术:spring spring mvc mybatis jsp maven
后台管理员图书管理代码:
@控制器
@RequestMapping('/admin/book ')
@需要任务('图书管理')
公共类AdminBookController {
@自动连线
私有IBookInfoService bookInfoService;
@自动连线
私有图书描述映射器
@自动连线
私有IStoreService商店服务
@Value('${image.url.prefix} ')
私有字符串URL前缀
@RequestMapping('toAddition ')
@需要任务(' book-add ')
公共字符串toAddition() {
返回“管理/预订/添加”;
}
/**
* 添加书籍
*
*/
@请求映射('/add ')
@需要任务(' book-add ')
公共字符串addBook(BookInfo bookInfo,String bookDesc,MultipartFile pictureFile,HttpServletRequest请求)引发异常{
uploadPicture(bookInfo,pictureFile,request);
bookinfoservice。保存图书(bookInfo,book desc);
返回”重定向:/admin/book/list”;
}
/**
* 书籍列表
*
*/
@RequestMapping(value='/list ')
@需要任务('图书查询')
公共字符串bookList(@ request param(默认值=' ',必需=false)字符串关键字,
@RequestParam(value='page ',defaultValue='1 ',required=false) int page
HttpSession会话,
模型模型){
关键词=关键词。trim();
Store Store=(Store)会话。get属性(“登录存储”);
如果(商店!=null) {
pagenfobookinfo books=bookinfoservice。findbooklistbycondition(关键字,0,页面,10,存储。getstoreid());
模型。添加属性('图书页面信息',图书);
model.addAttribute('keywords ',关键字);
}否则{
model.addAttribute('exception ','您请求的资源不存在');
返回"异常";
}
返回"管理/书籍/列表";
}
/**
* 更新页面回显
*
* @param bookId
* @param模型
* @返回
* @抛出异常
*/
@RequestMapping('/echo ')
@需要任务('图书-编辑')
公共字符串echo(int bookId,Model model)引发b异常{
BookInfo BookInfo=bookinfoservice。adminfindbyid(bookId);
图书desc图书desc=图书desc制图。selectbyprimarykey(bookinfo。getbookid());
model.addAttribute('bookInfo ',图书信息);
model.addAttribute('bookDesc ',图书desc);
返回"管理/预订/编辑";
}
@RequestMapping('/update ')
@需要任务('图书-编辑')
公共字符串updateBook(BookInfo bookInfo,String bookDesc,String keywords,MultipartFile pictureFile,HttpServletRequest request,RedirectAttributes ra)引发异常{
uploadPicture(bookInfo,pictureFile,request);
BookInfo原始图书=bookinfoservice。查找byid(BookInfo。getbookid());
bookinfoservice。更新图书(bookInfo,图书desc);
//更新图片后,删除原来的图片
字符串实路径=请求。getservletcontext().获取真实路径('/');
文件上传pic=新文件(真实路径原点书。getimageurl());
上传图片。delete();
//重定向到书籍列表
ra.addAttribute('keywords ',关键字);
返回”重定向:/admin/book/list”;
}
@请求映射('/deletion/{ bookId } ')
@需要任务('预订-删除')
公共字符串删除(@ path变量(' bookId ')int bookId,String关键字,RedirectAttributes ra,HttpServletRequest请求)引发b异常{
图书信息图书信息=图书信息服务。查找byid(bookId);
字符串实路径=请求。getservletcontext().获取真实路径('/');
文件上传pic=新文件(真实路径bookinfo。getimageurl());
上传图片。delete();
bookinfoservice。删除图书(bookId);
ra.addAttribute('keywords ',关键字);
返回”重定向:/admin/book/list”;
}
@RequestMapping('/shelf ')
@ RequiresPermissions('书架)
public String bookOffShelf(int bookId,int isShelf,String keywords,RedirectAttributes ra) {
bookinfoservice。changeshelfstatus(bookId,ISS helf);
ra.addAttribute('keywords ',关键字);
返回”重定向:/admin/book/list”;
}
私有void上传图片(图书信息图书信息,多文件图片文件,HttpServletRequest请求请求)引发IOException {
if (pictureFile!=null) {
如果(!字符串实用程序。isempty(picturefile。getoriginalfilename()){
字符串实路径=请求。getservletcontext().获取真实路径('/' URL前缀);
//原始文件名称
字符串图片文件名=图片文件。get original filename();
//新文件名称
string new filename=idutils。genshortuuid()picturefilename。子字符串(picturefilename。lastindexof(' . '));
//上传图片
File uploadPic=新文件(真实路径文件。分隔符新文件名);
//向磁盘写文件
图片文件。transferto(uploadPic);
图书信息。设置imageurl(URL前缀文件。分隔符新文件名);
}
}
}
}
书信息控制层:
@控制器
@RequestMapping('/book ')
公共类BookInfoController {
@自动连线
私有IBookInfoService bookInfoService;
@自动连线
私有图书描述映射器
/**
* 查询某一本书籍详情
*
* @param bookId
* @param模型
* @返回
*/
@请求映射('/info/{ bookId } ')
公共字符串图书信息(@ path变量(' bookId ')整数bookId,模型模型)抛出b异常{
//查询书籍
图书信息图书信息=图书信息服务。查找byid(bookId);
//查询书籍推荐列表
ListBookInfo推荐书目list=bookinfoservice。findbooklistbycateid(bookinfo。getbookcategoryid(),1,5);
//查询书籍详情
图书desc图书desc=图书desc制图。selectbyprimarykey(bookId);
//增加访问量
bookinfoservice。addlookmount(book info);
收藏。shuffle(推荐书单);
model.addAttribute('bookInfo ',图书信息);
model.addAttribute('bookDesc ',图书desc);
模型。添加属性('推荐书目',推荐书目);
返回”book _ info”;
}
/**
* 通过关键字和书籍分类搜索书籍列表
*
* @param关键字
* @返回
*/
@RequestMapping('/list ')
公共字符串bookSearchList(@ request param(默认值=' ',必需=false)字符串关键字,
@RequestParam(defaultValue='0 ',required=false) int cateId,//分类Id,默认为0,即不按照分类身份查
@RequestParam(defaultValue='1 ',required=false) int page
@RequestParam(defaultValue='6 ',required=false) int pageSize,
模型模型){
关键词=关键词。trim();
pagenfobookinfo book paginfo=bookinfoservice。findbooklistbycondition(关键字,cateId,页面,页面大小,0);//storeId为0,不按照商店身份查询
模型。添加属性('图书页面信息',图书页面信息);
model.addAttribute('keywords ',关键字);
model.addAttribute('cateId ',cateId);
返回”图书_列表”;
}
}
用户管理控制层:
@控制器
@RequestMapping('/user ')
公共类用户控制器{
@自动连线
私有IUserService用户服务;
@自动连线
私有IMailService邮件服务;
@自动连线
私有IStoreService商店服务
@Value('${mail.fromMail.addr} ')
私有字符串来自;
@Value('${my.ip} ')
私有字符串IP;
私有最终字符串用户名密码不匹配='用户名或密码错误;
私有最终字符串USERNAME_CANNOT_NULL='用户名不能为空;
@RequestMapping('/login ')
公共字符串登录(@RequestParam(value='username ',required=false)字符串用户名,
@RequestParam(值='密码',必需=假)字符串密码,
HttpServletRequest请求,模型模型){
if (StringUtils.isEmpty(用户名)|| StringUtils.isEmpty(密码)){
返回"登录";
}
//未认证的用户
subject用户subject=安全实用程序。get subject();
如果(!用户主题。已验证()){
usernamepasswortoken=new usernamepasswortoken(用户名,密码);
令牌。setrememberme(false);//禁止记住我功能
尝试{
//登录成功
用户主题。登录(令牌);
用户登录用户=(用户)用户主体。get principal();
request.getSession().setAttribute('loginUser ',登录用户);
商店商店=商店服务。findstorebyuserid(登录用户。get userid());
request.getSession().setAttribute('loginStore ',store);
保存的请求保存的请求=web实用程序。getsavedrequest(请求);
字符串URL='/';
if (savedRequest!=null) {
URL=保存的请求。getrequesturl();
如果(网址。包含(请求。getcontextpath()){
URL=URL。替换(请求。getcontextpath(),' ');
}
}
if(字符串实用程序。isempty(URL)| | URL。等于('/favicon。ico '){
URL='/';
}
返回“重定向:”网址;
} catch(UnknownAccountException | IncorrectCredentialsException UAE){
model.addAttribute('loginMsg ',USERNAME _ PASSWORD _ NOT _ MATCH);
返回"登录";
} catch(LockedAccountException lae){
model.addAttribute('loginMsg ','账户已被冻结!');
返回"登录";
} catch(AuthenticationException AE){
model.addAttribute('loginMsg ','登录失败!');
返回"登录";
}
}否则{
//用户已经登录
返回”重定向:/index”;
}
}
@RequestMapping('/info ')
公共字符串personInfo(){
返回"用户信息";
}
/* @RequestMapping('/login1 ')
公共字符串登录1(@ request param(value=' username ',required=false)字符串用户名,
@RequestParam(值='密码',必需=假)字符串密码,
模型模型,HttpServletRequest请求){
if(字符串实用程序。isempty(用户名)){
model.addAttribute('loginMsg ',USERNAME _ CANNOT _ NULL);
返回"登录";
}
if(字符串实用程序。isempty(密码)){
model.addAttribute('loginMsg ','密码不能为空');
返回"登录";
}
bs结果用户bs结果=用户服务。登录(用户名,密码);
//登录校验失败
if (bsResult.getData()==null) {
model.addAttribute('loginMsg ',bs结果。getmessage());
返回"登录";
}
//登录校验成功,重定向到首页
用户user=bs结果。get data();
//置密码为空
用户。设置密码(" ");
request.getSession().setAttribute('user ',用户);
返回"重定向:/";
}
*/
//四郎框架帮我们注销
@RequestMapping('/logout ')
@ cache evit(缓存名称='授权缓存',allEntries=true)
公共字符串注销(){
SecurityUtils.getSubject().logout();
返回”重定向:/page/登录”;
}
/**
* 注册检验用户名是否存在
*
* @param用户名
* @返回
*/
@请求映射('/检查用户是否存在')
@ResponseBody
公共BSResult checkUserExist(字符串用户名){
if(字符串实用程序。isempty(用户名)){
返回BSResultUtil.build(200,USERNAME_CANNOT_NULL,false);
}
返回用户服务。checkuserexistbyusername(用户名);
}
/**
* 注册,发激活邮箱
*
* @param用户
* @返回
*/
@RequestMapping('/register ')
公共字符串寄存器(用户用户,模型型号){
bs结果为exist=检查用户存在(用户。get username());
//尽管前台页面已经用创建交互式、快速动态网页应用的网页开发技术判断用户名是否存在,
//为了防止用户不是点击前台按钮提交表单造成的错误,后台也需要判断
如果存在((布尔值)。获取数据()){
用户。设置活动(“1”);
bs结果bs结果=用户服务。保存用户(用户);
//获得未激活的用户
用户用户活动=(用户)bs结果。get data();
/*尝试{
邮件服务。sendhtmlmail(用户。getemail(),' dd书城-用户激活- ',
html bodya href=' http://' IP '/user/active?活动代码='用户不活动。获取代码()' '亲爱的user.getUsername()
,请您点击此链接前往激活/a/body/html ');
} catch(异常e) {
e。printstacktrace();
模型。添加属性('注册错误','发送邮件异常!请检查您输入的邮箱地址是否正确。');
返回"失败";
}*/
model.addAttribute('username ',用户。get username());
返回注册_成功';
}否则{
//用户名已经存在,不能注册
模型。存在添加属性(“注册错误”)。getmessage());
返回"注册";
}
}
@RequestMapping('/active ')
公共字符串主动用户(字符串activeCode,模型型号){
bs结果bs结果=用户服务。活动用户(活动代码);
如果(!字符串实用程序。isempty(bs结果。获取数据()){
model.addAttribute('username ',bs结果。get data());
返回”活动_成功”;
}否则{
模型。添加属性(“失败消息”,bs结果)。getmessage());
返回"失败";
}
}
@RequestMapping('/update ')
@ResponseBody
公共BSResult更新用户(用户用户,HttpSession会话){
用户登录User=(用户)会话。get属性(“登录用户”);
登录用户。设置昵称(用户。获取昵称());
登录用户。设置位置(用户。get location());
登录用户。设置详细地址(用户。获取详细地址());
登录用户。设置性别(用户。getgender());
登录用户。set updated(new Date());
登录用户。设置电话(用户。get phone());
登录用户。设置身份(用户。get identity());
登录用户。设置电话(用户。get phone());
bs结果bs结果=用户服务。更新用户(登录用户);
会话。设置属性(“登录用户”,登录用户);
返回bsResult
}
@请求映射('/password/{ userId } ')
@ResponseBody
公共bs结果更改密码(@ path变量(' userId ')int userId,String oldPassword,String newPassword){
if(字符串实用程序。isempty(旧密码)| |字符串实用程序。isempty(新密码)){
返回BSResultUtil.build(400,' 0密码不能为空');
}
返回用户服务。compareandchange(userId,oldPassword,new password);
}
}
到此这篇关于Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)实战网上电子书城的实现流程的文章就介绍到这了,更多相关Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)网上电子书城内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。