手动配置SSH框架

注:本文使用版本:struts-2.3.4、spring-3.2.1、hibernate-4.1.4

一、框架的下载
1、Struts2:http://struts.apache.org/download 
2、Spring:http://www.springsource.org/download/community
3、Hibernate:http://sourceforge.net/projects/hibernate/files/hibernate4/

二、创建项目,添加jar包
1、创建java web项目testSSH.
2、添加struts包:
aopalliance-1.0.jar、
freemarker-2.3.19.jar,
ognl-3.0.5.jar,
struts2-core-2.3.4.jar,
struts2-spring-plugin-2.3.4.jar,
xwork-core-2.3.4.jar,
commons-fileupload-1.2.2.jar、
commons-logging-api-1.1.jar、
commons-io-2.0.1.jar、
commons-lang-2.4.jar、
commons-lang3-3.1.jar、
commons-logging-api-1.1.jar。
3、添加spring包:
spring-aop-3.2.1.RELEASE.jar、
spring-aspects-3.2.1.RELEASE.jar、
spring-beans-3.2.1.RELEASE.jar、
spring-context-3.2.1.RELEASE.jar、
spring-context-support-3.2.1.RELEASE.jar、
spring-core-3.2.1.RELEASE.jar、
spring-expression-3.2.1.RELEASE.jar、
spring-jdbc-3.2.1.RELEASE.jar、
spring-orm-3.2.1.RELEASE.jar、
spring-test-3.2.1.RELEASE.jar、
spring-tx-3.2.1.RELEASE.jar、
spring-web-3.2.1.RELEASE.jar。
4、添加hibernate包:
antlr-2.7.7.jar、
dom4j-1.6.1.jar、
hibernate-commons-annotations-4.0.1.Final.jar、
hibernate-core-4.1.4.Final.jar、
hibernate-jpa-2.0-api-1.0.1.Final.jar、
javassist-3.15.0-GA.jar、
jboss-logging-3.1.0.GA.jar、
jboss-transaction-api_1.1_spec-1.0.0.Final.jar、
ehcache-core-2.4.3.jar、
hibernate-ehcache-4.1.4.Final.jar、
slf4j-api-1.6.1.jar、
c3p0-0.9.1.jar
5、添加其他包:
ojdbc14.jar 【下载地址 http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-10201-088211.html 】
aspectjweaver.jar 【下载地址 http://search.maven.org/remotecontent?filepath=org/aspectj/aspectjweaver/1.6.12/aspectjweaver-1.6.12.jar 】
三、配置struts
1、配置struts核心过滤器。
打开web.xml,配置struts核心过滤器和过滤器映射。
web.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
	<display-name></display-name>
	
	<!-- 定义Struts 2的核心控制器 --> 
	<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>*.action</url-pattern>
	</filter-mapping>

	<listener>
		<listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class>
	</listener>

	<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>
2、建立BaseAction。
新建包com.hsinghsu.testSSH.action,在其中建立类BaseAction,继承ActionSupport类。
BaseAction.java文件代码如下:
package com.hsinghsu.testSSH.action;

import com.opensymphony.xwork2.ActionSupport;

public class BaseAction  extends ActionSupport{

	/**
	 * 
	 */
	private static final long serialVersionUID = 4565394360208096613L;

}
3、编写测试struts的Action。
在包com.hsinghsu.testSSH.action中建立LoginAction类,继承BaseAction,作为简单的struts测试。
LoginAction.java文件代码如下:
package com.hsinghsu.testSSH.action;

public class LoginAction extends BaseAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6144396976094110475L;
	
	public String execute() throws Exception 
	{  
        return "success";  
    }  

}
4、配置action。
在struts.xml文件中,添加对LoginAction的配置。
struts.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.3.dtd">

<struts>
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <constant name="struts.i18n.reload" value="false" />
    <constant name="struts.configuration.xml.reload" value="false" />
    <constant name="struts.custom.i18n.resources" value="globalMessages" />
    <constant name="struts.action.extension" value="action,," />

    <constant name="struts.convention.package.locators.basePackage"
              value="com.hsinghsu.testSSH.action" />
    <constant name="struts.convention.result.path" value="/" />
    <constant name="struts.serve.static" value="true" />
    <constant name="struts.serve.static.browserCache" value="false" />
	
	
	<package name="com.hsinghsu.testSSH.action.test" extends="struts-default">
    	<action name="login" class="com.hsinghsu.testSSH.action.LoginAction">
    		<result name="success">/WEB-INF/jsp/welcome.jsp</result>
    	</action>
    </package>
    
