S2S3H4 SSH框架 搭建 环境配置及测试



struts2.1 + spring 3.1 + hibernate 4.1.4 集成
 使用以下jar包。
myeclipse2014版本自带这些包。eclipse推荐使用maven管理jar包,方便使用。

 

antlr-2.7.7.jar
aopalliance-1.0.jar
asm-3.1.jar
aspectjweaver-1.6.9.jar
c3p0-0.9.1.2.jar
cglib-nodep-2.2.jar
classworlds-1.1.jar
commons-beanutils-1.7.0.jar
commons-chain-1.2.jar
commons-collections-3.2.jar
commons-dbcp-1.4.jar
commons-digester-2.0.jar
commons-fileupload-1.2.1.jar
commons-httpclient-3.1.jar
commons-io-1.3.2.jar
commons-lang-2.5.jar
commons-logging-1.1.1.jar
commons-logging-api-1.1.jar
commons-pool-1.5.3.jar
commons-validator-1.3.1.jar
dom4j-1.6.1.jar
freemarker-2.3.16.jar
hibernate-commons-annotations-4.0.1.Final.jar
hibernate-core-4.1.4.Final.jar
hibernate-entitymanager-4.1.4.Final.jar
hibernate-jpa-2.0-api-1.0.1.Final.jar
javassist-3.15.0-GA.jar
javassist-3.7.ga.jar
javax.servlet.jsp.jstl.jar
jboss-logging-3.1.0.GA.jar
jboss-transaction-api_1.1_spec-1.0.0.Final.jar
jersey-core-1.4.jar
jersey-server-1.4.jar
json-lib-2.1-jdk15.jar
jsr311-api-1.1.1.jar
jstl-impl.jar
log4j-1.2.16.jar
mysql-connector-java-5.1.13.jar
ognl-3.0.jar
org.springframework.aop-3.1.1.RELEASE.jar
org.springframework.asm-3.1.1.RELEASE.jar
org.springframework.aspects-3.1.1.RELEASE.jar
org.springframework.beans-3.1.1.RELEASE.jar
org.springframework.context-3.1.1.RELEASE.jar
org.springframework.context.support-3.1.1.RELEASE.jar
org.springframework.core-3.1.1.RELEASE.jar
org.springframework.expression-3.1.1.RELEASE.jar
org.springframework.instrument-3.1.1.RELEASE.jar
org.springframework.instrument.tomcat-3.1.1.RELEASE.jar
org.springframework.jdbc-3.1.1.RELEASE.jar
org.springframework.jms-3.1.1.RELEASE.jar
org.springframework.orm-3.1.1.RELEASE.jar
org.springframework.oxm-3.1.1.RELEASE.jar
org.springframework.transaction-3.1.1.RELEASE.jar
org.springframework.web-3.1.1.RELEASE.jar
org.springframework.web.portlet-3.1.1.RELEASE.jar
org.springframework.web.servlet-3.1.1.RELEASE.jar
org.springframework.web.struts-3.1.1.RELEASE.jar
oro-2.0.8.jar
proxool-0.9.1.jar
proxool-cglib.jar
slf4j-api-1.6.1.jar
sslext-1.2-0.jar
struts2-convention-plugin-2.2.1.jar
struts2-core-2.2.1.jar
struts2-embeddedjsp-plugin-2.2.1.jar
struts2-json-plugin-2.2.1.jar
struts2-spring-plugin-2.2.1.jar
xwork-core-2.2.1.jar


 

配置:
web.xml
加入spring ContextLoaderListener 监听和struts2 StrutsPrepareAndExecuteFilter 过滤器
 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee [url]http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd[/url]" version="3.0">
    <display-name>weiwo</display-name>
 
    <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>
    <listener>
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
    </listener>
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:applicationContext.xml</param-value>
    </context-param>
</web-app>
 



 applicationContext.xml 其中action service dao都分开管理

 
<?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"
 xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans-3.1.xsd[/url]">
 
 <import resource="applicationContext-action.xml" />
 <import resource="applicationContext-service.xml" />
 <import resource="applicationContext-dao.xml" />
 
