项目教学:唐诗网站及讲述时应注意点

 作者:金庭波

目的:(1)让学生实际体验软件工程的步骤;
           (2)灌输计算机语言是管理学的描述语言的理念;理解编程模式,实际上是管理模式在编程上的体现;
           (3)学会SpringBoot+jsp的整合及解决整合过程中出现的若干问题;
           (4)掌握MVC代码的写作方法,及在代码写作过程中出现的若干问题;
           (5)体验同学之间的互帮互学的良好氛围。
             (6)  本讲要实现前端提交一首唐诗的标题,后端查询数据表,返回唐诗内容到前端显示出来的效果 

第一步:系统分析,目的是得到数据表。
        此处要讲清楚数据的结构是如何从纷繁复杂的一大推数据中提炼出来的,注意不要讲得那么学术化,要用学生能理解的思路和语言进行讲述和比喻。

第二步:根据数据表得到pojo。
        pojo就是传说中的实体类,比如学生类,老师类。
(1)直接了当的告诉学生,pojo中类的属性,与表中的字段相对应,表中有什么,你pojo中就有什么;
(2)在此时可以讲述注解是什么? 注解,中国话叫“打标记”,外国话叫注解。可以用lombok为例,讲述如何使用,比如在pom.xml中添加lombok依赖(所谓添加依赖就是利用别人的成果);比如如何给lombok进行“打标记”(注解),用什么单词去“打标记”(注解)。由此进一步讲注解应该可以写在什么地方?(类上,方法上,参数前);
(3)讲述注解与主类上的@SpringBootApplication注解的关系。

    你打了标记,谁来认这个标记?是主类(main方法所在的那个类)。 主类它是不会主动去认那些标记的哦!必须在主类上添加了@SpringBootApplication,它才去扫描那些标记。 扫描之后呢?就把它们放在一个你看不到的内存之中,以后你要使用它,就可以用@Autowird或@Resource这样的注解把它取出来。取出来的是什么?是对象,此处应说明,以前我们建对象,是用new来建的,现在居然不用new来建,而是从“扫描堆”里取出来,可见写程序的方法不是唯一的哦!

第三步:写dao接口和dao的实现。 
    有人可能认为:程序应该从前端开始写起啊 ?怎么一上来就是写dao呢? 其实你从前端写起也是一样,这只是习惯而己。
    dao接口里写得就是对数据表的增删改查;
    此处要讲清楚的是,dao的实现它是一个xml文件,这和平时我们学习java理论时不一样,java理论告诉我们,一个接口的实现是一个类,而它是一个xml文件,奇怪吧? 正是因为有不同的写法,java才变得丰富多采,生机勃勃!
    这个文件的位置是由SpringBoot的配置文件决定的,此时就可介绍SpringBoot的两种配置文件:application.properties和application.yml。
    在对dao的xml文件进行介绍时,要注重这样几点:
  (1)这个文件的文件名,要与dao接口的文件名相同,这个没有哪本书上提到,只能靠师傅言传;
  (2)这个文件的内容一般是从其它地方拷贝粘贴过来的,所以你对它进行修改主要位置是namespace,paramaType,resultType,sql语句中的表名、字段名等。很多人的出错就在这里。
    此处要给学生讲述 java 、mybatis 、mysql之间的关系; 它们分别是不同公司的产品,所以要用配置来协调它们工作。java是通过mybatis操作mysql的,所以mybatis是以后学习的重点,也可以告诉学生,这个xml文件也可以认为它就是一个协调它们工作的配置文件。
   (3)要在这里介绍@Mapper注解和@MapperScan的联系。
        @Mapper注解的作用是:让主类上的@SpringBootApplication能扫描到dao包中当前接口,并将它实例化。
        @MapperScan注解的作用是一个偷懒的办法。当你的dao中接口很多时,每个接口上都要用@Mapper,就显得很麻烦,所以就在主类上添加一个@MapperScan集中统一扫描某一个包中的接口,这样省事。比如:
        @MapperScan("com.example.jsp05.dao")  
        就是集中统一扫描com.example.jsp05.dao这个包中的所有接口的意思。
        问题是,有时候@MapperScan()它不起作用,可能因为网速,或者是电脑运行速度慢或其它未知原因。这里你就直接在dao接口上添加@Mapper。实践证明,@Mapper要比用@MapperScan靠谱一些。
