想把学习的框架都重新整理一下写成博客,先从struts2开始吧
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; } }
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的一个完整流程就这样完成了
这片文章主要是给新人看的,过程呢有点太细,不过对于新人一定非常有帮助。