</beans>


 


 struts.xml struts的action交由spring管理。所以一定要使用struts2-spring-plugin-2.2.1.jar插件
 

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN" "http://struts.apache.org/dtds/struts-2.1.dtd" >
<struts>
    <!-- 开启使用开发模式,详细错误提示 -->
    <constant name="struts.devMode" value="true" />
    <!-- 指定资源编码 -->
    <constant name="struts.i18n.encoding" value="UTF-8" />
    <!-- 默认后缀名 -->
    <constant name="struts.action.extension" value="action" />
    <!-- 将对象交给spring管理 -->
    <!-- <constant name="struts.objectFactory" value="spring" /> -->
    <!-- <constant name="struts.objectFactory.spring.autoWire" value="name" /> -->
    <!-- 设置Web应用的默认Locale为zh_CN -->
    <constant name="struts.locale" value="zh_CN" />
    <!-- struts配置文件更改后是否重新加载 -->
    <constant name="struts.configuration.xml.reload" value="true" />
    <!-- 设置浏览器是否缓存静态内容 -->
    <constant name="struts.serve.static.browserCache" value="true" />
    <package name="pan-default" extends="struts-default" namespace="/">
    </package>
<!--这是一个测试action,class配置的不是类名,而是spring中对应bean的id-->
 <package name="admin" namespace="/a" extends="pan-default">
        <action name="user_*" class="test" method="{1}">
            <result name="success">/page/test/test.jsp</result>
            <result name="loginsuccess">/page/test/loginsuccess.jsp</result>
        </action>
    </package>
</struts>


 


 applicationContext-action.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans-3.1.xsd[/url]">
<!--这里的bean是struts的action,id是struts中配置的class属性,scope一定要用prototype,而且最好加上autowire 属性,会自动注入依赖bean-->
 <bean id="test" class="com.weiwo.billing.test.TestAction"  scope="prototype" autowire="byName"/>
 
</beans>


 


 jdbc.properties 配置一些属性,使用key value形式,可以在spring中引入。
 

proxool.maxConnCount=10
proxool.minConnCount=5
proxool.statistics=1m,15m,1h,1d
proxool.simultaneousBuildThrottle=30
proxool.trace=false
 
jdbc.driverClassName=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://127.0.0.1:3306/xjb?useUnicode=true&characterEncoding=utf8&autoReconnect=true&rewriteBatchedStatements=true
jdbc.username=root
jdbc.password=root


 applicationContext-dao.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans-3.1.xsd[/url]">
 
    <!-- 引入配置文件 -->
    <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="locations">
            <list>
                <value>classpath:jdbc.properties</value>
            </list>
        </property>
    </bean>
 
    <!-- 数据源,使用的是proxool连接池 -->
    <bean id="dataSource" class="org.springframework.jdbc.datasource.LazyConnectionDataSourceProxy">
        <property name="targetDataSource">
            <bean class="org.logicalcobwebs.proxool.ProxoolDataSource">
                <property name="driver" value="${jdbc.driverClassName}" />
                <property name="driverUrl" value="${jdbc.url}" />
                <property name="user" value="${jdbc.username}" />
                <property name="password" value="${jdbc.password}" />
                <property name="maximumConnectionCount" value="${proxool.maxConnCount}" />
                <property name="minimumConnectionCount" value="${proxool.minConnCount}" />
                <property name="statistics" value="${proxool.statistics}" />
                <property name="simultaneousBuildThrottle" value="${proxool.simultaneousBuildThrottle}" />
                <property name="trace" value="${proxool.trace}" />
            </bean>
        </property>
    </bean>
 
<!--mappingDirectoryLocations属性可以直接部署一个目录下的所有 .hbm.xml文件,不需要一个一个定义。value为空时,会部署整个项目下的所有vo文件-->
 <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="mappingDirectoryLocations">
            <list>
                <value></value>
            </list>
        </property>
<!--配置一些hibernate参数,如,显示sql,方言等等,如果hibernate3有一些类型不支持,可以使用自定义方言映射,貌似4里面不能了,不知道是不是要使用其它方法-->
    <property name="hibernateProperties">
            <value>
                hibernate.dialect=com.weiwo.orm.base.MyselfSQLDialect
                hibernate.show_sql=true
            </value>
        </property>
 
    </bean>
<!--配置dao,hibernate3里面是使用继承 HibernateTemplate来使用的,但是hibernate4不再有这个,需要傅sessionFactory.getCurrentSession()来获取并使用-->
 <bean id="dao" class="com.weiwo.orm.dao.base.GeneralDao">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