主类参考代码如下:
@SpringBootApplication
@MapperScan("com.example.jsp05.dao")  //有这一句,就不要在dao上添加@Mapper了,如果没有就必须在dao上添加@Mapper
public class Jsp05Application {
    public static void main(String[] args) {
        SpringApplication.run(Jsp05Application.class, args);
    }


接口参考代码如下:
@Mapper
public interface EnglishMapper {
    List<EnglishPojo> queryAll();
}


第四步:写服务接口和服务接口的实现。 
    服务的接口中主要就是写增删除改查
    服务接口的实现中要用@Autowird和@Resource注入dao对象;然后调用dao的增删除改查方法;
    服务接口上什么都不添加,服务的实现上面要添加@Service;
    @Autowird 和 @Resource注解,后面的一个比前面的一个靠谱; 

第五步:写控制器。
    控制器起着一个承上启下的作用,它要把前端的请求传到后端去,也要把后端的结果返回到前端。
    此处要讲述的注解是:@Controller,@RequestMapping,@PathVariable和Model的作用;
    @Controller : 把一个普通的类变成一个控制器类,相当于把一个普通员工提拔为干部;
    @RequestMapping : 处理来自于哪里的请求。 这就跟财务收费员一样,某个收费员只负责收来自九江地区学生的费用。
    @PathVariable : 它是把网址后面的数据接收下来;
    Model : 它相当于前端与后端连接在一起的要根电话线,只要后端把数据往这样电话线上一放,前端就可以用el表达式读到了。
    很多学生受前端课程的影响,以为a.jsp的<a>命令可以直接跳转到b.jsp网页。 这样的想法是错误的, a.jsp想跳转到b.jsp是必须通过控制器去转的,比如你输入http://locahost:8080这个网址,如果不写控制器,它是找不到网址首页的,会报404错误;为什么呢?就是因为这个来自根目录的请求,没有谁帮你去处理,即没有相应的”收费员“一样的。你必须这样给他添加一个处理根请求的代码:
@Controller
public class HelloController {
    @RequestMapping("/")
    public String getRoot(){
        return "index";
    }

这样它才可以把首页文件显示出来。
    此处要用管理学的思路讲述MVC的概念,向学生灌输计算机语言其实是管理学的描述语言。
    

第六步:写前端网页
    (1)jsp模板
    注意controller的跳转与jsp的提交请求的路经是有很大关系的,特别是同样的菜单在子网页中提交时,它会自动添加一个当前语言件夹,这样就不能让菜单通用化,所以jsp的模板一定要采用以下模板:
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<%
String path = request.getContextPath();
String basepath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
%>
<html>
<head>
<base href="<%=basepath %>"/>
<meta charset="utf-8"/>
<title>Insert title here</title>
</head>
<body>
<a href="stIndex">st首页</a>
<a href="engIndex">Eng首页</a>
</body>
</html>
        这里的关键是<base href="<%=basepath %>"/>,它的意思是说,以后提交的网址,都是以这个为基准。不然你在模板中再写<a></a>命令时,它会在下层请求的前面添加自己文件夹。
        idea默认的模板是相对路经:它没有对本页绝对路经的计算。
<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8" %>
<html>
<head>
<meta charset="utf-8"/>
<title>Insert title here</title>
</head>
<body>
<a href="stIndex">st首页</a>
<a href="engIndex">Eng首页</a>
</body>
</html>
    (2)这里主要介绍el表达式;

第八步:稳打稳扎。
        一定要让学生将上面MVC写代码的套路做会,人人过关,课堂上开展互帮互学,调动学生积极性,不要急于讲其它内容,当学生能做出效果,能排除错误后,让学生再仿写一个同类型的。比如从学生表读取学生信息返回到前端显示出来的情况;

第九步:进阶
        在此进阶中,要带学生从一个英文单词表中返回所有的单词的情况。要把所有的单词全部返回,如何去请求?如何去查询?mybatis语句如何写?查询的结果如何存放在List之中?此List又如何返回到服务?服务又如何返回到控制器?控制器又如何返到前端?前端又如何用 jstl 语言循环出来的? 围绕这些问题进行讲述,每讲一步,都要检查学生跟着做的情况,不能急。特别是大专生,接受能力差、自学能力差、摸仿能力差必须一小步一小步的讲述与确认。
(1)要使用jstl  必须添加 jstl的jar包,  所以pom.xml中有这样一个依赖
<!-- 添加jstl标签库依赖模块 -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
</dependency>

(2) :在要使用jsp的网页上,使用
<%@ taglib prefix="c" uri="Oracle Java Technologies | Oracle" %>
(3)在要循环的地方使用:
<c:forEach items="${englishs}" var="u" begin="0">
<tr>。。。</tr>
</c:forEach>

第九步:要求学生背,记下来上述编程步骤; 重点代码,这一点很关键很关键。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

庭博

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值