内容简介:写在前面:本次文章搭配以下两篇文章进行阅读,有助于理解。数据库表格:这里直接跳过链接数据库的DbUtil文件和Struts2的配置项。
写在前面:本次文章搭配以下两篇文章进行阅读,有助于理解。
- 重拾Oracle(一):与Oracle的连接
- Struts2学习之路(二) :Struts2三种传值模式
正文
数据库表格:
这里直接跳过链接数据库的DbUtil文件和Struts2的配置项。
第一步:编写实体类
实体类:定义Student类所需要的数据,并设置set&get方法,构造方法,重写toString方法等 复制代码
第二步:编写接口类和工厂类
接口包括对student表的增删改查和查全部。工厂类用来获得具体操作实现类。 复制代码
第三步:实现接口(实现类),设计测试类
实现类是对第二步接口的实现,编写方法体,并对写好的方法进行测试 复制代码
第四步:配置login.xml用来完成对jsp页面和后台action的关联
在Struts.xml文件中写如下代码段来完成对login.xml的配置
<include file="login.xml"/>
login.xml用来处理用户的各种操作,并分发给Action对其进行处理,并且进行结果响应。这里就是Struts2的核心部分,用户的请求通过核心控制器发送到动作映射类,动作映射类再判断是否需要调用某个Action类,然后返回给核心控制器,核心控制器决定是否创建Action类的代理类,代理类创建后,确定使用哪个方法,然后返回确认执行信息,接着就是经过层层拦截器,执行某个Action类,然后根据结果返回具体的视图,最后经过层层拦截器封装响应给客户端
以下是login.xml的具体代码
<package name="default" namespace="/" extends="struts-default"> <action name ="loginAction" class="com.huaruan.action.LoginAction"> <result name="success">Main.jsp</result> <result name="input" type="redirect">Login.jsp</result> </action> <action name ="DbAction" class="com.huaruan.action.DbControlAction"> <result name="QuerryAll">QuerryAll.jsp</result> <result name="QuerryByName">QuerryAll.jsp</result> <result name="Delete">QuerryAll.jsp</result> <result name="Update">ExecuteUpdate.jsp</result> <result name="Insert">ExecuteUpdate.jsp</result> </action> </package> 复制代码
其中有两个Action,分别是loginAction和DbAction,分别完成对登录的控制和对数据库操作的控制(增伤改查)
result标签,根据返回字符串来完成对客户端的不同响应。
第五步:设计Login
界面如图
页面具体是一个form表单,表单动作映射到loginAction动作的Login方法,提交方式是post,表单包含一个文本框和一个密码框,一个提交按钮和一个重置按钮,分别使用Strus2的标签(s)来设计。Action类的设计采用模型驱动(模型三)的方式来做
定义方法String Login() extends ActionSupport implements ModalDriven{} 用来判断用户的输入,根据结果返回不同的字符串,以便Login.xml进行响应。
核心代码如下:
public String Login() throws Exception { String str = null; String name= stu.getStuName(); String pwd= stu.getStuPwd(); StudentInter student= Factory.getStudent(); Student s = student.SelectByname(name); System.out.println(s); if(s.getStuName()!=null) { if(s.getStuName().equals(name)&&s.getStuPwd().equals(pwd)) { str = SUCCESS; }else{ str = INPUT; } }else { str = INPUT; } return str; } 复制代码
第六步:设计数据库交互
界面如图:
这里不做太多赘述,基本原理和login设计一样,细节部分略过。
详细介绍查询全部模块:
界面如图:
这里将数据显示在table控件中,使显示较为美观。这里获取数据的方式是Struts2的标签 <s:iterator value="list" status="st" var="student">iterator标签。
iterator标签主要是用于迭代输出集合元素,如list set map 数组等,在使用标签的时候有三个属性值得我们关注
-
- value属性:可选的属性,value属性是指一个被迭代的集合,使用ognl表达式指定,如果为空的话默认就是ValueStack栈顶的集合.
- 2.id属性:可选属性, 是指集合元素的id
- 3.可以自定义变量(var XX)
- 4.status属性:可选属性,该属性在迭代时会产生一个IteratorStatus对象,该对象可以判断当前元素的位置,包含了以下属性方法:
- int getCount(); 迭代元素个数
- int getIndex(); 迭代元素当前索引
- boolean getFirst(); 是否为第一个
- boolean getEven(); 是否为偶
- boolean getLast(); 是否最后一个
- bolean getOdd(); 是否为奇
然后看我们的代码,用来当个栗子:
<table border="1"> <tr> <td>编号</td><td>学号</td><td>姓名</td><td>密码</td><td>性别</td><td>年龄</td><td>操作</td> </tr> <s:iterator value="list" status="st" var="student"> <tr> <td><s:property value="#st.getCount()"/></td> <td><s:property value="#student.stuId"/></td> <td><s:property value="#student.stuName"/></td> <td><s:property value="#student.stuPwd"/></td> <td><s:property value="#student.stuSex"/></td> <td><s:property value="#student.stuAge"/></td> <td><a href="DbAction!Delete?stuId=<s:property value="#student.stuId"/> ">删除</a></td> </tr> </s:iterator> </table> 复制代码
这里,list是Action给前台返回的封装数据(Student类型),var是定义的变量student,用来取出list中的对象属性值,status用来判断元素的位置。 最后一列我用来对本列进行删除操作,这里将其定义为标签,地址是转到对应的Action类中,同时携带参数stuId,用来标记删除该条信息。
Action类中的细节:
使用模式三和模式一结合的方式来进行值传递。 如图
各项参数的意义如下:
其中五个自定义方法,分别是:
- Delete():用来完成删除操作
- Insert():用来完成插入(新增)操作
- SelectAll():用来完成查询全部操作
- selectByName():用来完成根据姓名查询的操作
- Update():用来完成更新操作(更改密码)
最后发布项目,测试运行。
如文中有笔误的地方,请留言告知,定会及时更正。谢谢。---Chuxus
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网
猜你喜欢:- MySQL数据库5:Go与MySQL的交互
- Redis数据库4:Go与Redis的交互
- 如何与以太坊区块链交互并用Python和SQL创建数据库
- 构建自己的地理信息空间数据库及与客户端简单交互
- 竞赛报名 | AI时代数据库交互怎么玩?首届中文NL2SQL挑战赛开战
- iOS 12 人机交互指南:交互(User Interaction)
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。