struts2 入门实例原理与流程 过程理解

想把学习的框架都重新整理一下写成博客,先从struts2开始吧

点这里获取源代码

imageimage

web.xml

<?xml version="1.0" encoding="UTF-8"?>                                    
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"          
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"                 
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee                 
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
    
    <display-name>Struts Blank</display-name>  
  
    <filter>  
        <!-- 配置Struts2核心Filter的名字 -->  
        <filter-name>struts2</filter-name>  
        <!-- 配置Struts2核心Filter的实现类 -->  
        <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
    
    </filter>  
    <!-- 配置Filter拦截的URL -->  
    <filter-mapping>  
        <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>  
    <welcome-file-list>  
        <welcome-file>/index.jsp</welcome-file>  
    </welcome-file-list> 
    
 </web-app>

struts2.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
    "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN"
    "http://struts.apache.org/dtds/struts-2.0.dtd">

<struts>
 
   <package name="default" namespace="/" extends="struts-default">
   <action name="login" class="com.ma.action.LoginAction" >  
            <result name="success">/success.jsp</result>  
            <result name="error">/false.jsp</result>  
        </action>  
        
    </package>
</struts>

下面是分包解释

LoginAction.java

package com.ma.action;

import com.ma.bean.User;
import com.ma.impl.UserDaoImpl;
import com.opensymphony.xwork2.ActionSupport;

public class LoginAction extends ActionSupport {
    /**
    * 
    */
    private static final long serialVersionUID = 1L;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUserpwd() {
        return userpwd;
    }

    public void setUserpwd(String userpwd) {
        this.userpwd = userpwd;
    }
 private User user;
    public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}
    private String username;
    private String userpwd;

    public String execute() throws Exception {
        UserDaoImpl userDaoImpl = new UserDaoImpl() ;
        User user=userDaoImpl.finduserByAdminname(username);
    
        if (user.getUserpwd() != null && user.getUserpwd().equals(userpwd)) {
System.out.println(user.getUsername());
            return SUCCESS;
        }
        System.out.println(user.getUsername());
        return ERROR;
    }
}

User.java

package com.ma.bean;

public class User {
    
 
    private Integer userID;
    @Override
    public String toString() {
        return "User [userID=" + userID + ", username=" + username + ", userpwd=" + userpwd + "]";
    }
    private String username;
    private String userpwd;
    public Integer getUserID() {
        return userID;
    }
    public void setUserID(Integer userID) {
        this.userID = userID;
    }
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getUserpwd() {
        return userpwd;
    }
    public void setUserpwd(String userpwd) {
        this.userpwd = userpwd;
    }
    
}
UserDao.java

package com.ma.dao;

import com.ma.bean.User;

public interface UserDao {
    public User finduserByAdminname(String username);

    public User findAdminByuserid(Integer userID);
    
    public void adduser(User user);
    
    public void deleteuser(User user);

    public Void updateuser(User user);
}

UserDaoImpl.java

package com.ma.impl;

import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.sql.Connection;
import java.util.List;
import java.util.Map;

import com.ma.bean.User;
import com.ma.dao.UserDao;

import util.BeanToMapUtil;
import util.jdbc;

public class UserDaoImpl implements UserDao {

    public User finduserByAdminname(String username) {

        String sql = "select * from user where username=?";
        jdbc jdbc = new jdbc();
        Connection conn = new jdbc().getConnection();
        User user = new User();
        Object[] params = { username };
        List<Object> itemList = jdbc.excuteQuery(sql, params);

        Map<String, Object> users = null;
        for (int j = 0; j < itemList.size(); j++) {

            users = (Map<String, Object>) itemList.get(j);

        }
        try {
            System.out.println("到这里了");
            user = (User) BeanToMapUtil.convertMap(User.class, users);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IntrospectionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return user;

    }

    public User findAdminByuserid(Integer userID) {
        return null;
    }

    public void adduser(User user) {
        String sql;
        user.setUserID(null);
        user.setUsername("123");
        user.setUserpwd("d");
        sql = "insert userID username userpwd into user";
        Connection conn = new jdbc().getConnection();
        jdbc jdbc = new jdbc();
        jdbc.executeUpdate(sql, null);

    }

    public void deleteuser(User user) {

    }

    public Void updateuser(User user) {
        return null;
    }

}

BeanToMapUtil.java   hashmap与bean转换的工具类

package util;

import java.beans.BeanInfo;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.HashMap;
import java.util.Map;  
/** 
 * javabean和map相互转换 
 *  
 */  
public class BeanToMapUtil {  
    
