科学技术学院

SCIENCE & TECHNOLOGY COLLEGE OF

NANCHANG UNIVERSITY

 《工 练》报

   REPORT ON ENGINEERING TRAINING

题   目 基于Java的程序开发训练

学科部、系: 信息学科部计算机系

专业班级:计算机科学与技术172

学   号:7020817074

学生姓名:温鑫

指导教师: 邓伦丹  熊婷  孙孟标

起讫日期:2019.12.30 —— 2020.01.10

Java开发技术工程训练报告

实验名称:

基于Java的程序开发训练

实验目的:

本次工程训练通过《Java开发技术》课程的学习,掌握Java程序的基本设计方法;综合应用Java编程技巧,使用有关图形界面的编程方法以及SpringBoot分布式框架技术,和目前流行的mybatis框架,maven项目管理工具等技术完成简单京东商城项目的实现。从项目中即学即用知识,了解目前主流的JAVA开发框架,熟悉技能的运用。

实验需要的设备、工作环境:

一台目前实验室使用的计算机,要安装以下软件:

(1) 中文版Windows 7或以上系统;

(2) JDK 1.8 或以上版本;

(3) 任一Java编程工具,如IDEA等。

(4) 数据库管理系统软件,如Oracle等。

实验内容:

(1)使用springboot、mybatis、maven等开发者工具对分布式电商项目进行搭建与管理。

(2)使用web编程技术,实现了网上京东商城项目的用户注册、验证码发送、分页模块。

需求分析:

目前主流的电商平台,如淘宝、天猫、京东等都拥有强大的线上电商分布式系统,能够完成用户注册、验证码发送、数据库内商品信息分页显示、用户能够加车、下单、支付。

技术选型:JDK1.8  SpringBoot 2.2.2  mybatis 3.4.6  maven 3.5  druid 1.1.9

数据库:Oracle 11g

开发工具:IDEA2019

实验步骤和操作(源程序):

(1)Controller层UserController代码:

package com.exam.jdndky.controller;
import com.exam.jdndky.model.ResultEnt;
import com.exam.jdndky.model.User;
import com.exam.jdndky.service.UserService;
import com.exam.jdndky.util.SendMessageUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;
import java.util.Map;
@Controller         //标记控制层
@RequestMapping(value="/user")
public class UserController {
    //控制层,先要调用Service
   
@Autowired
    public UserService;

@RequestMapping("/toReg")
    public String toReg(User u, Model model){
        /*
            User u
是须要从reg.html页面传入的用户名,密码
            Model只须要把界面上输入框中的用户名密码,对应到User类属性名就可以自动传值
         */
       
userService.insert(u);//注册
       
return "redirect:/user/login";
    }
    @RequestMapping("/login")
    public String login(){
        return "login";
    }
    @RequestMapping("/toLogin")
    public String toLogin(User u,Model model){
        ResultEnt re=userService.login(u);
        if(re.getCode()==200){//成功succ
           
return "redirect:/goods/list0";
        }else{
            return "login";
        }

}
    /*
       
直接使用UserService,不用再实例化UserServiceImpl
     */
   
@RequestMapping("/reg")
    public String regTel(){//方法名自己取
       
return "regTel";//直接指向template下的HTML
   
}

@RequestMapping("/sendCode")
    @ResponseBody
    public Object sendCode(HttpServletRequest request){//Object是因为此方法中我们要把验证码发送到regTel
        //
先取界面上输入的手机号
       
String tel=request.getParameter("tel");
        //得到验证码
       
String code=SendMessageUtil.getRandomCode(6);
        //发送短信
        
int mcode=SendMessageUtil.send("zgycsmb",
                "d41d8cd98f00b204e9801", tel,code);
        //发送状态
       
String message=SendMessageUtil.getMessage(mcode);
        //把发送状态传出
       
Map<String,Object> map=new HashMap<>();
        map.put("code",code);
        map.put("message","注册验证码"+message);
        return map;
    }
    @RequestMapping("/reg2")
    public String reg2(){
        return "reg";
    }
}

(2)Controller层GoodsController代码:

package com.exam.jdndky.controller;import com.exam.jdndky.dao.GoodsDao;import com.exam.jdndky.service.GoodsService;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.ui.ModelMap;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestParam;import org.springframework.web.bind.annotation.ResponseBody;import org.springframework.web.servlet.ModelAndView;@Controller@RequestMapping("/goods")public class GoodsController {@Autowiredpublic GoodsService;@Autowiredpublic GoodsDao;@ResponseBody@RequestMapping("/list0")public ModelAndView goodsList(ModelMap map,@RequestParam(name = "pageNum", required = false, defaultValue = "1")int pageNum,@RequestParam(name = "pageSize", required = false, defaultValue = "8")int pageSize,Model model) {ModelAndView modelAndView=new ModelAndView("list0","goodsList",goodsService.findAllGoods(pageNum,pageSize));return modelAndView;}}

(3)Service层UserService代码

