我们从网上下载一份代码学习,模拟如果在实际工作中,我们入职的时候会首先拿到一个不复杂但是技术比较老的项目,因为作为新人很难去直接参与大而且新的项目进行开发。
- 我们从网上搜一份代码,先下载下来,代码如下:
代码的地址:
https://url56.ctfile.com/f/34653256-665303764-679728?p=7567 (访问密码: 7567)
- 将数据库导入到我们本地
- 将项目导入到本地环境中
- 首先我们将项目拷贝到我们的工作开发环境中
- 在IDE中导入(Eclipse、MyEclipse、IDEA都可以)
然后
继续
项目出现在导航栏
- 改动数据库连接的地址
因为所有的项目一定会有数据库的地址配置,不管是用的那种框架。所以我们需要找到对应的文件进行更改。修改下面的数据库密码和账户为自己的数据库地址。
- 一般此时我们只要下载的项目没问题,就可以运行了,我们使用Tomcat作为应用服务器,但下载的这个项目需要做一下转换,将项目转换一下,转换的位置如下:
转换项目
转换完进行勾选
接下来更改一个目录
目录更改如下
添加到Tomcat应用服务器中
然后我们可以运行代码了,项目没有报错
我们在浏览器中进行访问就可以得到对应的项目
点击登录后如果出现连接不上,更换系统中的MySQL的连接包就可以。
- 创建数据库
CREATE TABLE `t_zztl` (
`pid` INT(11) NOT NULL AUTO_INCREMENT,
`xdata` VARCHAR(100) DEFAULT NULL,
`ydata` VARCHAR(100) DEFAULT NULL,
PRIMARY KEY (`pid`)
) ENGINE=INNODB AUTO_INCREMENT=11 DEFAULT CHARSET=utf8
- 创建实体类
- 模仿包里的文件,编写我们自己的实体类
创建实体类,名字模仿包里的文件,比如数据表交t_topic,会有两个文件分别叫TTopic.java和TTopic.hbm.xml这两个文件,我们也创建这两个文件。
- 模仿这两个文件完成里面的内容
先模仿第一个java文件
序列化和字段
这是这个实体对应的数据表创建语句,可以和上面的字段进行对应。,我们字段的类型和t_topic类似的有pid和author(所以我上面创建语句是按照这个项目里的形式创建的不是乱创建的,就是为了和它的字段匹配)
我们只有3个字段,所以字段会比较少,其中get/set字段自动生成。
多余的字段可以选择不写,但是t_topic中的字段也是少于TTopic.java中的字段?是因为只要包含数据库中的字段,可以在TTopic.java中写更多的属性是影响的。
TTopic.java里面有构造函数,我们也生成两个构造函数
自动生成一下,也可以自己写
后面没有了模仿的了,我们来看TTopic.hbm.xml。因为hbm.xml是hibernate的配置文件,所以要按照这个命名,如果你知道就直接写就可以了。
按照上图里的内容,我们做下面的更改
2、我们继续模仿DAO
先看我们的模仿文件TTopicDAO,先读这个文件。
根据这个文件的内容,我们需要写下面的部分
extends HibernateDaoSupport表示继承Hibernate的框架支持
private static final Log log = LogFactory.getLog(TTopicDAO.class);是表示日志的
然后就是字段属性
我们已经知道t_topic是有这样的字段
所以这些字段和数据库是有关系的
那么我们取字段也是按照数据表中的字段保留
继续模仿,下面这个在注释里写了什么都不做,但是我么可以通过名字和修饰符判断出来是要进行初始化的。
接下来这个方法从名字是看是要用来保存的,其中log.debug和log.error类似于system.out.println()使用来显示日志信息的,可以选择不要。只要更改实体就可以了。
更改后看一下
下面这个类似,表示的是删除
下面这个表示通过编号查询,所以有一个参数是id编号
我们把这两个复制过来进行改动
其中findById中一些内容注意
然后是下面的方法,这个可以理解为查询多个,多属性查询
这是更改后的,这个的用途可以理解为有多个字段查询的时候不需要单独一个个的写,比如通过xdata和ydata两个查询,就可以这个方法。
接下来的函数
这个函数通过名字我们就能知道这是通过属性或者字段去查询的,是单个属性字段。指定属性名和属性值的方式。
继续往后的函数
这个是通过某一个具体的属性完成的,我们只有三个属性,所以只需要写三个就可以了。但本质上是通过上面的属性名函数去查询的。
最后一个是查询所有的
这个是查询所有数据的,如果数据量不大可以使用,数据量大的话就不要使用了
接下来这几个函数涉及到
Hibernate的一些专业术语,我们如果对这个不感兴趣或者以后工作用不到,就模仿的写就可以了。这几个概念是持久状态,托管状态,瞬时状态。
我们直接模仿了
还有一个
这个可以理解为,获取实例对象。
- 模仿action包下的内容
创建我们的文件,这个地方有个习惯,大家起类名的时候进来要首字母大写,不要像这个系统这个样子。
然后看模仿类里的内容,这个action类似于controller层的作用,只不过比较简答,不那么复杂。
首先是继承类和主要属性
我们目前只有一个DAO,其中的属性和我们相关的目前只有pid 自动生成get/set方法
然后就是里面的方法,这个类主要处理的是页面过来的请求,那么我们目前只有一个请求,所以写一个方法就可以了。
上面这个方法带有view名称说明是个浏览作用的方法,我们选择模仿这个方法
更改之后就只有一个简单的成功值。
有一个问题,这个方法里并没有告诉我们返回的页面是哪个?所以还存在配置文件。
这个项目里有下面这几个配置文件。其它的可以自己看下,应该是不用我们做处理的。
struts.xml。
applicationContext.xml
在applicationContext.xml这个文件中我们可以知道,原来DAO和Action是需要配置的,所以我们将我们之前写过的类配置进来。
配置action和dao就可以了
先配置dao,这个位置不太要求,配置到上面框起来的部分,单独一行就可以了。
同理action也是如此。
其中property表示的是要注入的对象,就是这个注入的对象不需要你生成,框架帮你做了。一般也是配置文件里配置过的。
然后是struts.xml这个文件,这个里面就涉及到页面了。
下面就是我们要模仿的配置
我们配置的部分
根据这个配置我们需要创建一个JSP页面
内容呢,我们还是模仿其中一个JSP页面,此处我直接复制了。
然后我们运行查看一下我们的页面有没有问题
启动报错了,我们正好记录一下
错误信息
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.dao.TZztlDAO] for bean with name 'TZztlDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: com.dao.TZztlDAO
可以看到applicationContext.xml和TZztlDAO这个关键信息,我们去看看
还要改一个地方
还有个地方
还有一个错误
少配置了一个
如果发现总是报找不到文件的错误,可以查看Tomcat发布的位置中是不是没有生成编译的文件,我们目前遇到的问题是jar引入缺少一个导致的(如果没有遇到这个问题可以忽略)。
启动后我们访问地址查看一下
http://localhost:8080/bbs_anime/zztlview.action
测试结果:
- 模仿action包下的内容
创建我们的文件,这个地方有个习惯,大家起类名的时候进来要首字母大写,不要像这个系统这个样子。
然后看模仿类里的内容,这个action类似于controller层的作用,只不过比较简答,不那么复杂。
首先是继承类和主要属性
我们目前只有一个DAO,其中的属性和我们相关的目前只有pid 自动生成get/set方法
然后就是里面的方法,这个类主要处理的是页面过来的请求,那么我们目前只有一个请求,所以写一个方法就可以了。
上面这个方法带有view名称说明是个浏览作用的方法,我们选择模仿这个方法
更改之后就只有一个简单的成功值。
有一个问题,这个方法里并没有告诉我们返回的页面是哪个?所以还存在配置文件。
这个项目里有下面这几个配置文件。其它的可以自己看下,应该是不用我们做处理的。
struts.xml。
applicationContext.xml
在applicationContext.xml这个文件中我们可以知道,原来DAO和Action是需要配置的,所以我们将我们之前写过的类配置进来。
配置action和dao就可以了
先配置dao,这个位置不太要求,配置到上面框起来的部分,单独一行就可以了。
同理action也是如此。
其中property表示的是要注入的对象,就是这个注入的对象不需要你生成,框架帮你做了。一般也是配置文件里配置过的。
然后是struts.xml这个文件,这个里面就涉及到页面了。
下面就是我们要模仿的配置
我们配置的部分
根据这个配置我们需要创建一个JSP页面
内容呢,我们还是模仿其中一个JSP页面,此处我直接复制了。
然后我们运行查看一下我们的页面有没有问题
启动报错了,我们正好记录一下
错误信息
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.dao.TZztlDAO] for bean with name 'TZztlDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: com.dao.TZztlDAO
可以看到applicationContext.xml和TZztlDAO这个关键信息,我们去看看
还要改一个地方
还有个地方
还有一个错误
少配置了一个
如果发现总是报找不到文件的错误,可以查看Tomcat发布的位置中是不是没有生成编译的文件,我们目前遇到的问题是jar引入缺少一个导致的(如果没有遇到这个问题可以忽略)。
启动后我们访问地址查看一下
http://localhost:8080/bbs_anime/zztlview.action
测试结果:
- 模仿action包下的内容
创建我们的文件,这个地方有个习惯,大家起类名的时候进来要首字母大写,不要像这个系统这个样子。
然后看模仿类里的内容,这个action类似于controller层的作用,只不过比较简答,不那么复杂。
首先是继承类和主要属性
我们目前只有一个DAO,其中的属性和我们相关的目前只有pid 自动生成get/set方法
然后就是里面的方法,这个类主要处理的是页面过来的请求,那么我们目前只有一个请求,所以写一个方法就可以了。
上面这个方法带有view名称说明是个浏览作用的方法,我们选择模仿这个方法
更改之后就只有一个简单的成功值。
有一个问题,这个方法里并没有告诉我们返回的页面是哪个?所以还存在配置文件。
这个项目里有下面这几个配置文件。其它的可以自己看下,应该是不用我们做处理的。
struts.xml。
applicationContext.xml
在applicationContext.xml这个文件中我们可以知道,原来DAO和Action是需要配置的,所以我们将我们之前写过的类配置进来。
配置action和dao就可以了
先配置dao,这个位置不太要求,配置到上面框起来的部分,单独一行就可以了。
同理action也是如此。
其中property表示的是要注入的对象,就是这个注入的对象不需要你生成,框架帮你做了。一般也是配置文件里配置过的。
然后是struts.xml这个文件,这个里面就涉及到页面了。
下面就是我们要模仿的配置
我们配置的部分
根据这个配置我们需要创建一个JSP页面
内容呢,我们还是模仿其中一个JSP页面,此处我直接复制了。
然后我们运行查看一下我们的页面有没有问题
启动报错了,我们正好记录一下
错误信息
org.springframework.beans.factory.CannotLoadBeanClassException: Cannot find class [com.dao.TZztlDAO] for bean with name 'TZztlDAO' defined in ServletContext resource [/WEB-INF/applicationContext.xml]; nested exception is java.lang.ClassNotFoundException: com.dao.TZztlDAO
可以看到applicationContext.xml和TZztlDAO这个关键信息,我们去看看
还要改一个地方
还有个地方
还有一个错误
少配置了一个
如果发现总是报找不到文件的错误,可以查看Tomcat发布的位置中是不是没有生成编译的文件,我们目前遇到的问题是jar引入缺少一个导致的(如果没有遇到这个问题可以忽略)。
启动后我们访问地址查看一下
http://localhost:8080/bbs_anime/zztlview.action
测试结果:
完成的练习代码:
https://url56.ctfile.com/f/34653256-688423125-6383b2?p=7567 (访问密码: 7567)
- 要访问我们创建表的入口action获取所有的数据(简化写法不分页)
根据下面我们模仿的类,我们需要查询所有的数据
我们把代码复制过去,然后进行查询
先改动SQL语句,因为我们只有两个字段,所以写的内容较少。
改动使用的DAO
然后改动生成对象存放在列表中
最后将数据返回到页面里
找到我们的页面view.jsp,在之前测试的地方存放我们的数据
我们去网上复制一份表格table拿过来使用
样式的部分我们自己复制一份就可以,如果不想复制就用我的,我的也是复制的。
我们用一个简单的表先放在这
运行看一下表格是否成功
虽然很丑但是数据来了(样式是否好看需要美工和前端工作的小伙伴帮大家,如果你自己写也可以的)
看一下我们的数据是不是过来了,先完成代码
然后我们去数据库中随便插入几个数据
我们接下来刷新下页面,会发现数据已经从数据库到页面了,完了我们的目标。
完成的练习代码:
https://url56.ctfile.com/f/34653256-688423186-a14ae2?p=7567 (访问密码: 7567)
- 我们想要完成一个删除的操作
首先要在页面上出现一个删除的按钮
在view.jsp中更改
改完删除之后,需要在页面上点击删除后向后台服务器查询数据,所以第一时间我们就想到了超链接。
其中href中需要添加一个请求地址,那么我们先空下,然后我们去后台完成这个地址,准备接收删除的请求。
首先还去对应的Action中编写方法。老样子先模仿已经有的Action
我们把这一段拿出来,放到我们自己的action中,进行修改。
先改Sql语句,其中delete from 是sql语句,pid的来源是在action的成员变量中接收到的。但是表名用的TZztl,为什么不是t_zztl,因为我们使用的框架Hibernate会帮我们进行转换。
这一句是Hibernate提供的操作,不需要我们自己写JDBC。
在topicAction中有两个变量,我们此时也选择复制过来,生成get/set方法
复制到我们的Action中
通过Message这个单词和括号里的“操作成功”意思,我们可以知道这是一个信息提示,可以直接模仿
而下面这种写法,我们能猜测到,这是删除之后,页面要重新请求的一个地址,可以看到topicAction中存在topicMana的方法。所以这是删除后请求的地址,我们可以在我们自己的action中请求之前的查看所有的方法。
最后一句看返回单词succeed是表示成功的意思
我们对我们的Action进行更改
接下来我们需要去struts.xml中进行配置
这是topicAction的,我们进行模仿
我们模仿写法
目前后台的地址有了,我们来看topic中的删除超链接我们也进行模仿
这里面有超链接和表格,我们都复制过去进行更改
我们将中的部分都拿到我们的页面中,我们之前写的交不用了。
Head半部分也做一下更改
头部引入的部分也做一下更改
我们启动测试看一下。
我们点击删除看一下
确认删除
点击确定,数据变少了
查看数据库也确实变少了
表名我们模仿成功了
完成的代码:
https://url56.ctfile.com/f/34653256-689171336-82bcf3?p=7567 (访问密码: 7567)
我们继续完成添加的部分
首先我们看目前系统是不是给提供了添加的流程。
先看Action里面有没有和添加有关的方法名,经过搜索发现forumsAction有一个方法表示添加。
Add肯定有添加的意思。
然后查询这个方法在struts.xml中的关联
这样我们就找到了一个页面forumsAdd.jsp,找打了里面使用表单提交的方式,我们可以模仿了。
我们先模仿这个页面,把添加页面做出来。复制forumsAdd.jsp改为zztlAdd.jsp,将文件放到我们自己的目录里,方便管理。
我们主要改动表单的部分,这些配置内容暂时不变
这里面我们目前分析只要提交按钮和输入框就可以了
经过删减,重点已经标注出来了,代码如下。主要是对table中的内容更改,只保留了两个输入框,其它暂时不做保留,后面运行遇到问题可以回来微调。
然后我们在之前的页面view.jsp里添加一个添加的跳转按钮,能够进入这个页面。
上面的action是一个删除的action我们需要写一个添加跳转的方法。
在struts.xml中进行配置
把view.jsp中的跳转Action改动一下
然后我们运行一下
可以看到添加按钮
点击添加,虽然丑了点,但是功能具备,页面也已经跳转。
然后我们开始准备提交后接收的数据。在action准备添加的方法。
先添加两个属性,生成get/set方法
然后我们完成添加的方法
接下来在struts.xml中配置
在zztlAdd.jsp中修改路径
我们运行一下
数据进来了
数据库查看一下
完成了模仿