</beans>



 applicationContext-service.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"
    xsi:schemaLocation="http://www.springframework.org/schema/beans [url]http://www.springframework.org/schema/beans/spring-beans-3.1.xsd[/url]">
    <!-- hibernate事务类声名 -->
    <bean id="hibernateTransactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory" />
    </bean>
    <!-- Spring代理事务 -->
    <bean id="springTransactionProxyFactoryBean" abstract="true" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
        <property name="transactionManager">
            <ref bean="hibernateTransactionManager" />
        </property>
        <property name="transactionAttributes">
            <props>
                <prop key="create*">
                    PROPAGATION_REQUIRED,-java.lang.Exception
                </prop>
                <prop key="save*">
                    PROPAGATION_REQUIRED,-java.lang.Exception
                </prop>
                <prop key="remove*">
                    PROPAGATION_REQUIRED,-java.lang.Exception
                </prop>
                <prop key="update*">
                    PROPAGATION_REQUIRED,-java.lang.Exception
                </prop>
                <prop key="del*">
                    PROPAGATION_REQUIRED,-java.lang.Exception
                </prop>
                <prop key="*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>
    </bean>
    <!-- 基础service定义 -->
    <bean id="service" class="com.weiwo.business.service.GeneralService" autowire="byName" />
 
    <bean id="generalService" class="com.weiwo.business.service.GeneralService" autowire="byName" />
 
    <!-- 其它service定义 -->
    <bean id="userServiceImp" class="com.weiwo.business.service.user.imp.UserServiceImp" autowire="byName" />
    <bean id="userService" parent="springTransactionProxyFactoryBean" autowire="byName">
        <property name="target" ref="userServiceImp"></property>
    </bean>
 
</beans>
 

再加上一个log4j的定义(详细定义见其它文章)

log4j.properties
 

log4j.rootCategory=INFO, stdout , R
 
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=[WO] %p [%t] %C.%M(%L) | %m%n
 
log4j.appender.R=org.apache.log4j.DailyRollingFileAppender
log4j.appender.R.DatePattern='.'yyyy-MM-dd 
log4j.appender.R.File=/logs/weiwo_logs/notify-subscription.log 
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d-[WO] %p %t %c - %m%n
log4j.appender.R.Append=true


 


到这里,所有的配置文件就定义完成了,到此需要做的就是测试一下是不是能用了。
 测试需要新建数据库
users表
 