</struts>
5、建立测试jsp页面
新建测试jsp页面welcome.jsp。
welcome.jsp文件代码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>IWelcome</title>
</head>
<body>
Welcome HsingHsu
</body>
</html>
6、配置spring
打开applicationContext.xml文件,配置spring,添加action bean。
applicationContext.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
       ">
	 
</beans>
7、配置Spring监听器
打开web.xml,添加Spring监听器。
web.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0" 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_3_0.xsd">
	<display-name></display-name>
	
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
		classpath:applicationContext.xml
		</param-value>
	</context-param>

	<!-- ssh 中文过滤 -->
	<filter>
		<filter-name>characterEncoding</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
		<init-param>
			<param-name>forceEncoding</param-name>
			<param-value>true</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>characterEncoding</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

	<!-- 定义Struts 2的核心控制器 --> 
	<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>*.action</url-pattern>
	</filter-mapping>

	<!-- 对Spring 容器进行实例化 -->
	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<listener>
		<listener-class>org.apache.struts2.dispatcher.ng.listener.StrutsListener</listener-class>
	</listener>

	<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>
8、配置tomcat并启动,在浏览器中输入http://localhost:8686/testSSH/login.action 
   则页面会显示Welcome HsingHsu。

四、配置hibernate

1、建立数据库与数据表
本文采用oracle数据库,建立T_TEST_USER表,新建列id,name,pwd。插入一条数据,如id:1,name:hsing,pwd:hsu。

2、创建持久层实体类。
创建包com.hsinghsu.testSSH.model,创建User类,添加3个私有成员,对应数据表中3个属性,并一定要添加set和get方法。
User.java文件代码如下:
package com.hsinghsu.testSSH.model;

public class User {
	
	private Long id;  
    private String name;  
    private String pwd;
    
	public Long getId() {
		return id;
	}
	public void setId(Long id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getPwd() {
		return pwd;
	}
	public void setPwd(String pwd) {
		this.pwd = pwd;
	}  
    
}
3、添加映射文件
在com.hsinghsu.testSSH.model包下创建User.hbm.xml,作为User与数据表的映射文件。
User.hbm.xml文件代码如下:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="com.hsinghsu.testSSH.model.User" table="T_TEST_USER">
        <id name="id" type="java.lang.Long">
            <column name="ID" />
            <generator class="native" />
        </id>
        <property name="name" type="java.lang.String">
            <column name="NAME" length="50">
            </column>
        </property>
        <property name="pwd" type="java.lang.String">
            <column name="PWD" length="50">
            </column>
        </property>
    </class>
</hibernate-mapping>
4、配置spring,添加hibernate支持。
修改applicationContext.xml文件,添加hibernate支持。
applicationContext.xml文件代码如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
       http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
       http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
       http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
       http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
       ">
       
	<bean id="placeholderConfig"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="location">
			<value>classpath:jdbc.oracle.properties</value>
		</property>
	</bean>

	<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource"
		destroy-method="close">
		<property name="jdbcUrl" value="${hibernate.connection.url}" />
		<property name="driverClass" value="${hibernate.connection.driver_class}" />
		<property name="user" value="${hibernate.connection.username}" />
		<property name="password" value="${hibernate.connection.password}" />
		<property name="acquireIncrement" value="${c3p0.acquireIncrement}" />
		<property name="initialPoolSize" value="${c3p0.initialPoolSize}" />
		<property name="minPoolSize" value="${c3p0.minPoolSize}" />
		<property name="maxPoolSize" value="${c3p0.maxPoolSize}" />
		<property name="maxStatements" value="${c3p0.maxStatements}" />
		<property name="numHelperThreads" value="${c3p0.numHelperThreads}" />
		<property name="maxIdleTime" value="${c3p0.maxIdleTime}" />
	</bean>
	 
	<bean id="sessionFactory"
		class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
   		  
   		<property name="mappingResources">
            <list>
                <value>com/hsinghsu/testSSH/model/User.hbm.xml</value>
            </list>
        </property>

          <property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">${hibernate.dialect}</prop>
				<prop key="hibernate.show_sql">${hibernate.show_sql}</prop>
				<prop key="hibernate.generate_statistics">true</prop>
				<prop key="hibernate.max_fetch_depth">${hibernate.max_fetch_depth}</prop>
				<prop key="hibernate.jdbc.batch_versioned_data">${hibernate.jdbc.batch_versioned_data}</prop>
				<prop key="hibernate.batch_size">${hibernate.jdbc.batch_size}</prop>
				<prop key="hibernate.connection.release_mode">auto</prop>
				<prop key="hibernate.autoReconnect">true</prop>
				<prop key="hibernate.use_sql_comments">false</prop>
				<prop key="hibernate.cglib.use_reflection_optimizer">true</prop>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.format_sql">${hibernate.format_sql}</prop>
			</props>
		</property>
	</bean>
	
