【Struts2】使用JDBC、Struts2标签、编辑WEB.XML完成较成熟的工程(2)

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;
	}

}

因为很多动作都要用到数据库操作,免得写完又写这段代码并且拒绝在其他动作中给这些冗长的链接代码喧宾夺主,于是将这段代码独立出来,之后直接用java继承extends与java引入包import的方式完成。


(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相关的语法就行。

你可能感兴趣的:(【Struts2】使用JDBC、Struts2标签、编辑WEB.XML完成较成熟的工程(2))