CREATE TABLE `users` (
  `uid` mediumint(9) NOT NULL AUTO_INCREMENT,
  `loginid` varchar(64) NOT NULL COMMENT '登录名',
  `username` varchar(64) NOT NULL COMMENT '用户名,默认等于登录名,可修改',
  `password` varchar(32) NOT NULL,
  `realname` varchar(32) NOT NULL DEFAULT '',
  `identity_card_number` varchar(18) NOT NULL DEFAULT '',
  `email` varchar(64) NOT NULL DEFAULT '',
  `avatarstatus` tinyint(1) NOT NULL DEFAULT '0',
  `adminid` tinyint(1) NOT NULL DEFAULT '0',
  `telephone` char(11) DEFAULT '',
  PRIMARY KEY (`uid`),
  UNIQUE KEY `loginid_index` (`loginid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8;

 Users.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">
<!-- 
Mapping file autogenerated by MyEclipse Persistence Tools
-->
<hibernate-mapping>
    <class name="com.weiwo.orm.vo.Users" table="users" catalog="xjb"  dynamic-insert="true" dynamic-update="true">
        <id name="uid" type="integer">
            <column name="uid" />
            <generator class="native"></generator>
        </id>
        <property name="loginid" type="string">
            <column name="loginid" length="64" not-null="true" />
        </property>
        <property name="username" type="string">
            <column name="username" length="64" not-null="true" />
        </property>
        <property name="password" type="string">
            <column name="password" length="32" not-null="true" />
        </property>
        <property name="realname" type="string">
            <column name="realname" length="32" not-null="false" />
        </property>
        <property name="identityCardNumber" type="string">
            <column name="identity_card_number" length="18" not-null="false" />
        </property>
        <property name="email" type="string">
            <column name="email" length="64" not-null="false" />
        </property>
        <property name="avatarstatus" type="boolean">
            <column name="avatarstatus" not-null="false" />
        </property>
        <property name="adminid" type="boolean">
            <column name="adminid" not-null="false" />
        </property>
        <property name="telephone" type="string">
            <column name="telephone" length="11" not-null="false" />
        </property>
    </class>
</hibernate-mapping>
 


 Users.java vo类
 

package com.weiwo.orm.vo;
 
import com.weiwo.orm.vo.base.GeneralVo;
 
/**
 * users entity. @author MyEclipse Persistence Tools
 */
 
public class Users extends GeneralVo implements java.io.Serializable {
 
    // Fields
 
    private Integer uid;
    private String loginid;
    private String username;
    private String password;
    private String realname;
    private String identityCardNumber;
    private String email;
    private boolean avatarstatus;
    private boolean adminid;
    private String telephone;
 
    // Constructors
 
    /** default constructor */
    public Users() {
    }
 
    /** full constructor */
    public Users(Integer uid, String loginid, String username, String password, String realname, String identityCardNumber, String email, boolean avatarstatus, boolean adminid,
            String telephone) {
        super();
        this.uid = uid;
        this.loginid = loginid;
        this.username = username;
        this.password = password;
        this.realname = realname;
        this.identityCardNumber = identityCardNumber;
        this.email = email;
        this.avatarstatus = avatarstatus;
        this.adminid = adminid;
        this.telephone = telephone;
    }
 
    // Property accessors
 
    public Integer getUid() {
        return uid;
    }
 
    public void setUid(Integer uid) {
        this.uid = uid;
    }
 
    public String getLoginid() {
        return loginid;
    }
 
    public void setLoginid(String loginid) {
        this.loginid = loginid;
    }
 
    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 getRealname() {
        return realname;
    }
 
    public void setRealname(String realname) {
        this.realname = realname;
    }
 
    public String getIdentityCardNumber() {
        return identityCardNumber;
    }
 
    public void setIdentityCardNumber(String identityCardNumber) {
        this.identityCardNumber = identityCardNumber;
    }
 
    public String getEmail() {
        return email;
    }
 
    public void setEmail(String email) {
        this.email = email;
    }
 
    public boolean getAvatarstatus() {
        return avatarstatus;
    }
 
    public void setAvatarstatus(boolean avatarstatus) {
        this.avatarstatus = avatarstatus;
    }
 
    public boolean getAdminid() {
        return adminid;
    }
 
    public void setAdminid(boolean adminid) {
        this.adminid = adminid;
    }
 
    public String getTelephone() {
        return telephone;
    }
 
    public void setTelephone(String telephone) {
        this.telephone = telephone;
    }
 
}
 



 Dao.java 这个只是接口,基础generalDao需要实现这个类,其它的dao要继承generalDao (service层同理)
 

package com.weiwo.orm.dao.base;
 
import java.util.List;
 
import org.hibernate.criterion.DetachedCriteria;
 
/**
 * A data access object (DAO) providing persistence and search support for T
 * entities. Transaction control of the save(), update() and delete() operations
 * can directly support Spring container-managed transactions or they can be
 * augmented to handle user-managed Spring transactions. Each of these methods
 * provides additional information for how to configure it for the desired type
 * of transaction control.
 * 
 * @see com.hibernate.voDao.T
 * @author MyEclipse Persistence Tools
 */
public interface Dao<T> {
    public T save();
 
    public T delete(T instance);
 
    public int executeBySql(String sql);
 
    public int executeByHql(String hql);
 
    public List getBySql(String sql);
 
    public List getByHql(String hql);
 
    public List<T> getByDetachedCriteria(DetachedCriteria dc);
 
}


 

 GeneralDao.java 常用的方法都写在这个基础的dao里面,其它dao继承自此类
 

package com.weiwo.orm.dao.base;
 
import java.util.List;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.criterion.DetachedCriteria;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
 
import com.weiwo.orm.vo.base.GeneralVo;
 
/**
 * A data access object (DAO) providing persistence and search support for T
 * entities. Transaction control of the save(), update() and delete() operations
 * can directly support Spring container-managed transactions or they can be
 * augmented to handle user-managed Spring transactions. Each of these methods
 * provides additional information for how to configure it for the desired type
 * of transaction control.
 * 
 * @see com.hibernate.voDao.T
 * @author MyEclipse Persistence Tools
 */
public class GeneralDao implements Dao<GeneralVo> {
    private static final Logger log = LoggerFactory.getLogger(GeneralDao.class);
    private SessionFactory sessionFactory;
 
    public SessionFactory getSessionFactory() {
        return sessionFactory;
    }
 
    public void setSessionFactory(SessionFactory sessionFactory) {
        this.sessionFactory = sessionFactory;
    }
 
    /**
     * @return
     * @createTime 2014-11-22 下午9:33:57
     */
    private Session getSession() {
        return getSessionFactory().getCurrentSession();
    }
 
    @Override
    public GeneralVo save() {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public GeneralVo delete(GeneralVo instance) {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public int executeBySql(String sql) {
        // TODO Auto-generated method stub
        return 0;
    }
 
    @Override
    public int executeByHql(String hql) {
        // TODO Auto-generated method stub
        return 0;
    }
 
    @Override
    public List getBySql(String sql) {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public List getByHql(String hql) {
        // TODO Auto-generated method stub
        return null;
    }
 
    @Override
    public List<GeneralVo> getByDetachedCriteria(DetachedCriteria dc) {
 
        return dc.getExecutableCriteria(getSession()).list();
    }
 
}

 UserDao.java 用户dao,用户操作处理,如果不需要做bo,则可以把常用的几个增删改查写入到基础dao里面,然后所有的service都调用它,不需要为每一个类都写一个dao,因为在一般不是很复杂的系统中,数据库操作都是相似,只是业务逻辑不同,可以在service层区分
 
/**
 * 
 * @auther wuwang
 * @createTime 2014-11-22 下午12:37:52
 */
package com.weiwo.orm.dao;
 
import com.weiwo.orm.dao.base.GeneralDao;
 
/**
 * 
 * 
 * @author peaches
 */
public class UserDao extends GeneralDao {
 
}


 Service.java 和 GeneralService.java都是空对象。测试的时候没写内容,这里就不贴出来了

UserService.java

/**
 * 
 * @auther wuwang
 * @createTime 2014-11-22 下午8:23:46
 */
package com.weiwo.business.service.user;
 
/**
 * 
 * 
 * @author peaches
 */
public interface UserService {
 
    public String login(String loginid, String password);
}


 


 UserServiceImp.java
 

/**
 * 
 * @auther wuwang
 * @createTime 2014-11-22 下午8:23:46
 */
package com.weiwo.business.service.user.imp;
 
import java.util.List;
 
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;
 
import com.weiwo.business.service.GeneralService;
import com.weiwo.business.service.user.UserService;
import com.weiwo.orm.dao.base.Dao;
import com.weiwo.orm.vo.Users;
 
/**
 * 
 * 
 * @author peaches
 */
public class UserServiceImp extends GeneralService implements UserService {
    Dao dao;
 
    public Dao getDao() {
        return dao;
    }
 
    public void setDao(Dao dao) {
        this.dao = dao;
    }
 
    @Override
    public String login(String loginid, String password) {
        DetachedCriteria dc = DetachedCriteria.forClass(Users.class);
        dc.add(Restrictions.eq("loginid", loginid));
        List<Users> list = getDao().getByDetachedCriteria(dc);
        if (list != null && list.size() > 0 && list.get(0) != null) {
            return list.get(0).getPassword();
        }
        return null;
    }
}
 


 TestAction.java

/**
 * 
 * @auther wuwang
 * @createTime 2014-11-18 ����10:52:34
 */
package com.weiwo.billing.test;
 
import org.apache.struts2.ServletActionContext;
 
import com.opensymphony.xwork2.ActionSupport;
import com.weiwo.business.service.user.UserService;
 
/**
 * 
 * 
 * @author peaches
 */
public class TestAction extends ActionSupport {
    private String test;
    private UserService userService;
    private String username;
 
    public String getTest() {
        return test;
    }
 
    public void setTest(String test) {
        this.test = test;
    }
 
    public UserService getUserService() {
        return userService;
    }
 
    public void setUserService(UserService userService) {
        this.userService = userService;
    }
 
    public String getUsername() {
        return username;
    }
 
    public void setUsername(String username) {
        this.username = username;
    }
 
    public String me() {
        test = "Spring+Struts+Success";
        System.out.println(test);
        System.out.println(ServletActionContext.getRequest().getServerName());
        System.out.println(ServletActionContext.getRequest().getParameter("a"));
        return "success";
    }
 
    public String login() {
        String passwd = getUserService().login(getUsername(), "");
        System.out.println("---" + passwd);
        return test;
    }
}


 

 test.jsp

 

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
 
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
 
    <title>My JSP 'test.jsp' starting page</title>
 
  </head>
 
  <body>
   ${test}  <br>
   <s:property value="{#this.test}"/>
  </body>
</html>
 



启动项目:
1. 浏览器输入:http://127.0.0.1:8080/项目名/a/user_me.action
可以看到输出
Spring+Struts+Success 
    [Spring+Struts+Success]
 2. 浏览器输入:http://127.0.0.1:8080/项目名/a/user_login.action?usename=数据库里面的用户名
 可以看到控制台输出的密码信息

 到此就结束了~
希望能够帮到一些刚学习的人。
 我的同学和我一起上班的,他说他现在还不能把ssh框架搭起来。我觉得这些都是很正常的。在忙碌的工作中,很少有时间去关注这个环境是怎么配置起来的,下班以后,也很少有人会再去做工作相关的事情,以前的我也不会。但是现在实在是太闲了,没有其它事情可以做,除了编程,貌似没有什么更好的事情可以做了,而且编程也是一件很快乐的事情。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值