struts2.X心得2--第一个struts2案例分析以及整合c3p0连接数据库案例分析

     这里省略登录界面和登录成功的跳转界面;这两个界面都是比较简单的jsp页面;省略了bean文件,其中只是封装了usernamepassword属性

1.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">
	<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.jsp</welcome-file>
	</welcome-file-list>
</web-app>
2.struts.xml配置文件,struts2配置最重要的文件,名字不能修改
<?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>
	<!--
		package包:只提供包与继承;name属性为随便起的名字,写个空值都可以,但是必须有如果没有会报错Attribute "name" is required and must be specified for element type "package". at;
		 namespace:用于与jsp中写的路径匹配,即浏览器中访问的路径;
		extends:继承,继承其他包并拥有其他包的所有特性,默认继承struts-default包
	-->
	<package name="test" namespace="/csdn" extends="struts-default">
		<!--
			默认的类继承的是struts-default包中的默认继承类 <default-class-ref
			class="com.opensymphony.xwork2.ActionSupport" />
			class的属性值可以修改成自己编写的类,只是要填写该类的全限制名;
			如果权限名写错就会出现 Error filterStart错误;
			
			可以不写method,不写默认的method方法是execute,
			如果要用自己类中定义的其他方法那么必须加上method属性,不加肯定会出错找不到结果集中的action,与result标签的name属性不写的错误一样
			加上但是method的值中方法与实际类中的方法不一致会出错:NoSuchMethodException就是没有这样的方法
			
			action类的处理方法通过method属性控制选择哪个方法;所有的action类都有一个默认的处理方法 execute()
			
		-->
		<action name="demo" class="www.csdn.struts2.demo.DemoAction" method="login">
			<!-- 接收com.opensymphony.xwork2.ActionSupport类中的execute方法返回 字符串
			     通过result标签的name属性指向返回的字符串;如果没有配置name属性,那么的默认的就是name="success"
			  如果你使用自己编写的类,那么这里的name属性就不了可以省略使其走默认值 ;否则会出错no result defined for action,结果集没用默认的action
			 -->
			<result name="success">/sc.jsp</result>
			<result name="login">/index.jsp</result>
</action>
	</package>
</struts>
3. c3p0-config.xmlc  3p0配置文件
<c3p0-config>
	<default-config>
	<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/struts2</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="initialPoolSize">10</property>
		<property name="maxIdleTime">30</property>
		<property name="maxPoolSize">100</property>
		<property name="minPoolSize">10</property>
		<property name="maxStatements">200</property>
	</default-config>

	<named-config name="mysql">
		<property name="driverClass">com.mysql.jdbc.Driver</property>
		<property name="jdbcUrl">jdbc:mysql://localhost:3306/struts2</property>
		<property name="user">root</property>
		<property name="password">root</property>
		<property name="acquireIncrement">5</property>
		<property name="initialPoolSize">10</property>
		<property name="minPoolSize">50</property>
		<property name="maxPoolSize">1000</property>
	</named-config>
</c3p0-config> 
4.dao实现类
package www.csdn.dao;

import java.sql.SQLException;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;

import www.csdn.domain.User;
import com.csdn.util.DBManager;

public class ActionDao {
	
	public User login(String username,String password)throws SQLException{
		QueryRunner qr = new QueryRunner(DBManager.getDataSource());
		String sql = "select * from login where username = ? and password = ?";
		Object[] params = {username,password};
		User user = (User) qr.query(sql,params,new BeanHandler(User.class));
		return user;
		
	}

}
5.action主要类
package www.csdn.struts2.demo;

import java.sql.SQLException;

import www.csdn.dao.ActionDao;
import www.csdn.domain.User;

import com.opensymphony.xwork2.ActionSupport;

/***
 * 
 * 自己编写的action类可以不继承ActionSupport,不继承直接使用自己编写的类不会出错;
 * 但是大多数情况下要继承ActionSupport类或实现Action接口,因为ActionSupport类中封装了大多数需要的常量,
 * 继承之后就可以直接使用这些常量而不需要再自己去定义
 */
public class DemoAction extends ActionSupport{
	
	//封装请求的参数,必须与jsp页面中的input标签的username名字相同
	private String username;
	private String password;
	private User entity;
	//set方法用于获取jsp页面传过来的参数
	public void setUsername(String username) {
		this.username = username;
	}		
	public void setPassword(String password) {
		this.password = password;
	}
	public User getEntity() {
		return entity;
	}
	
	//get方法用于从action中获取值传到web的jsp页面输出	
/*	public String getUsername() {
		return username;
	}*/

	
	public String login(){
		ActionDao dao = new ActionDao();
		try {
			entity = dao.login(username,password);
		} catch (SQLException e) {
			e.printStackTrace();
		}
		if(entity != null){			
			return SUCCESS;
		}else{
			return LOGIN;
		}
	}

	
	
	public String execute(){
		System.out.println("处理中。。。。。。");
		return SUCCESS;
	}
}
6.util工具类
package com.csdn.util;

import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class DBManager {
	private static ComboPooledDataSource ds = null;
	static{
		//这里要注意的是:xml配置文件的名字一定要是c3p0-config.xml,可以doc参考帮助,帮助中有命名,如果名字写错了会无法加载驱动,空指针的错
		ds = new ComboPooledDataSource("mysql");
	}
    public static Connection getCon() throws SQLException{
    	return ds.getConnection();
    }
    public static DataSource getDataSource(){
    	return ds;
    }
}


 

你可能感兴趣的:(struts2.X心得2--第一个struts2案例分析以及整合c3p0连接数据库案例分析)