开始准备工具,我电脑上用的eclipse mars2 ,提前需要安装好tomcat8.0 以及mysql。下载好一个jdbc包(数据库连接用的)。新建Dynamic Web Project,(记得勾选创建web.xml)再导入struts2的组件,可以去struts2的官网下载,http://struts.apache.org/download.cgi这里有最新的Struts 2.5.12.all.但是里面并没有struts-blank-war 空模板文件。。。。于是往下找到2.3.32这个版本的,用2345好压打开,你需要这里的struts2-blank.war下面的东西
.
打开这个路径下struts2-blank.war\WEB-INF\lib里面的很多个jar包。复制到已建工程的wenContent/web-inf/lib下面,然后工程右键refresh一下。复杂点的就是add Library.新建一个Library,命名为Struts2,添加这些jar文件。作为库文件引用即可。再就是导入struts2的组件,复制struts2-blank.war\WEB-INF\src\java下的所有文件到工程src中(内含srtuts.xml),可以复制一些examlpe的jsp文件来使用。
下面就是来配置主要的struts.xml和web.xml文件
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<default-action-ref name="index" />
<global-results>
<result name="error">/error.jsp</result>
</global-results>
<global-exception-mappings>
<exception-mapping exception="java.lang.Exception" result="error"/>
</global-exception-mappings>
<action name="index">
<result type="redirectAction">
<param name="actionName">HelloWorld</param>
<param name="namespace">/example</param>
</result>
</action>
<!--这里是我改动的地方,我的登录action叫login,类文件在loginAction包下的LoginAction.java -->
<action name="login" class="loginAction.LoginAction">
<result name="error">/login/login.jsp</result>
<result name="success">/login/success.jsp</result>
</action>
</package>
<include file="example.xml"/>
<!-- Add packages here -->
</struts>
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">
<display-name>ch04</display-name>
<!-- 这里是复制struts2-blank.war\WEB-INF\web.xml中的<filter>.....</filter><filter-mapping>....</filter-mapping> -->
<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
剩下来就是login的login.jsp和success.jsp
login.jsp点击运行后,输入帐户名和密码匹配上了就通过action跳转到success.jsp否则还是跳回login.jsp。简单的匹配验证可以在action中。
但是为了效果。这里加上数据库连接验证部分。
那么匹配段需要jdbc,这是我用到的 mysql-connector-java-5.1.30-bin2,导入lib下编译一下就进去了。可在Web App library 查看.
下面开始业务层代码,即逻辑处理过程:直接上代码
package loginAction;
import com.opensymphony.xwork2.ActionContext;
import loginBean.LoginBean;
public class LoginAction { //业务控制器
private String userName;
private String passWord;
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;
}
public String execute()throws Exception{
LoginBean lb=new LoginBean();
if (lb.login(userName, passWord)) {
//ActionContext.getContext().getSession().put("userName", getUserName());//保存值
return "success";
} else {
return "error";
}
}
}
package loginBean;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import com.mysql.jdbc.Connection;
public class Check {
public boolean check(String a,String b){
Connection connection = null;
String url = "jdbc:mysql://localhost:3306/struts2SQL"; //
String username = "root";
String password = ""; //这样写有个好处,将来更改’用户名密码‘登陆 为了管理员留下余地
//加载驱动程序以连接数据库
try {
Class.forName( "com.mysql.jdbc.Driver" );
connection = (Connection)DriverManager.getConnection( url, username, password );
}
catch ( ClassNotFoundException cnfex ) {
System.err.println( "装载 JDBC/ODBC 驱动程序失败。" );
cnfex.printStackTrace();
// System.exit( 1 );
}
catch ( SQLException sqlex ) {
System.err.println( "无法连接数据库" );
sqlex.printStackTrace();
System.exit( 1 );
}
java.sql.Statement stat = null; //初始化
ResultSet rs = null; // 要执行的SQL语句
String sql="select * from struts2 where userName='"+a+"'and passWord='"+b+"'";
try{
stat=connection.createStatement();
rs = stat.executeQuery(sql);
if(rs.next()){
//匹配成功
System.out.println("登陆用户:"+a+"密码:"+b+rs);
return true;
//返回登陆界面
} else {
System.out.println("查找为空");
return false;
}
//rs.close();
//connection.close();
}catch (SQLException e) {
e.printStackTrace();
return false;
}
}
public static void closeAll(){ ///定义关闭函数,在执行sql语句后调用关闭con
// if(rs==null){
//
// }
// if(rs!=null){
// con.close();
// }
}
}
package loginBean;
import loginBean.Check;
public class LoginBean { // 业务逻辑组件
private String userName;
private String passWord;
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;
}
// private boolean LoginCheck(String a, String b) { //账户密码 的匹配
// Check c=new Check();
// c.check(a,b); //匹配账号密码。从c数据表
// return true;
//
// }
// 处理用户登录的方法
public boolean login(String userName, String passWord) {
boolean b = false;
Check c = new Check();
// boolean bl=c.check(userName, passWord);
if (c.check(userName, passWord)) { /*
* userName.equals("zgs") &&
* passWord.equals("123")
*/
b = true;
return b;
} else {
b = false;
return b;
}
}
}
逻辑关系是:form表单提交userName和passWord到action,交由LoginAction.java处理,LoginAction调用LoginBean的login()方法,而在LoginBean中又调用数据库的check()方法匹配数据正确与否。返回的boolean值,最终返回给
<action name="login" class="loginAction.LoginAction">
<result name="error">/login/login.jsp</result>
<result name="success">/login/success.jsp</result>
</action>
所有的过程就完成了。