	<bean id="transactionManager"
		class="org.springframework.orm.hibernate4.HibernateTransactionManager"
		p:sessionFactory-ref="sessionFactory" />
	<tx:advice id="txAdvice" transaction-manager="transactionManager">
		<tx:attributes>
			<tx:method name="save*" propagation="REQUIRED" />
			<tx:method name="add*" propagation="REQUIRED" />
			<tx:method name="create*" propagation="REQUIRED" />
			<tx:method name="insert*" propagation="REQUIRED" />
			<tx:method name="update*" propagation="REQUIRED" />
			<tx:method name="merge*" propagation="REQUIRED" />
			<tx:method name="del*" propagation="REQUIRED" />
			<tx:method name="remove*" propagation="REQUIRED" />
			<tx:method name="put*" propagation="REQUIRED" />
			<tx:method name="use*" propagation="REQUIRED" />
			<!--hibernate4必须配置为开启事务 否则 getCurrentSession()获取不到 -->
			<tx:method name="get*" propagation="REQUIRED" read-only="true" />
			<tx:method name="count*" propagation="REQUIRED" read-only="true" />
			<tx:method name="find*" propagation="REQUIRED" read-only="true" />
			<tx:method name="list*" propagation="REQUIRED" read-only="true" />
			<tx:method name="*" read-only="true" />
		</tx:attributes>
	</tx:advice>
	
	<aop:config proxy-target-class="true">
		<aop:advisor
			pointcut="(execution(* com.hsinghsu.testSSH.dao.impl.*.*(..))) OR execution(* com.hsinghsu.testSSH.dao.impl.*.*(..))"
			advice-ref="txAdvice" />
	</aop:config>
	 
	<context:component-scan base-package="com.hsinghsu.testSSH">
		<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller" />
	</context:component-scan>
	
</beans>
		
5、配置hibernate数据库连接等配置。
新建jdbc.oracle.properties文件。
jdbc.oracle.properties文件代码如下:
hibernate.query.substitutions yes 'Y', no 'N'
hibernate.show_sql true

hibernate.dialect  org.hibernate.dialect.Oracle10gDialect
hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver
hibernate.connection.url jdbc:oracle:thin:@127.0.0.1:1521:ora11g
hibernate.connection.username testadm
hibernate.connection.password testadm
set the maximum depth of the outer join fetch tree

hibernate.connection.pool_size 1
hibernate.proxool.pool_alias pool1
hibernate.format_sql false

hibernate.use_sql_comments true

hibernate.max_fetch_depth 1
hibernate.jdbc.batch_versioned_data true
hibernate.jdbc.batch_size 28
hibernate.jdbc.use_streams_for_binary true

hibernate.testsql=select count(*) from dual
hibernate.active = 8
hibernate.minidle = 8
hibernate.maxidle = 8
hibernate.maxwait = -1
hibernate.checkAfterUsed=true

c3p0.acquireIncrement=3
c3p0.idleConnectionTextPeriod=900
c3p0.minPoolSize=2
c3p0.maxPoolSize=50
c3p0.maxStatements=100
c3p0.numHelperThreads=10
c3p0.maxIdleTime=600
c3p0.initialPoolSize=3
五、编写java代码
1、编写DAO接口
新建包com.hsinghsu.testSSH.dao,创建接口UserDao。
UserDao.java文件代码如下:
package com.hsinghsu.testSSH.dao;

import com.hsinghsu.testSSH.model.User;

public interface UserDao 
{
	public User getUserByName(String name); 
}
2、编写DAO实现
新建包com.hsinghsu.testSSH.dao.impl,创建实现类UserDaoImpl。
UserDaoImpl.java文件代码如下:
package com.hsinghsu.testSSH.dao.impl;

import java.util.ArrayList;
import java.util.List;

import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.Restrictions;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Repository;

import com.hsinghsu.testSSH.dao.UserDao;
import com.hsinghsu.testSSH.model.User;

@Repository(value = "userDao")
public class UserDaoImpl implements UserDao 
{
	@Autowired
	private SessionFactory sessionFactory;
	
