3.完成被其它动作继承的com.ascent.po包
(1)在src中先创建好一个被其它动作继承的com.ascent.po包
所谓的包就是一堆文件夹,就是文件夹com下面有个ascent文件夹,然后ascent文件夹里面又放着一个叫po的文件夹。
(2)之后再在po文件创建类就是在po中创建这样那样的java文件。
创建如下所示的dbcon.java,
package com.ascent.po; import java.sql.*; public class dbcon { public static Connection getCon() { Connection con = null; try { Class.forName("com.mysql.jdbc.Driver"); String url = "jdbc:mysql://localhost:3306/acesys"; String user = "root"; String password = "root"; con = DriverManager.getConnection(url, user, password); } catch (Exception e) { e.printStackTrace(); } return con; } }
(3)写好关于传递信息的类usr.java
package com.ascent.po; public class usr { protected String username; protected String password; protected int id; protected String email; protected String tel; protected String superuser; public int getId() { return id; } public void setId(int id) { this.id = id; } public String getEmail() { return email; } public void setEmail(String email) { this.email = email; } public String getTel() { return tel; } public void setTel(String tel) { this.tel = tel; } public String getSuperuser() { return superuser; } public void setSuperuser(String superuser) { this.superuser = superuser; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } }
也就是以后所有在网页中用到的参数都要在这个usr.java被提及。所用的参数都定义为protected,因为要被继承的类所使用。这个java文件没有太大的实质意义,被一堆类似于构造方法的set、get方法充斥,但是这些setter与getter不可或缺。因为在Struts2中,客户端和服务器之间的数据传输全部要用到get、set方法。“当在业务逻辑中需要用到页面传过来的值的时候,只要保证Action中属性的set方法和页面中的name属性值<s:textfield name=""/>相同即可。(去掉set,方法名大写变小写),当在显示页面中需要用到业务逻辑中的返回值时,只要保证页面标签的value值<s:property value=""/> 和Action中属性的get方法形同即可。(用法同上)”(摘自:http://blog.csdn.net/rainberryli/article/details/6778046《Struts2中的get、set方法重要性》)
一开始不知道Struts2是这样要求的,我曾以为这段类似于构造方法的代码过于冗长,便打算偷懒不写,结果发现一是网页无法正常传递参数,二是tomcat报错,很久都找不到原因,后来上网查很久才发现原来如此。
同时,这些getter与setter并不需要自己输入的。在usr.java定义完各种变量之后。如果你是用eclipse,直接按ALT+SHIFT+S之后按R,点完所有你要添加的getter与setter,一点确定便完事。不费时间的^_^。
其实这也间接地体现了Struts2这个框架的系统性与严格性,便于大型企业编程。
4.完成在com.ascent.action动作usrLoginAction.java
上述的准备工作弄完之后,才能正式去弄login1.jsp要求动作的usrLoginAction.java。
package com.ascent.action; import java.sql.Connection; import java.sql.ResultSet; import com.ascent.po.dbcon; import com.ascent.po.usr; public class usrLoginAction extends usr { private Connection con;// 用来续存数据库连接状态的变量 private ResultSet rs;// 用来指向Sql查询结果的游标变量 private String error = "用户名或者密码错误";//这个变量要扔回前台,被前台的标签所查询,同样要有getter与setter public String getError() { return error; } public void setError(String error) { this.error = error; } public String execute() { con = dbcon.getCon(); String sql = "select * from usr where username='" + username + "' and password='" + password + "' and delsoft='0'"; try { rs = con.prepareStatement(sql).executeQuery();// 对con所连接的数据库进行查询,并指向第0项查询结果,请注意第0项是没有东东的,查询结果是从1开始的 if (rs.next()) {// 一开始先下移,指向第一项查询结果,之后就是不停地取值 username = rs.getString("username"); password = rs.getString("password"); superuser = rs.getString("superuser"); } con.close();//查完数据库记得关。人走带门。 if (superuser.equals("1")) return "success1"; if (superuser.equals("2")) return "success2"; if (superuser.equals("3")) return "success3"; } catch (Exception e) { return "error"; } return "error"; } }
5.编辑struts.xml
在struts.xml加入如下的标签
<action name="usrLoginAction" class="com.ascent.action.usrLoginAction">
<result name="error">/login1.jsp</result>
<result name="success3">/WEB-INF/adminwelcome.jsp</result>
<result name="success2">/WEB-INF/registusrwelcome.jsp</result>
<result name="success1">/WEB-INF/registusrwelcome.jsp</result>
</action>
也是一目了然的。
6.其后就是按照struts.xml的指示完成WEB-INF下的registusrwelcome.jsp与adminwelcome.jsp
(1)registusrwelcome.jsp
同样先在页首加段使用struts2标签的<%@ taglib uri="/struts-tags" prefix="s"%>的声明
之后在<body>标签之间放入:
欢迎<s:if test="superuser==1">普通用户</s:if>
<s:elseif test="superuser==2">高权用户</s:elseif>:
<s:property value="username" />
登陆成功!
意思很明显,就是判断superuser的值,只要注意struts相关的语法就行。
<s:property value="username" />意为输出action中的username值。找到是哪个用户登陆。
(2)adminwelcome.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <%@ taglib uri="/struts-tags" prefix="s"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'adminwelcome.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> 欢迎管理员: <s:property value="username" /> 登陆成功! <br /> <!-- 创建超级链接url1,这条超级链接要跳转的地方为Action findAllusr.java,然后显示名为:用户管理 --> <s:url id="url1" action="findAllusr"></s:url> <s:a href="%{url1}">用户管理</s:a> </body> </html>
看注释吧,已经一目了然了,不多说了,只要注意struts相关的语法就行。