package com.exam.jdndky.service;import com.exam.jdndky.model.Goods;import com.github.pagehelper.PageInfo;//Service不需要标记,不是每个项目都有的业务public interface GoodsService {//pageHelper分页需要两个参数 :  共有多少页    每页多少条记录//很多商品按分页的模板进行PageInfo<Goods> findAllGoods(int pageNum, int pageSize);}

(4)Service层UserServiceImpl代码

package com.exam.jdndky.service;import com.exam.jdndky.dao.GoodsDao;import com.exam.jdndky.model.Goods;import com.github.pagehelper.PageHelper;import com.github.pagehelper.PageInfo;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;import java.util.List;@Service(value = "GoodsService")public class GoodsServiceIpml implements GoodsService{@Autowiredpublic GoodsDao;@Overridepublic PageInfo<Goods> findAllGoods(int pageNum, int pageSize) {//pageHelper会先为分页建立一个架子,比如 共有10页,每页8条PageHelper.startPage(pageNum,pageSize);List<Goods> goods= goodsDao.selectAllGoods();//dao中查到所有的商品//目前查到的所有的商品都是放到goods中,还没有和分页关联//现在要和分页关联起来:把goods传入到PageInfo中PageInfo<Goods> re=new PageInfo<>(goods);return re;}}

(5)Service层GoodsService代码

package com.exam.jdndky.service;import com.exam.jdndky.model.ResultEnt;import com.exam.jdndky.model.User;public interface UserService {//负责业务,只是调用dao 返回类型不同//service方法的返回类型要结合业务ResultEnt 200正常,201不正常public ResultEnt insert(User u);public ResultEnt login(User u);}

(6)Service层GoodsServiceImpl代码

package com.exam.jdndky.service;import com.exam.jdndky.dao.UserDao;import com.exam.jdndky.model.ResultEnt;import com.exam.jdndky.model.User;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Service;@Service(value = "userService")public class UserServiceImpl implements UserService{@Autowiredpublic UserDao;public ResultEnt resultEnt;//此类不需要装载//注册,其实就是插入public ResultEnt insert(User u){int toReg=userDao.insertUser(u);//如果操作数据库成功,insert语句会>0if(toReg>0){//成功resultEnt=new ResultEnt(200,"succ");}else{resultEnt=new ResultEnt(201,"false");}return resultEnt;}@Overridepublic ResultEnt login(User u) {User login=userDao.login(u);if(login!=null){//成功resultEnt=new ResultEnt(200,"succ");}else{resultEnt=new ResultEnt(201,"false");}return resultEnt;}}

(13)mapper文件GoodsMapper.xml代码

<?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.exam.jdndky.dao.GoodsDao" >
<select id="selectAllGoods" resultType="com.exam.jdndky.model.Goods">
select id,type,title,price,imgURL,manufacturer,evaluate from o_goods</select>

</mapper>

(14)mapper文件UserMapper.xml代码

<?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.exam.jdndky.dao.UserDao" >
<insert id="insertUser">
<selectKey keyProperty="id" resultType="java.lang.Integer" order="BEFORE">
select o_user_seq.nextval from dual</selectKey>
insert into o_user(id,userName,pass) values(#{id},#{userName},#{pass})</insert>
<select id="login" parameterType="com.exam.jdndky.model.User" resultType="com.exam.jdndky.model.User">
select * from o_user where userName=#{userName} and pass=#{pass}</select>

</mapper>

(15)实现验证码发送的JavaScript代码

<script>$("#telCode").bind('click',show);//id名为telCode的元素,绑定事件,当单击时,就调用showfunction show() {//val()取框的值if($("#tel").val().length==11){var telNum=$("#tel").val();/*1 要发送到的服务器端的响应路径    类似于/user/xy/user/sendCode等下我们要controller上,通过映射去接收
2 本页面要付出的电话
3 要从服务器端收回的值
4 json 是一种数据传输格式
*/$.post("/user/sendCode",{"tel":telNum},function (response) {if (response.message){//message是短信发送状态alert(response.message);}if (response.code){//code到时在服务器端设置$("#codeHide").val(response.code);}},"json");//处理按钮$("#telCode").unbind('click');//接触点击$("#telCode").addClass('disabled');//给个样式不可用//倒计时var count=60;//定时调用var timer=setInterval(function () {$("#telCode").html(count+"s");count--;if(count<=0){clearInterval(timer);$("#telCode").html("获取验证码");$("#telCode").removeClass('disabled');$("#telCode").bind('click',show);}},1000);}else{alert("请输入正确的手机号码");}}</script>

(16)项目启动类JdndkyApplication代码

package com.exam.jdndky;import org.mybatis.spring.annotation.MapperScan;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication@MapperScan("com.exam.jdndky.dao")public class JdndkyApplication {public static void main(String[] args) {SpringApplication.run(JdndkyApplication.class, args);}}

实验结果(运行截图):

(1)springboot项目启动运行截图:

(2)/user/reg页面运行截图:

(3)/user/reg2页面截图:

(4)用户注册成功并进入/user/login页面截图:

(5)用户登录成功进入/goods/list0页面截图:

(6)商城商品分页展示截图:

实验总结与建议(必须手写,200字以上):     

工程训练成绩评定表

专业:计算机科学与技术 班级: 计算机172  学号:7020817074 姓名:温鑫

指导教师评语

建议成绩:                        指导教师:

年     月     日

教研组评定意见

评定成绩:                        负责人:

年     月     日

南大科院Java工程实训相关推荐

  1. 南大科院大数据Hadoop工程实训

    科学技术学院 SCIENCE & TECHNOLOGY COLLEGE OF NANCHANG UNIVERSITY  <工 程 训 练>报 告    REPORT ON ENGI ...

  2. 【南大科院】高级网络服务工程训练

    密级: 科学技术学院 NANCHANG UNIVERSITY COLLEGE OF SCIENCE AND TECHNOLOGY 计算机系工程训练报告 <高级网络服务工程训练> (2019 ...

  3. Java企业实训 - 01 - Java前奏

    前言: 虽然个人专攻.NET方向,不过由于个人是干教育行业的,方方面面的东西,不能说都必须精通,但肯定多少都会涉及到. 一个菜鸟学员,从啥都不会,经过一步步学习,最后到企业上手掌管一个模块甚至一个项目 ...

  4. Java第一次实训报告

    Java第一次实训报告 项目(GUI学生信息管理系统) 一.创建数据库和表 1.利用NaviCat创建数据库student,设置字符集为utf8 1.1数据库和表的目录 2.创建学校表 2.1创建t_ ...

  5. 2021年计算机保研经历:人大信院、南大软院、华师数据院、厦大软件、湖大信院【7000字详细介绍】

    今年准备保研期间,我在网上看了许多保研经验贴,受益匪浅. 如今尘埃落定,那么我也将自身经历详细写出,希望对学弟学妹们能有所帮助.(如果觉得有用就点个赞吧~) 我最后去人大信院了,欢迎今年保研人大的同学 ...

  6. 接鸡蛋java_信息与传媒系举办17级计算机应用技术java专项实训汇报

    原标题:信息与传媒系举办17级计算机应用技术java专项实训汇报 7月6日,信息与传媒系在3-333教室召开17级计算机应用技术"java专项实训汇报会",此次汇报由陈娅冰老师主持 ...

  7. java迷宫实训报告_Java综合实训报告-迷宫.doc

    Java综合实训报告-迷宫 目 录 1.需求分析2 2.概要设计2 2.1功能图3 2.2系统流程图4 3.详细设计4 3.1类关系图5 3.2类设计图5 类Maze5 类MazeGrid6 3.3主 ...

  8. java质数和合数的程序_《java项目实训》课程设计计算器.doc

    <java项目实训>课程设计计算器.doc 课程设计报告课程名称JAVA项目实训课程设计设计名称基于JAVA计算器的设计与实现学生学号学生姓名学生学号学生姓名学生学号学生姓名学生学号学生姓 ...

  9. 考研 | 一战南大软院险进复试后失利被刷,调剂国科大杭高院荣幸上岸

    从2020年7月23日暑假正式进入考研复习状态至2021年4月12日接到国科大杭高院录取通知,这场长达8个月的考研"初试+复试"的拉锯战终于告一段落,目前也或多或少和导师以及学长学 ...

最新文章

  1. 自已写的几个分页的存储过程
  2. svn 自动同步到web站点目录post-commit.bat
  3. Swift学习笔记_数据类型_整数类型
  4. web前端开发技术现状与发展_Web前端开发的未来,将会有哪些发展方向?
  5. Nginx之开门见山
  6. php网页示例,新手入门:初学动态网页PHP的18个例子
  7. android 工具 lve,Android Studio 4.0 新功能中的Live Layout Inspector详解
  8. linux下加载ISO镜像的方法
  9. java带参数的构造方法_java练习本(20190603)
  10. 将World中的向下箭头替换为回车符
  11. coreldraw2022(CDR 2022)中文新增更新内容介绍win/mac
  12. 联想小新Pro 13新款笔记本电脑获TUV莱茵低蓝光认证
  13. 微信小程序加入购物车效果动画
  14. python验证码生成器_用Python实现随机验证码
  15. 个人免签约支付系统,收款就是这么简单
  16. 双臂二指魔方机器人的制作(三)--还原控制
  17. python 外星人游戏下载大全_【Python】Python制作外星人入侵小游戏
  18. 初始阈值计算机网络,计算机网络试题A计算机网络试题A.doc
  19. php表单页面防重复提交方法总结
  20. 大学生计算机专业运动会方队,大学生--运动会入场式方队解说词

热门文章

  1. GCC背后的故事OpenCV相识何必曾相逢
  2. offer选择:创业公司 VS 大厂外包
  3. Linux--管理LVM的逻辑卷--原理+命令实操(LVM扩容+磁盘配额)
  4. 2021年流动式起重机司机考试题及流动式起重机司机证考试
  5. 司科水果o2o_水果o2o系统_生鲜配送水果o2o系统开发
  6. STC8H单片机I2C协议驱动OLED 的困惑
  7. 挖藕!模拟sql抓取qq密码
  8. 【虚幻引擎】UE4/UE5 材质
  9. [Java]利用jsoup爬取易查分
  10. 目前最好用的洞洞板布线软件LochMaster-ver.4.0