	public User getUserByName(String name)
	{
		Session session = sessionFactory.getCurrentSession();
		List<User> list = new ArrayList<User>(); 
		
		//通过Hibernate的Criteria查询  
		Criteria criteria = session.createCriteria(User.class);  
		if (!(null == name && "".equals(name))) 
		{  
			criteria.add(Restrictions.eq("name", name));  
		}  
		list = criteria.list();  
		
	    if(list != null && list.size() > 0) 
	    {
	        return list.get(0);  
	    }
	    return null;  
	}
	
}
3、编写SERVICE接口
新建包com.hsinghsu.testSSH.service,创建接口UserService。
UserService.java文件代码如下:
package com.hsinghsu.testSSH.service;

public interface UserService {
	public boolean login(String name, String password);
}
4、编写SERVICE实现
新建包com.hsinghsu.testSSH.service.impl,创建类UserServiceImpl。
UserServiceImpl.java文件代码如下:
package com.hsinghsu.testSSH.service.impl;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.hsinghsu.testSSH.dao.UserDao;
import com.hsinghsu.testSSH.model.User;
import com.hsinghsu.testSSH.service.UserService;


@Service(value = "userService")
public class UserServiceImpl implements UserService{
	
	 @Autowired
	 private UserDao userDao;  
	 
	 public boolean login(String name, String password) 
	 {  
	     User user = userDao.getUserByName(name);  
	     
	     if(user!=null)
	     {
	         if(password.equals(user.getPwd()))
	         {
	             return true;  
	         }
	     }
	     return false;  
	 }  
	 
}
5、修改action类
编辑修改LoginAction类。
LoginAction.java文件代码如下:
package com.hsinghsu.testSSH.action;

import org.springframework.beans.factory.annotation.Autowired;

import com.hsinghsu.testSSH.service.UserService;

public class LoginAction extends BaseAction {

	/**
	 * 
	 */
	private static final long serialVersionUID = -6144396976094110475L;
	
	@Autowired
	private UserService userService; 
	
	private String username;  
	private String password;
	
	public String execute() throws Exception 
	{  
		System.out.println("username:"+username+" password:"+password);
		if(userService.login(username,password))  
		{
            return "success";  
		}
        return "error";  
    }

	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;
	}  
	
}
6、新建用户登录页面。
添加login.jsp。
login.jsp文件代码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Insert title here</title>
</head>
<body>
	<form action="login.action" method="post">  
        Name:<input type="text" name="username"/><br/>  
        Password:<input type="password" name="password"/><br/>  
        <input type="submit" value="Submit"/>   
    </form>
</body>
</html>
7、修改welcome.jsp页面。
welcome.jsp文件代码如下:
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib uri="/struts-tags" prefix="s" %>  
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>IWelcome</title>
</head>
<body>
Welcome <s:property value="username"/>
</body>
</html>
8、修改struts.xml配置文件
struts.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.3.dtd">

<struts>
    <constant name="struts.objectFactory" value="spring" />
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <constant name="struts.i18n.reload" value="false" />
    <constant name="struts.configuration.xml.reload" value="false" />
    <constant name="struts.custom.i18n.resources" value="globalMessages" />
    <constant name="struts.action.extension" value="action,," />

    <constant name="struts.convention.package.locators.basePackage"
              value="com.hsinghsu.testSSH.action" />
    <constant name="struts.convention.result.path" value="/" />

    <constant name="struts.serve.static" value="true" />
    <constant name="struts.serve.static.browserCache" value="false" />
	
	
	<package name="com.hsinghsu.testSSH.action.test" extends="struts-default">
    	<action name="loginform">  
            <result name="success">  
                /WEB-INF/jsp/login.jsp  
            </result>  
        </action>
    	<action name="login" class="com.hsinghsu.testSSH.action.LoginAction">  
            <result name="success">  
                /WEB-INF/jsp/welcome.jsp  
            </result>  
            <result name="error">  
                /WEB-INF/jsp/login.jsp  
            </result>  
        </action>  
    </package>
    
</struts>
9、运行tomcat,在浏览器中输入http://localhost:8686/testSSH/loginform.action 会显示登录页面,如果成功会显示welcome+UserName。失败则会继续要求登录。


注:i.文件结构为:/src/main/resources,src/main/java,并将其添加到build path中。【Java Build Path - Add Folder】
ii./src/main/resources下文件有:struts.xml、applicationContext.xml、jdbc.oracle.properties
src/main/java下包结构为:com.hsinghsu.testSSH.model、com.hsinghsu.testSSH.dao、com.hsinghsu.testSSH.dao.impl、com.hsinghsu.testSSH.service、com.hsinghsu.testSSH.service.impl、com.hsinghsu.testSSH.action。
iii.修改web的输出目录,Java Build Path - Default output folder:testSSH/WebContent/WEB-INF/classes。
iv.添加jar包时将jar包放在WebContent/WEB-INF/lib文件夹下。



  • 5
    点赞
  • 57
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值