    /** 
     * 将一个 Map 对象转化为一个 JavaBean 
     * @param type 要转化的类型 
     * @param map 包含属性值的 map 
     * @return 转化出来的 JavaBean 对象 
     * @throws IntrospectionException 
     *             如果分析类属性失败 
     * @throws IllegalAccessException 
     *             如果实例化 JavaBean 失败 
     * @throws InstantiationException 
     *             如果实例化 JavaBean 失败 
     * @throws InvocationTargetException 
     *             如果调用属性的 setter 方法失败 
     */  
    public static Object convertMap(Class type, Map map)  
            throws IntrospectionException, IllegalAccessException,  
            InstantiationException, InvocationTargetException {  
        BeanInfo beanInfo = Introspector.getBeanInfo(type); // 获取类属性  
        Object obj = type.newInstance(); // 创建 JavaBean 对象  
  
        // 给 JavaBean 对象的属性赋值  
        PropertyDescriptor[] propertyDescriptors =  beanInfo.getPropertyDescriptors();  
        for (int i = 0; i< propertyDescriptors.length; i++) {  
            PropertyDescriptor descriptor = propertyDescriptors[i];  
            String propertyName = descriptor.getName();  
  
            if (map.containsKey(propertyName)) {  
                // 下面一句可以 try 起来,这样当一个属性赋值失败的时候就不会影响其他属性赋值。  
                Object value = map.get(propertyName);  
  
                Object[] args = new Object[1];  
                args[0] = value;  
  
                descriptor.getWriteMethod().invoke(obj, args);  
            }  
        }  
        return obj;  
    }  
  
    /** 
     * 将一个 JavaBean 对象转化为一个  Map 
     * @param bean 要转化的JavaBean 对象 
     * @return 转化出来的  Map 对象 
     * @throws IntrospectionException 如果分析类属性失败 
     * @throws IllegalAccessException 如果实例化 JavaBean 失败 
     * @throws InvocationTargetException 如果调用属性的 setter 方法失败 
     */  
    public static Map convertBean(Object bean)  
            throws IntrospectionException, IllegalAccessException, InvocationTargetException {  
        Class type = bean.getClass();  
        Map returnMap = new HashMap();  
        BeanInfo beanInfo = Introspector.getBeanInfo(type);  
  
        PropertyDescriptor[] propertyDescriptors =  beanInfo.getPropertyDescriptors();  
        for (int i = 0; i< propertyDescriptors.length; i++) {  
            PropertyDescriptor descriptor = propertyDescriptors[i];  
            String propertyName = descriptor.getName();  
            if (!propertyName.equals("class")) {  
                Method readMethod = descriptor.getReadMethod();  
                Object result = readMethod.invoke(bean, new Object[0]);  
                if (result != null) {  
                    returnMap.put(propertyName, result);  
                } else {  
                    returnMap.put(propertyName, "");  
                }  
            }  
        }  
        return returnMap;  
    }  
}

jdbc.java

package util;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;  
/** 
 * ���ݿ������� 
 * ˵��:��װ�� �޲Σ��вΣ��洢���̵ĵ��� 
 * @author iflytek 
 * 
 */  
public class jdbc {  
  
    /** 
     * ���ݿ����������� 
     */  
    private static final String DRIVER = "com.mysql.jdbc.Driver";  
  
    /** 
     * �����ַ��� 
     */  
    private static final String URLSTR = "jdbc:mysql://localhost:3306/login";  
  
    /** 
     * �û��� 
     */  
    private static final String USERNAME = "root";  
  
    /** 
     * ���� 
     */  
    private static final String USERPASSWORD = "root";  
  
    /** 
     * �������ݿ����Ӷ��� 
     */  
    private Connection connnection = null;  
  
    /** 
     * ����PreparedStatement���� 
     */  
    private PreparedStatement preparedStatement = null;  
      
    /** 
     * ����CallableStatement���� 
     */  
    private CallableStatement callableStatement = null;  
  
    /** 
     * ������������� 
     */  
    private ResultSet resultSet = null;  
  
    static {  
        try {  
            // �������ݿ���������  
            Class.forName(DRIVER);  
        } catch (ClassNotFoundException e) {  
            System.out.println("������������");  
            System.out.println(e.getMessage());  
        }  
    }  
  
    /** 
     * �������ݿ����� 
     * @return ���ݿ����� 
     */  
    public Connection getConnection() {  
        try {  
            // ��ȡ����  
            connnection = DriverManager.getConnection(URLSTR, USERNAME,  
                    USERPASSWORD);  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        }  
        return connnection;  
    }  
  
