(四)模仿学习-完成后台管理页面查询
我们从网上下载一份代码学习,模拟如果在实际工作中,我们入职的时候会首先拿到一个不复杂但是技术比较老的项目,因为作为新人很难去直接参与大而且新的项目进行开发。
- 我们从网上搜一份代码,先下载下来,代码如下:
![](https://img.xiumi.us/xmi/ua/rSJP/i/48d5cec8831d3b0e16696651e72e6db7-sz_9452.png)
代码的地址:
https://url56.ctfile.com/f/34653256-665303764-679728?p=7567 (访问密码: 7567)
- 将数据库导入到我们本地
![](https://img.xiumi.us/xmi/ua/rSJP/i/e6040ec27749668aff1e9aaa17d6958a-sz_25090.png)
- 将项目导入到本地环境中
- 首先我们将项目拷贝到我们的工作开发环境中
![](https://img.xiumi.us/xmi/ua/rSJP/i/acd1274122813cc2eac8c1fc2e439bc4-sz_35952.png)
- 在IDE中导入(Eclipse、MyEclipse、IDEA都可以)
![](https://img.xiumi.us/xmi/ua/rSJP/i/54c11b8fb35b3156f7d7dfe175f23b45-sz_67191.png)
然后
![](https://img.xiumi.us/xmi/ua/rSJP/i/e5edffe0424998d63072872f0fac077f-sz_43879.png)
继续
![](https://img.xiumi.us/xmi/ua/rSJP/i/69149c379f82482d62eb7089a47c2db2-sz_85519.png)
项目出现在导航栏
![](https://img.xiumi.us/xmi/ua/rSJP/i/d8ac1f9bf46fbfef8e200b792a3277a6-sz_30381.png)
- 改动数据库连接的地址
因为所有的项目一定会有数据库的地址配置,不管是用的那种框架。所以我们需要找到对应的文件进行更改。修改下面的数据库密码和账户为自己的数据库地址。
![](https://img.xiumi.us/xmi/ua/rSJP/i/4bce52483f38d05dfa021944b0f49100-sz_203333.png)
- 一般此时我们只要下载的项目没问题,就可以运行了,我们使用Tomcat作为应用服务器,但下载的这个项目需要做一下转换,将项目转换一下,转换的位置如下:
![](https://img.xiumi.us/xmi/ua/rSJP/i/f4325c6e076cd78e4c3bb7a52d9d901d-sz_129234.png)
转换项目
![](https://img.xiumi.us/xmi/ua/rSJP/i/5276c4a66d09d0c4a885abaed64c8913-sz_77008.png)
转换完进行勾选
![](https://img.xiumi.us/xmi/ua/rSJP/i/c04f5f943fa67f3bc98edb9f0aee42d3-sz_121533.png)
接下来更改一个目录
![](https://img.xiumi.us/xmi/ua/rSJP/i/add97e061d22275dbbd553fb8dc772a9-sz_221181.png)
目录更改如下
![](https://img.xiumi.us/xmi/ua/rSJP/i/d232042c4a8328f2e90284f023dc8656-sz_98159.png)
添加到Tomcat应用服务器中
![](https://img.xiumi.us/xmi/ua/rSJP/i/f051b96eb7a336bef7372a3c694f273f-sz_23411.png)
然后我们可以运行代码了,项目没有报错
![](https://img.xiumi.us/xmi/ua/rSJP/i/e275970ac026409a91c28cda61ba5363-sz_289132.png)
我们在浏览器中进行访问就可以得到对应的项目
![](https://img.xiumi.us/xmi/ua/rSJP/i/7be642bd1f07bef42c29923e85584f18-sz_237573.png)
点击登录后如果出现连接不上,更换系统中的MySQL的连接包就可以。
![](https://img.xiumi.us/xmi/ua/rSJP/i/c03e022ff0fc08dce40ed834a1c82741-sz_38921.png)
- 创建数据库
![](https://img.xiumi.us/xmi/ua/rSJP/i/68a99b64082c5e1e298d2af25fd9bd9a-sz_129993.png)
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
- 创建实体类
- 模仿包里的文件,编写我们自己的实体类
![](https://img.xiumi.us/xmi/ua/rSJP/i/ae124aa6dfeb245309a48c4bad32ed2e-sz_82303.png)
创建实体类,名字模仿包里的文件,比如数据表交t_topic,会有两个文件分别叫TTopic.java和TTopic.hbm.xml这两个文件,我们也创建这两个文件。
![](https://img.xiumi.us/xmi/ua/rSJP/i/6984e68a57e7a5e334d0f08164f6f211-sz_60611.png)
- 模仿这两个文件完成里面的内容
先模仿第一个java文件
序列化和字段
![](https://img.xiumi.us/xmi/ua/rSJP/i/2cf411e63fb00c3a8695952b3ad83b6f-sz_108483.png)
这是这个实体对应的数据表创建语句,可以和上面的字段进行对应。,我们字段的类型和t_topic类似的有pid和author(所以我上面创建语句是按照这个项目里的形式创建的不是乱创建的,就是为了和它的字段匹配)
![](https://img.xiumi.us/xmi/ua/rSJP/i/0547aea6cd47536ce0217c7014a8f5b2-sz_131743.png)
我们只有3个字段,所以字段会比较少,其中get/set字段自动生成。
![](https://img.xiumi.us/xmi/ua/rSJP/i/482403299f227863e6d39ac4c1732e41-sz_128387.png)
多余的字段可以选择不写,但是t_topic中的字段也是少于TTopic.java中的字段?是因为只要包含数据库中的字段,可以在TTopic.java中写更多的属性是影响的。
TTopic.java里面有构造函数,我们也生成两个构造函数
![](https://img.xiumi.us/xmi/ua/rSJP/i/8ace84c3a34f49d24a349ca0d0a269ee-sz_81046.png)
自动生成一下,也可以自己写
![](https://img.xiumi.us/xmi/ua/rSJP/i/b23a793a008c072b66f59483f05fa08d-sz_80900.png)
后面没有了模仿的了,我们来看TTopic.hbm.xml。因为hbm.xml是hibernate的配置文件,所以要按照这个命名,如果你知道就直接写就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/4a1f683f3f0ebc721fad7c32e15e3a04-sz_320012.png)
按照上图里的内容,我们做下面的更改
![](https://img.xiumi.us/xmi/ua/rSJP/i/09d43c438169bdaf3700b727d50a64da-sz_121851.png)
2、我们继续模仿DAO
![](https://img.xiumi.us/xmi/ua/rSJP/i/ff068ae2ecedbf345490481fdb0710fe-sz_58192.png)
先看我们的模仿文件TTopicDAO,先读这个文件。
![](https://img.xiumi.us/xmi/ua/rSJP/i/e34b3584330b0c19e4fb9ddc298e745f-sz_144532.png)
根据这个文件的内容,我们需要写下面的部分
![](https://img.xiumi.us/xmi/ua/rSJP/i/65c01e0ab5ef717fe9d3df7009e27737-sz_103242.png)
extends HibernateDaoSupport表示继承Hibernate的框架支持
private static final Log log = LogFactory.getLog(TTopicDAO.class);是表示日志的
![](https://img.xiumi.us/xmi/ua/rSJP/i/7fcfcc3ed62b2f95ec23dfc1cf652771-sz_52857.png)
然后就是字段属性
我们已经知道t_topic是有这样的字段
![](https://img.xiumi.us/xmi/ua/rSJP/i/d5ab09eb841ab5289c11705a6fb86598-sz_143329.png)
所以这些字段和数据库是有关系的
![](https://img.xiumi.us/xmi/ua/rSJP/i/095d222dc6b32615e955784d00fab7ba-sz_79431.png)
那么我们取字段也是按照数据表中的字段保留
![](https://img.xiumi.us/xmi/ua/rSJP/i/f507e284ebe13f8e330e24f4d63fc666-sz_59796.png)
继续模仿,下面这个在注释里写了什么都不做,但是我么可以通过名字和修饰符判断出来是要进行初始化的。
![](https://img.xiumi.us/xmi/ua/rSJP/i/5c33cbe28d02303f160d0a5380a15287-sz_111356.png)
接下来这个方法从名字是看是要用来保存的,其中log.debug和log.error类似于system.out.println()使用来显示日志信息的,可以选择不要。只要更改实体就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/54207adc575886a2c482d09425bbe3dd-sz_102554.png)
更改后看一下
![](https://img.xiumi.us/xmi/ua/rSJP/i/f43dc9e58394801160eae1352f0f000b-sz_168838.png)
下面这个类似,表示的是删除
![](https://img.xiumi.us/xmi/ua/rSJP/i/efbb8d7f8cbe27cfa27338b5d70021cc-sz_75254.png)
下面这个表示通过编号查询,所以有一个参数是id编号
![](https://img.xiumi.us/xmi/ua/rSJP/i/45b19bf09bcfc98f00c0fea78f3b73e1-sz_52474.png)
我们把这两个复制过来进行改动
![](https://img.xiumi.us/xmi/ua/rSJP/i/1c7394872e1fe427f9eefd3faecf1027-sz_119946.png)
其中findById中一些内容注意
![](https://img.xiumi.us/xmi/ua/rSJP/i/c8e280f623eefaa892f04d28a1f8f693-sz_68215.png)
然后是下面的方法,这个可以理解为查询多个,多属性查询
![](https://img.xiumi.us/xmi/ua/rSJP/i/270435933bc125547ba3dae0c5439183-sz_61160.png)
这是更改后的,这个的用途可以理解为有多个字段查询的时候不需要单独一个个的写,比如通过xdata和ydata两个查询,就可以这个方法。
![](https://img.xiumi.us/xmi/ua/rSJP/i/1945dc85aeab1f18b1fcd3b5e8fb6da5-sz_92312.png)
接下来的函数
![](https://img.xiumi.us/xmi/ua/rSJP/i/176814a729285dd21996ebc53dbdfa38-sz_102504.png)
这个函数通过名字我们就能知道这是通过属性或者字段去查询的,是单个属性字段。指定属性名和属性值的方式。
![](https://img.xiumi.us/xmi/ua/rSJP/i/7de26fcaeb885515dcc951f345b590a9-sz_82001.png)
继续往后的函数
![](https://img.xiumi.us/xmi/ua/rSJP/i/810ebfd2b93587305c79e82f3a8411db-sz_150085.png)
这个是通过某一个具体的属性完成的,我们只有三个属性,所以只需要写三个就可以了。但本质上是通过上面的属性名函数去查询的。
![](https://img.xiumi.us/xmi/ua/rSJP/i/a99d3cd4aeb996aade2246503dbe8f10-sz_106062.png)
最后一个是查询所有的
![](https://img.xiumi.us/xmi/ua/rSJP/i/c6dd19f2be2d51711659eb04dd759324-sz_52151.png)
这个是查询所有数据的,如果数据量不大可以使用,数据量大的话就不要使用了
接下来这几个函数涉及到
![](https://img.xiumi.us/xmi/ua/rSJP/i/82123b42f3edc4e95f4db665d6138dc6-sz_87992.png)
Hibernate的一些专业术语,我们如果对这个不感兴趣或者以后工作用不到,就模仿的写就可以了。这几个概念是持久状态,托管状态,瞬时状态。
![](https://img.xiumi.us/xmi/ua/rSJP/i/f0260f849d0438e5e0a1c3c38313afda-sz_136115.png)
我们直接模仿了
![](https://img.xiumi.us/xmi/ua/rSJP/i/cf81ce8e1d534476ffd77259f806fcf9-sz_187727.png)
还有一个
![](https://img.xiumi.us/xmi/ua/rSJP/i/696803b6389c32eeb174959d86e56b57-sz_31697.png)
这个可以理解为,获取实例对象。
![](https://img.xiumi.us/xmi/ua/rSJP/i/5a33f864d3701062c91e5aa387b3b7d6-sz_63476.png)
- 模仿action包下的内容
创建我们的文件,这个地方有个习惯,大家起类名的时候进来要首字母大写,不要像这个系统这个样子。
![](https://img.xiumi.us/xmi/ua/rSJP/i/11ab8d91a258fac38ee37b5d110e01f4-sz_45368.png)
然后看模仿类里的内容,这个action类似于controller层的作用,只不过比较简答,不那么复杂。
首先是继承类和主要属性
![](https://img.xiumi.us/xmi/ua/rSJP/i/7691fb804d59cf00b3b9716a34d67f22-sz_93678.png)
我们目前只有一个DAO,其中的属性和我们相关的目前只有pid 自动生成get/set方法
![](https://img.xiumi.us/xmi/ua/rSJP/i/62818cbcf811e14d39e4677b1136c938-sz_106214.png)
然后就是里面的方法,这个类主要处理的是页面过来的请求,那么我们目前只有一个请求,所以写一个方法就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/b860d9d7e604e7c43686b68bf772643f-sz_97724.png)
上面这个方法带有view名称说明是个浏览作用的方法,我们选择模仿这个方法
![](https://img.xiumi.us/xmi/ua/rSJP/i/c4ad3b25fa6c98926c1eaced8a55b61c-sz_213245.png)
更改之后就只有一个简单的成功值。
![](https://img.xiumi.us/xmi/ua/rSJP/i/bbfb66dbf6ae851ef33e050f5769fa10-sz_51723.png)
有一个问题,这个方法里并没有告诉我们返回的页面是哪个?所以还存在配置文件。
这个项目里有下面这几个配置文件。其它的可以自己看下,应该是不用我们做处理的。
struts.xml。
![](https://img.xiumi.us/xmi/ua/rSJP/i/6ab4a7f466a4ef8ebf4f54b9923a17bd-sz_12015.png)
applicationContext.xml
![](https://img.xiumi.us/xmi/ua/rSJP/i/77905da595f4bd8f8e966728568101ce-sz_10930.png)
在applicationContext.xml这个文件中我们可以知道,原来DAO和Action是需要配置的,所以我们将我们之前写过的类配置进来。
![](https://img.xiumi.us/xmi/ua/rSJP/i/d604cdb3fcc60ea416a80e562f390302-sz_238313.png)
配置action和dao就可以了
先配置dao,这个位置不太要求,配置到上面框起来的部分,单独一行就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/268f49a3e5a8a8ad8eb12d64ef42eae9-sz_38932.png)
同理action也是如此。
![](https://img.xiumi.us/xmi/ua/rSJP/i/aedffc98ba1cda9b3a07a0d9932dfb3c-sz_61188.png)
其中property表示的是要注入的对象,就是这个注入的对象不需要你生成,框架帮你做了。一般也是配置文件里配置过的。
然后是struts.xml这个文件,这个里面就涉及到页面了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/efd35f6a8b7afff443da76e2e5de4844-sz_176006.png)
下面就是我们要模仿的配置
![](https://img.xiumi.us/xmi/ua/rSJP/i/f4160d04ebd579786e4789d09ac3d440-sz_118364.png)
我们配置的部分
![](https://img.xiumi.us/xmi/ua/rSJP/i/457811ced3f597b617f12dc237716436-sz_39317.png)
根据这个配置我们需要创建一个JSP页面
![](https://img.xiumi.us/xmi/ua/rSJP/i/c5e44a2cfaeed3205b2115cdebf06a3a-sz_21082.png)
内容呢,我们还是模仿其中一个JSP页面,此处我直接复制了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/39882a9555bfc587f4bf4ecd8aaebd42-sz_259628.png)
然后我们运行查看一下我们的页面有没有问题
启动报错了,我们正好记录一下
![](https://img.xiumi.us/xmi/ua/rSJP/i/e9649b04d1c2befbe369ec95b84074de-sz_66392.png)
错误信息
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这个关键信息,我们去看看
![](https://img.xiumi.us/xmi/ua/rSJP/i/76c5aa396e1633921e7ba628bb17bccc-sz_47731.png)
还要改一个地方
![](https://img.xiumi.us/xmi/ua/rSJP/i/02083abbd87248e3341f3e8dabc2ab0f-sz_131298.png)
还有个地方
![](https://img.xiumi.us/xmi/ua/rSJP/i/e48c2c17b1e99db21dbc591e20a23404-sz_198903.png)
还有一个错误
![](https://img.xiumi.us/xmi/ua/rSJP/i/34099a48c48014a8aebc8d3b8fd9d66e-sz_83122.png)
少配置了一个
![](https://img.xiumi.us/xmi/ua/rSJP/i/4d593a774467b5e39bdc35c7601d9362-sz_93890.png)
如果发现总是报找不到文件的错误,可以查看Tomcat发布的位置中是不是没有生成编译的文件,我们目前遇到的问题是jar引入缺少一个导致的(如果没有遇到这个问题可以忽略)。
![](https://img.xiumi.us/xmi/ua/rSJP/i/17908b768e328d8ce2706d7f8aaad022-sz_46517.png)
启动后我们访问地址查看一下
http://localhost:8080/bbs_anime/zztlview.action
测试结果:
![](https://img.xiumi.us/xmi/ua/rSJP/i/5ac8e0059d285a824a8b510746559362-sz_74420.png)
- 模仿action包下的内容
创建我们的文件,这个地方有个习惯,大家起类名的时候进来要首字母大写,不要像这个系统这个样子。
![](https://img.xiumi.us/xmi/ua/rSJP/i/11ab8d91a258fac38ee37b5d110e01f4-sz_45368.png)
然后看模仿类里的内容,这个action类似于controller层的作用,只不过比较简答,不那么复杂。
首先是继承类和主要属性
![](https://img.xiumi.us/xmi/ua/rSJP/i/7691fb804d59cf00b3b9716a34d67f22-sz_93678.png)
我们目前只有一个DAO,其中的属性和我们相关的目前只有pid 自动生成get/set方法
![](https://img.xiumi.us/xmi/ua/rSJP/i/62818cbcf811e14d39e4677b1136c938-sz_106214.png)
然后就是里面的方法,这个类主要处理的是页面过来的请求,那么我们目前只有一个请求,所以写一个方法就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/b860d9d7e604e7c43686b68bf772643f-sz_97724.png)
上面这个方法带有view名称说明是个浏览作用的方法,我们选择模仿这个方法
![](https://img.xiumi.us/xmi/ua/rSJP/i/c4ad3b25fa6c98926c1eaced8a55b61c-sz_213245.png)
更改之后就只有一个简单的成功值。
![](https://img.xiumi.us/xmi/ua/rSJP/i/bbfb66dbf6ae851ef33e050f5769fa10-sz_51723.png)
有一个问题,这个方法里并没有告诉我们返回的页面是哪个?所以还存在配置文件。
这个项目里有下面这几个配置文件。其它的可以自己看下,应该是不用我们做处理的。
struts.xml。
![](https://img.xiumi.us/xmi/ua/rSJP/i/6ab4a7f466a4ef8ebf4f54b9923a17bd-sz_12015.png)
applicationContext.xml
![](https://img.xiumi.us/xmi/ua/rSJP/i/77905da595f4bd8f8e966728568101ce-sz_10930.png)
在applicationContext.xml这个文件中我们可以知道,原来DAO和Action是需要配置的,所以我们将我们之前写过的类配置进来。
![](https://img.xiumi.us/xmi/ua/rSJP/i/d604cdb3fcc60ea416a80e562f390302-sz_238313.png)
配置action和dao就可以了
先配置dao,这个位置不太要求,配置到上面框起来的部分,单独一行就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/268f49a3e5a8a8ad8eb12d64ef42eae9-sz_38932.png)
同理action也是如此。
![](https://img.xiumi.us/xmi/ua/rSJP/i/aedffc98ba1cda9b3a07a0d9932dfb3c-sz_61188.png)
其中property表示的是要注入的对象,就是这个注入的对象不需要你生成,框架帮你做了。一般也是配置文件里配置过的。
然后是struts.xml这个文件,这个里面就涉及到页面了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/efd35f6a8b7afff443da76e2e5de4844-sz_176006.png)
下面就是我们要模仿的配置
![](https://img.xiumi.us/xmi/ua/rSJP/i/f4160d04ebd579786e4789d09ac3d440-sz_118364.png)
我们配置的部分
![](https://img.xiumi.us/xmi/ua/rSJP/i/457811ced3f597b617f12dc237716436-sz_39317.png)
根据这个配置我们需要创建一个JSP页面
![](https://img.xiumi.us/xmi/ua/rSJP/i/c5e44a2cfaeed3205b2115cdebf06a3a-sz_21082.png)
内容呢,我们还是模仿其中一个JSP页面,此处我直接复制了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/39882a9555bfc587f4bf4ecd8aaebd42-sz_259628.png)
然后我们运行查看一下我们的页面有没有问题
启动报错了,我们正好记录一下
![](https://img.xiumi.us/xmi/ua/rSJP/i/e9649b04d1c2befbe369ec95b84074de-sz_66392.png)
错误信息
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这个关键信息,我们去看看
![](https://img.xiumi.us/xmi/ua/rSJP/i/76c5aa396e1633921e7ba628bb17bccc-sz_47731.png)
还要改一个地方
![](https://img.xiumi.us/xmi/ua/rSJP/i/02083abbd87248e3341f3e8dabc2ab0f-sz_131298.png)
还有个地方
![](https://img.xiumi.us/xmi/ua/rSJP/i/e48c2c17b1e99db21dbc591e20a23404-sz_198903.png)
还有一个错误
![](https://img.xiumi.us/xmi/ua/rSJP/i/34099a48c48014a8aebc8d3b8fd9d66e-sz_83122.png)
少配置了一个
![](https://img.xiumi.us/xmi/ua/rSJP/i/4d593a774467b5e39bdc35c7601d9362-sz_93890.png)
如果发现总是报找不到文件的错误,可以查看Tomcat发布的位置中是不是没有生成编译的文件,我们目前遇到的问题是jar引入缺少一个导致的(如果没有遇到这个问题可以忽略)。
![](https://img.xiumi.us/xmi/ua/rSJP/i/17908b768e328d8ce2706d7f8aaad022-sz_46517.png)
启动后我们访问地址查看一下
http://localhost:8080/bbs_anime/zztlview.action
测试结果:
![](https://img.xiumi.us/xmi/ua/rSJP/i/5ac8e0059d285a824a8b510746559362-sz_74420.png)
- 模仿action包下的内容
创建我们的文件,这个地方有个习惯,大家起类名的时候进来要首字母大写,不要像这个系统这个样子。
![](https://img.xiumi.us/xmi/ua/rSJP/i/11ab8d91a258fac38ee37b5d110e01f4-sz_45368.png)
然后看模仿类里的内容,这个action类似于controller层的作用,只不过比较简答,不那么复杂。
首先是继承类和主要属性
![](https://img.xiumi.us/xmi/ua/rSJP/i/7691fb804d59cf00b3b9716a34d67f22-sz_93678.png)
我们目前只有一个DAO,其中的属性和我们相关的目前只有pid 自动生成get/set方法
![](https://img.xiumi.us/xmi/ua/rSJP/i/62818cbcf811e14d39e4677b1136c938-sz_106214.png)
然后就是里面的方法,这个类主要处理的是页面过来的请求,那么我们目前只有一个请求,所以写一个方法就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/b860d9d7e604e7c43686b68bf772643f-sz_97724.png)
上面这个方法带有view名称说明是个浏览作用的方法,我们选择模仿这个方法
![](https://img.xiumi.us/xmi/ua/rSJP/i/c4ad3b25fa6c98926c1eaced8a55b61c-sz_213245.png)
更改之后就只有一个简单的成功值。
![](https://img.xiumi.us/xmi/ua/rSJP/i/bbfb66dbf6ae851ef33e050f5769fa10-sz_51723.png)
有一个问题,这个方法里并没有告诉我们返回的页面是哪个?所以还存在配置文件。
这个项目里有下面这几个配置文件。其它的可以自己看下,应该是不用我们做处理的。
struts.xml。
![](https://img.xiumi.us/xmi/ua/rSJP/i/6ab4a7f466a4ef8ebf4f54b9923a17bd-sz_12015.png)
applicationContext.xml
![](https://img.xiumi.us/xmi/ua/rSJP/i/77905da595f4bd8f8e966728568101ce-sz_10930.png)
在applicationContext.xml这个文件中我们可以知道,原来DAO和Action是需要配置的,所以我们将我们之前写过的类配置进来。
![](https://img.xiumi.us/xmi/ua/rSJP/i/d604cdb3fcc60ea416a80e562f390302-sz_238313.png)
配置action和dao就可以了
先配置dao,这个位置不太要求,配置到上面框起来的部分,单独一行就可以了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/268f49a3e5a8a8ad8eb12d64ef42eae9-sz_38932.png)
同理action也是如此。
![](https://img.xiumi.us/xmi/ua/rSJP/i/aedffc98ba1cda9b3a07a0d9932dfb3c-sz_61188.png)
其中property表示的是要注入的对象,就是这个注入的对象不需要你生成,框架帮你做了。一般也是配置文件里配置过的。
然后是struts.xml这个文件,这个里面就涉及到页面了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/efd35f6a8b7afff443da76e2e5de4844-sz_176006.png)
下面就是我们要模仿的配置
![](https://img.xiumi.us/xmi/ua/rSJP/i/f4160d04ebd579786e4789d09ac3d440-sz_118364.png)
我们配置的部分
![](https://img.xiumi.us/xmi/ua/rSJP/i/457811ced3f597b617f12dc237716436-sz_39317.png)
根据这个配置我们需要创建一个JSP页面
![](https://img.xiumi.us/xmi/ua/rSJP/i/c5e44a2cfaeed3205b2115cdebf06a3a-sz_21082.png)
内容呢,我们还是模仿其中一个JSP页面,此处我直接复制了。
![](https://img.xiumi.us/xmi/ua/rSJP/i/39882a9555bfc587f4bf4ecd8aaebd42-sz_259628.png)
然后我们运行查看一下我们的页面有没有问题
启动报错了,我们正好记录一下
![](https://img.xiumi.us/xmi/ua/rSJP/i/e9649b04d1c2befbe369ec95b84074de-sz_66392.png)
错误信息
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这个关键信息,我们去看看
![](https://img.xiumi.us/xmi/ua/rSJP/i/76c5aa396e1633921e7ba628bb17bccc-sz_47731.png)
还要改一个地方
![](https://img.xiumi.us/xmi/ua/rSJP/i/02083abbd87248e3341f3e8dabc2ab0f-sz_131298.png)
还有个地方
![](https://img.xiumi.us/xmi/ua/rSJP/i/e48c2c17b1e99db21dbc591e20a23404-sz_198903.png)
还有一个错误
![](https://img.xiumi.us/xmi/ua/rSJP/i/34099a48c48014a8aebc8d3b8fd9d66e-sz_83122.png)
少配置了一个
![](https://img.xiumi.us/xmi/ua/rSJP/i/4d593a774467b5e39bdc35c7601d9362-sz_93890.png)
如果发现总是报找不到文件的错误,可以查看Tomcat发布的位置中是不是没有生成编译的文件,我们目前遇到的问题是jar引入缺少一个导致的(如果没有遇到这个问题可以忽略)。
![](https://img.xiumi.us/xmi/ua/rSJP/i/17908b768e328d8ce2706d7f8aaad022-sz_46517.png)
启动后我们访问地址查看一下
http://localhost:8080/bbs_anime/zztlview.action
测试结果:
![](https://img.xiumi.us/xmi/ua/rSJP/i/5ac8e0059d285a824a8b510746559362-sz_74420.png)
完成的练习代码:
https://url56.ctfile.com/f/34653256-688423125-6383b2?p=7567 (访问密码: 7567)
- 要访问我们创建表的入口action获取所有的数据(简化写法不分页)
根据下面我们模仿的类,我们需要查询所有的数据
![](https://img.xiumi.us/xmi/ua/rSJP/i/0013978557db8ea7c21786df6571e8b4-sz_191285.png)
我们把代码复制过去,然后进行查询
先改动SQL语句,因为我们只有两个字段,所以写的内容较少。
![](https://img.xiumi.us/xmi/ua/rSJP/i/9954278a3198b26d37bfca65589a0295-sz_142388.png)
改动使用的DAO
![](https://img.xiumi.us/xmi/ua/rSJP/i/eafaccd84791df35b7b3a90ae6bcb9c8-sz_88871.png)
然后改动生成对象存放在列表中
![](https://img.xiumi.us/xmi/ua/rSJP/i/f44c55c215e2c77897e1b36c0ce58b1e-sz_137600.png)
最后将数据返回到页面里
![](https://img.xiumi.us/xmi/ua/rSJP/i/dfe697964b17e29f01e97c288dfe2568-sz_125067.png)
找到我们的页面view.jsp,在之前测试的地方存放我们的数据
![](https://img.xiumi.us/xmi/ua/rSJP/i/d94dc72114ee8c309fdba1a57bb61eb8-sz_69134.png)
我们去网上复制一份表格table拿过来使用
样式的部分我们自己复制一份就可以,如果不想复制就用我的,我的也是复制的。
![](https://img.xiumi.us/xmi/ua/rSJP/i/59edb6b03716dbc7483975bbe7580d5e-sz_104640.png)
我们用一个简单的表先放在这
![](https://img.xiumi.us/xmi/ua/rSJP/i/7b236b3fdcaa538588024c9396588a77-sz_83888.png)
运行看一下表格是否成功
虽然很丑但是数据来了(样式是否好看需要美工和前端工作的小伙伴帮大家,如果你自己写也可以的)
![](https://img.xiumi.us/xmi/ua/rSJP/i/ddce84eb8589d169bd2e1ec2e02533b9-sz_131876.png)
看一下我们的数据是不是过来了,先完成代码
![](https://img.xiumi.us/xmi/ua/rSJP/i/bdee7a5575a9a6ae8f7ee570de7385a1-sz_117877.png)
然后我们去数据库中随便插入几个数据
![](https://img.xiumi.us/xmi/ua/rSJP/i/0c009bdf28c44cfd98cf2bcde56a5d3c-sz_30111.png)
我们接下来刷新下页面,会发现数据已经从数据库到页面了,完了我们的目标。
![](https://img.xiumi.us/xmi/ua/rSJP/i/28fb3f6cce38233e1c26af97f4bfe3cd-sz_123323.png)