写在前面:本次文章搭配以下两篇文章进行阅读,有助于理解。
数据库表格:
这里直接跳过链接数据库的DbUtil文件和Struts2的配置项。
实体类:定义Student类所需要的数据,并设置set&get方法,构造方法,重写toString方法等 复制代码
接口包括对student表的增删改查和查全部。工厂类用来获得具体操作实现类。 复制代码
实现类是对第二步接口的实现,编写方法体,并对写好的方法进行测试 复制代码
在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标签,根据返回字符串来完成对客户端的不同响应。
界面如图
页面具体是一个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 数组等,在使用标签的时候有三个属性值得我们关注
然后看我们的代码,用来当个栗子:
<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类中的细节:
使用模式三和模式一结合的方式来进行值传递。 如图
各项参数的意义如下:
其中五个自定义方法,分别是:
最后发布项目,测试运行。
如文中有笔误的地方,请留言告知,定会及时更正。谢谢。---Chuxus