    /** 
     * insert update delete SQL����ִ�е�ͳһ���� 
     * @param sql SQL��� 
     * @param params �������飬��û�в�����Ϊnull 
     * @return ��Ӱ������� 
     */  
    public int executeUpdate(String sql, Object[] params) {  
        // ��Ӱ�������  
        int affectedLine = 0;  
          
        try {  
            // �������  
            connnection = this.getConnection();  
            // ����SQL   
            preparedStatement = connnection.prepareStatement(sql);  
              
            // ������ֵ  
            if (params != null) {  
                for (int i = 0; i < params.length; i++) {  
                    preparedStatement.setObject(i + 1, params[i]);  
                }  
            }  
              
            // ִ��  
            affectedLine = preparedStatement.executeUpdate();  
  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            // �ͷ���Դ  
            closeAll();  
        }  
        return affectedLine;  
    }  
  
    /** 
     * SQL ��ѯ����ѯ���ֱ�ӷ���ResultSet�� 
     * @param sql SQL��� 
     * @param params �������飬��û�в�����Ϊnull 
     * @return ����� 
     */  
    private ResultSet executeQueryRS(String sql, Object[] params) {  
        try {  
            // �������  
            connnection = this.getConnection();  
              
            // ����SQL  
            preparedStatement = connnection.prepareStatement(sql);  
              
            // ������ֵ  
            if (params != null) {  
                for (int i = 0; i < params.length; i++) {  
                    preparedStatement.setObject(i + 1, params[i]);  
                }  
            }  
              
            // ִ��  
            resultSet = preparedStatement.executeQuery();  
  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        }   
  
        return resultSet;  
    }  
      
    /** 
     * SQL ��ѯ����ѯ�����һ��һ�� 
     * @param sql SQL��� 
     * @param params �������飬��û�в�����Ϊnull 
     * @return ����� 
     */  
    public Object executeQuerySingle(String sql, Object[] params) {  
        Object object = null;  
        try {  
            // �������  
            connnection = this.getConnection();  
              
            // ����SQL  
            preparedStatement = connnection.prepareStatement(sql);  
              
            // ������ֵ  
            if (params != null) {  
                for (int i = 0; i < params.length; i++) {  
                    preparedStatement.setObject(i + 1, params[i]);  
                }  
            }  
              
            // ִ��  
            resultSet = preparedStatement.executeQuery();  
  
            if(resultSet.next()) {  
                object = resultSet.getObject(1);  
            }  
              
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            closeAll();  
        }  
  
        return object;  
    }  
  
    /** 
     * ��ȡ������������������List�� 
     *  
     * @param sql 
     *            SQL��� 
     * @return List 
     *                       ����� 
     */  
    public List<Object> excuteQuery(String sql, Object[] params) {  
        // ִ��SQL��ý����  
        ResultSet rs = executeQueryRS(sql, params);  
          
        // ����ResultSetMetaData����  
        ResultSetMetaData rsmd = null;  
          
        // ���������  
        int columnCount = 0;  
        try {  
            rsmd = rs.getMetaData();  
              
            // ��ý��������  
            columnCount = rsmd.getColumnCount();  
        } catch (SQLException e1) {  
            System.out.println(e1.getMessage());  
        }  
  
        // ����List  
        List<Object> list = new ArrayList<Object>();  
  
        try {  
            // ��ResultSet�Ľ�����浽List��  
            while (rs.next()) {  
                Map<String, Object> map = new HashMap<String, Object>();  
                for (int i = 1; i <= columnCount; i++) {  
                    map.put(rsmd.getColumnLabel(i), rs.getObject(i));  
                }  
                list.add(map);  
            }  
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            // �ر�������Դ  
            closeAll();  
        }  
  
        return list;  
    }  
      
    /** 
     * �洢���̴���һ����������ķ��� 
     * @param sql �洢������� 
     * @param params �������� 
     * @param outParamPos �������� 
     * @param SqlType ����������� 
     * @return ���������ֵ 
     */  
    public Object excuteQuery(String sql, Object[] params,int outParamPos, int SqlType) {  
        Object object = null;  
        connnection = this.getConnection();  
        try {  
            // ���ô洢����  
            callableStatement = connnection.prepareCall(sql);  
              
            // ��������ֵ  
            if(params != null) {  
                for(int i = 0; i < params.length; i++) {  
                    callableStatement.setObject(i + 1, params[i]);  
                }  
            }  
              
            // ע���������  
            callableStatement.registerOutParameter(outParamPos, SqlType);  
              
            // ִ��  
            callableStatement.execute();  
              
            // �õ��������  
            object = callableStatement.getObject(outParamPos);  
              
        } catch (SQLException e) {  
            System.out.println(e.getMessage());  
        } finally {  
            // �ͷ���Դ  
            closeAll();  
        }  
          
        return object;  
    }  
  
    /** 
     * �ر�������Դ 
     */  
    private void closeAll() {  
        // �رս��������  
        if (resultSet != null) {  
            try {  
                resultSet.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
  
        // �ر�PreparedStatement����  
        if (preparedStatement != null) {  
            try {  
                preparedStatement.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
          
        // �ر�CallableStatement ����  
        if (callableStatement != null) {  
            try {  
                callableStatement.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }  
  
        // �ر�Connection ����  
        if (connnection != null) {  
            try {  
                connnection.close();  
            } catch (SQLException e) {  
                System.out.println(e.getMessage());  
            }  
        }     
    }  
}

任何一个框架最主要的是值传递,从最直观分析一下值的传递

struts2从一个前台index.jsp页面开始,

<s:form action="login" method="post" namespace="/">
<s:textfield name="username" label="用户名"/>
<s:password name="userpwd" label="密码"/>
<s:submit label="登录"/>
</s:form>

提交参数username,userpwd,以post方式传递到action=”login”的文件

(这里就是先提交到web.xml)

<filter-mapping>  
        <!-- 配置Struts2的核心FilterDispatcher拦截所有用户请求 -->  
        <filter-name>struts2</filter-name>  
        <url-pattern>/*</url-pattern>  
    </filter-mapping>

这里是把参数拦截,提交给struts2处理,找到action name=”login”的配置地方

<package name="default" namespace="/" extends="struts-default">
   <action name="login" class="com.ma.action.LoginAction" >  
            <result name="success">/success.jsp</result>  
            <result name="error">/false.jsp</result>  
        </action>  
        
    </package>

action name=”login”对应的class       class="com.ma.action.LoginAction"

就是对应的包的位置com.ma.action下面的LoginAction.java中的LoginAction方法

public class LoginAction extends ActionSupport

这时候username,userpwd也提交过来了

由get,set方法获取

private static final long serialVersionUID = 1L;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getUserpwd() {
        return userpwd;
    }

    public void setUserpwd(String userpwd) {
        this.userpwd = userpwd;
    }
 private User user;
    public User getUser() {
    return user;
}

public void setUser(User user) {
    this.user = user;
}
    private String username;
    private String userpwd;

先把需要使用的UserDaoImpl  new一下

UserDaoImpl userDaoImpl = new UserDaoImpl() ;

接着把get,set的方法得到的username直接使用

User user=userDaoImpl.finduserByAdminname(username);

使用userDaoImpl的finduserByAdminname方法把username传递进去

这一段就是先定义了一个sql语句,把username传递给了sql语句里面

使用jdbc连接数据库

创建变量代码

代入jdbc.excuteQuery获取List<Object>结果,即sql语句查询的结果存入List<Object>

然后转为Map<String, Object>类型

接着使用工具类BeanToMapUtil.java把map类型转换为bean类

user = (User) BeanToMapUtil.convertMap(User.class, users);

返回一个user类

public User finduserByAdminname(String username) {

        String sql = "select * from user where username=?";
        jdbc jdbc = new jdbc();
        Connection conn = new jdbc().getConnection();
        User user = new User();
        Object[] params = { username };
        List<Object> itemList = jdbc.excuteQuery(sql, params);

        Map<String, Object> users = null;
        for (int j = 0; j < itemList.size(); j++) {

            users = (Map<String, Object>) itemList.get(j);

        }
        try {
            System.out.println("到这里了");
            user = (User) BeanToMapUtil.convertMap(User.class, users);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InstantiationException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (IntrospectionException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return user;

    }

返回LoginAction.java

User user=userDaoImpl.finduserByAdminname(username);

获取得到的user类,接着判断从数据库获得的属性

if (user.getUserpwd() != null && user.getUserpwd().equals(userpwd)) {
System.out.println(user.getUsername());
            return SUCCESS;
        }
        System.out.println(user.getUsername());
        return ERROR;
    }

如果判断true     return SUCCESS;

false   return ERROR;(注意返回大小写)

这时候就返回了struts.xml文件

返回success就跳转到success.jsp

返回error就跳转到false.jsp

<package name="default" namespace="/" extends="struts-default">
   <action name="login" class="com.ma.action.LoginAction" >  
            <result name="success">/success.jsp</result>  
            <result name="error">/false.jsp</result>  
        </action>  
        
    </package>

好了,到这里就结束了,struts2的一个完整流程就这样完成了

这片文章主要是给新人看的,过程呢有点太细,不过对于新人一定非常有帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值