ssh框架编程范例(转,用做参考)

经过几天的折腾,总算把J2EE的SSH框架搭建起来了。

第一步:
安装 Jdk , MyEcplise , Tomcat
下载Struts2.3.14, Spring3.2.2 ,Hibernate4.2.0
lib列表
这里写图片描述
如果使用proxool数据连接池技术 必须加入proxool-0.9.1.jar和proxool-cglib.jar
除了proxool之外,还有DBCP和C3P0数据连接池技术。DBCP不建议使用,proxool和C3P0都是商业级,但proxool相对更加稳定。
如果采用mysql数据库,则必须加上mysql-connector-java-5.1.22-bin.jar。
如果采用其它数据库,需加入相应的jar文件。
最终项目的目录结构:
这里写图片描述

第二步:
web.xml的配置

<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="hljs-tag"><<span class="hljs-title">web-app</span> <span class="hljs-attribute">version</span>=<span class="hljs-value">"3.0"</span> 
    <span class="hljs-attribute">xmlns</span>=<span class="hljs-value">"http://java.sun.com/xml/ns/javaee"</span> 
    <span class="hljs-attribute">xmlns:xsi</span>=<span class="hljs-value">"http://www.w3.org/2001/XMLSchema-instance"</span> 
    <span class="hljs-attribute">xsi:schemaLocation</span>=<span class="hljs-value">"http://java.sun.com/xml/ns/javaee 
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"</span>></span>
  <span class="hljs-tag"><<span class="hljs-title">display-name</span>></span>SSH<span class="hljs-tag"></<span class="hljs-title">display-name</span>></span>

  <span class="hljs-comment"><!-- spring容器配置 --></span>
  <span class="hljs-tag"><<span class="hljs-title">context-param</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">param-name</span>></span>contextConfigLocation<span class="hljs-tag"></<span class="hljs-title">param-name</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">param-value</span>></span>/WEB-INF/applicationContext.xml<span class="hljs-tag"></<span class="hljs-title">param-value</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">context-param</span>></span>

  <span class="hljs-comment"><!-- spring容器监听器 --></span>
  <span class="hljs-tag"><<span class="hljs-title">listener</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">listener-class</span>></span>org.springframework.web.context.ContextLoaderListener<span class="hljs-tag"></<span class="hljs-title">listener-class</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">listener</span>></span>

  <span class="hljs-comment"><!-- struts2容器控制器 --></span>
  <span class="hljs-tag"><<span class="hljs-title">filter</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>struts2<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">filter-class</span>></span>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter<span class="hljs-tag"></<span class="hljs-title">filter-class</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">filter</span>></span>
  <span class="hljs-tag"><<span class="hljs-title">filter-mapping</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">filter-name</span>></span>struts2<span class="hljs-tag"></<span class="hljs-title">filter-name</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">url-pattern</span>></span>/*<span class="hljs-tag"></<span class="hljs-title">url-pattern</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">filter-mapping</span>></span>

  <span class="hljs-comment"><!-- 欢迎页面 --></span>
  <span class="hljs-tag"><<span class="hljs-title">welcome-file-list</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">welcome-file</span>></span>login.jsp<span class="hljs-tag"></<span class="hljs-title">welcome-file</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">welcome-file-list</span>></span>
<span class="hljs-tag"></<span class="hljs-title">web-app</span>></span>
</code>

第三步:
配置数据库

jdbc.properties

<code class="hljs avrasm has-numbering">proxool<span class="hljs-preprocessor">.maxConnCount</span>=<span class="hljs-number">5</span>
proxool<span class="hljs-preprocessor">.minConnCount</span>=<span class="hljs-number">2</span>
proxool<span class="hljs-preprocessor">.statistics</span>=<span class="hljs-number">1</span>m,<span class="hljs-number">15</span>m,<span class="hljs-number">1</span>h,<span class="hljs-number">1</span>d
proxool<span class="hljs-preprocessor">.simultaneousBuildThrottle</span>=<span class="hljs-number">5</span>
proxool<span class="hljs-preprocessor">.trace</span>=false
proxool<span class="hljs-preprocessor">.verbose</span>=false

jdbc<span class="hljs-preprocessor">.driverClassName</span>=<span class="hljs-keyword">com</span><span class="hljs-preprocessor">.mysql</span><span class="hljs-preprocessor">.jdbc</span><span class="hljs-preprocessor">.Driver</span>
jdbc<span class="hljs-preprocessor">.url</span>=jdbc\:mysql\://localhost\:<span class="hljs-number">3306</span>/test?characterEncoding\=gbk
jdbc<span class="hljs-preprocessor">.username</span>=lee
jdbc<span class="hljs-preprocessor">.password</span>=lee</code>

applicationContext.xml

<code class="hljs xml has-numbering"><span class="hljs-comment"><!-- 指定jdbc路径 --></span>
<span class="hljs-tag"><<span class="hljs-title">bean</span>       <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span>></span>  
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"locations"</span>  
            <span class="hljs-attribute">value</span>=<span class="hljs-value">"classpath:jdbc.properties"</span> /></span>  
    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

    <span class="hljs-comment"><!-- 指定数据源 --></span>
    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"dataSource"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.logicalcobwebs.proxool.ProxoolDataSource"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"driver"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.driverClassName}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"driverUrl"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.url}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"user"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.username}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"password"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.password}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"maximumConnectionCount"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.maxConnCount}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"minimumConnectionCount"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.minConnCount}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"statistics"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.statistics}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"simultaneousBuildThrottle"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.simultaneousBuildThrottle}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"trace"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.trace}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"verbose"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.verbose}"</span> /></span>
   <span class="hljs-tag"></<span class="hljs-title">bean</span>></span></code>

第四步:
建立po对象,通过hibernate进行持久化。编写数据库逻辑层。

User.java

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.model;

<span class="hljs-keyword">import</span> javax.persistence.*;

<span class="hljs-annotation">@Entity</span>
<span class="hljs-annotation">@Table</span>(name=<span class="hljs-string">"stock"</span>)
<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span> {</span>
    <span class="hljs-keyword">private</span> Integer Id;
    <span class="hljs-keyword">private</span> String Name;
    <span class="hljs-keyword">private</span> String Pass;

    <span class="hljs-annotation">@Id</span>
    <span class="hljs-annotation">@GeneratedValue</span>
    <span class="hljs-keyword">public</span> Integer <span class="hljs-title">getId</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.Id;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setId</span>(Integer Id) {
        <span class="hljs-keyword">this</span>.Id = Id;
    }

    <span class="hljs-annotation">@Column</span>(name=<span class="hljs-string">"name"</span>)
    <span class="hljs-keyword">public</span> String <span class="hljs-title">getName</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.Name;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setName</span>(String Name) {
        <span class="hljs-keyword">this</span>.Name = Name;
    }

    <span class="hljs-annotation">@Column</span>(name=<span class="hljs-string">"pass"</span>)
    <span class="hljs-keyword">public</span> String <span class="hljs-title">getPass</span>() {
        <span class="hljs-keyword">return</span> <span class="hljs-keyword">this</span>.Pass;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setPass</span>(String Pass) {
        <span class="hljs-keyword">this</span>.Pass = Pass;
    }
}</code>

UserDao.java

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.dao;

<span class="hljs-keyword">import</span> com.model.User;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">UserDAO</span> {</span>
    <span class="hljs-keyword">public</span> User <span class="hljs-title">queryUserByName</span>(String Name);
}</code>

UserDaoImpl.java
Hibernate4相对于Hibernate3在api上进行了较大改动,原先Hibernate3中的HibernateTemplate等已经失效。
通过在applicationContext.xml中的配置,通过spring把sessionFactory注入到UserDaoImpl中。

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.dao;

<span class="hljs-keyword">import</span> org.hibernate.Query;
<span class="hljs-keyword">import</span> org.hibernate.SessionFactory;

<span class="hljs-keyword">import</span> com.model.User;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">UserDAOImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">UserDAO</span> {</span>
    <span class="hljs-keyword">private</span> SessionFactory sessionFactory;

    <span class="hljs-keyword">public</span> SessionFactory <span class="hljs-title">getSessionFactory</span>() {
        <span class="hljs-keyword">return</span> sessionFactory;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setSessionFactory</span>(SessionFactory sessionFactory) {
        <span class="hljs-keyword">this</span>.sessionFactory = sessionFactory;
    }

    <span class="hljs-keyword">public</span> User <span class="hljs-title">queryUserByName</span>(String name) {
        Query query = sessionFactory.getCurrentSession().createQuery(
                <span class="hljs-string">"from User as u where u.Name = ?"</span>);
        query.setString(<span class="hljs-number">0</span>, name);
        User u = (User) query.uniqueResult();
        <span class="hljs-keyword">return</span> u;
    }
}</code>

第五步:
编写业务逻辑层

UserService.java

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.service;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">interface</span> <span class="hljs-title">UserService</span> {</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">ValidLogin</span>(String name,String password);
}</code>

UserServiceImpl.java
由于没有在该类的ValidLogin()之前加上注解@Transactional,导致sessionFactory.getCurretSession()总是返回null。
猜测Hibernate把事务管理委托给spring,所以必须spring启动事务,才能生产session。

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.service;
<span class="hljs-keyword">import</span> org.springframework.transaction.annotation.Transactional;

<span class="hljs-keyword">import</span> com.dao.UserDAO;
<span class="hljs-keyword">import</span> com.model.User;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">UserServiceImpl</span> <span class="hljs-keyword">implements</span> <span class="hljs-title">UserService</span> {</span>
    <span class="hljs-keyword">private</span> UserDAO userDAO;

    <span class="hljs-annotation">@Transactional</span>
    <span class="hljs-keyword">public</span> <span class="hljs-keyword">boolean</span> <span class="hljs-title">validLogin</span>(String name, String password) {
        User u = userDAO.queryUserByName(name);
        <span class="hljs-keyword">if</span> (u == <span class="hljs-keyword">null</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-keyword">false</span>;
        } <span class="hljs-keyword">else</span> {
            <span class="hljs-keyword">if</span> (u.getPass().equals(password)) {
                <span class="hljs-keyword">return</span> <span class="hljs-keyword">true</span>;
            } <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">return</span> <span class="hljs-keyword">false</span>;
            }
        }
    }

    <span class="hljs-keyword">public</span> UserDAO <span class="hljs-title">getUserDAO</span>() {
        <span class="hljs-keyword">return</span> userDAO;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUserDAO</span>(UserDAO userDAO) {
        <span class="hljs-keyword">this</span>.userDAO = userDAO;
    }
}</code>

第六步:
编写Acton(控制器)
LoginAction.java

<code class="hljs java has-numbering"><span class="hljs-keyword">package</span> com.action;

<span class="hljs-keyword">import</span> com.service.UserService;

<span class="hljs-keyword">public</span> <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">LoginAction</span> {</span>
    <span class="hljs-keyword">private</span> String name;
    <span class="hljs-keyword">private</span> String password;
    <span class="hljs-keyword">private</span> UserService userService;


    <span class="hljs-keyword">public</span> String <span class="hljs-title">login</span>() {
        <span class="hljs-keyword">if</span>(name == <span class="hljs-keyword">null</span> && password == <span class="hljs-keyword">null</span>) {
            <span class="hljs-keyword">return</span> <span class="hljs-string">"login"</span>;
        } <span class="hljs-keyword">else</span> {
            Boolean u = userService.ValidLogin(name, password);
            <span class="hljs-keyword">if</span>(u) {
                <span class="hljs-keyword">return</span> <span class="hljs-string">"ok"</span>;
            } <span class="hljs-keyword">else</span> {
                <span class="hljs-keyword">return</span> <span class="hljs-string">"error"</span>;
            }
        }
    }

    <span class="hljs-keyword">public</span> String <span class="hljs-title">getName</span>() {
        <span class="hljs-keyword">return</span> name;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setName</span>(String name) {
        <span class="hljs-keyword">this</span>.name = name;
    }

    <span class="hljs-keyword">public</span> String <span class="hljs-title">getPassword</span>() {
        <span class="hljs-keyword">return</span> password;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setPassword</span>(String password) {
        <span class="hljs-keyword">this</span>.password = password;
    }

    <span class="hljs-keyword">public</span> UserService <span class="hljs-title">getUserService</span>() {
        <span class="hljs-keyword">return</span> userService;
    }

    <span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">setUserService</span>(UserService userService) {
        <span class="hljs-keyword">this</span>.userService = userService;
    }
}</code>

struts.xml

<code class="hljs applescript has-numbering"><package <span class="hljs-property">name</span>=<span class="hljs-string">"default"</span> namespace=<span class="hljs-string">"/"</span> extends=<span class="hljs-string">"struts-default"</span>>
        <action <span class="hljs-property">name</span>=<span class="hljs-string">"login"</span> <span class="hljs-type">class</span>=<span class="hljs-string">"loginAction"</span> method=<span class="hljs-string">"login"</span>>
            <<span class="hljs-constant">result</span> <span class="hljs-property">name</span>=<span class="hljs-string">"login"</span>>login.jsp</<span class="hljs-constant">result</span>>
            <<span class="hljs-constant">result</span> <span class="hljs-property">name</span>=<span class="hljs-string">"ok"</span>>loginOk.jsp</<span class="hljs-constant">result</span>>
            <<span class="hljs-constant">result</span> <span class="hljs-property">name</span>=<span class="hljs-string">"error"</span>>loginError.jsp</<span class="hljs-constant">result</span>>
        </action>
    </package></code>

第七步:
编写表现层的jsp
login.jsp

<code class="hljs xml has-numbering"><span class="vbscript"><%@ page language=<span class="hljs-string">"java"</span> import=<span class="hljs-string">"java.util.*"</span> pageEncoding=<span class="hljs-string">"utf-8"</span>%></span>
<span class="vbscript"><%
<span class="hljs-built_in">String</span> path = <span class="hljs-built_in">request</span>.getContextPath();
<span class="hljs-built_in">String</span> basePath = <span class="hljs-built_in">request</span>.getScheme()+<span class="hljs-string">"://"</span>+<span class="hljs-built_in">request</span>.getServerName()+<span class="hljs-string">":"</span>+<span class="hljs-built_in">request</span>.getServerPort()+path+<span class="hljs-string">"/"</span>;
%></span>

<span class="hljs-doctype"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"></span>
<span class="hljs-tag"><<span class="hljs-title">html</span>></span>
  <span class="hljs-tag"><<span class="hljs-title">body</span>></span>
    <span class="hljs-tag"><<span class="hljs-title">center</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">form</span> <span class="hljs-attribute">method</span>=<span class="hljs-value">"post"</span> <span class="hljs-attribute">action</span>=<span class="hljs-value">"login"</span>></span>
            UserName <span class="hljs-tag"><<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"text"</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"name"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"name"</span>/></span><span class="hljs-tag"><<span class="hljs-title">br</span>/></span>
            Password <span class="hljs-tag"><<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"password"</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"password"</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"password"</span>/></span><span class="hljs-tag"><<span class="hljs-title">br</span>/></span>
                <span class="hljs-tag"><<span class="hljs-title">input</span> <span class="hljs-attribute">type</span>=<span class="hljs-value">"submit"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"login"</span>/></span>
        <span class="hljs-tag"></<span class="hljs-title">form</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">center</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">body</span>></span>
<span class="hljs-tag"></<span class="hljs-title">html</span>></span></code>

loginError.jsp

<code class="hljs xml has-numbering"><span class="vbscript"><%@ page language=<span class="hljs-string">"java"</span> import=<span class="hljs-string">"java.util.*"</span> pageEncoding=<span class="hljs-string">"ISO-8859-1"</span>%></span>
<span class="vbscript"><%
<span class="hljs-built_in">String</span> path = <span class="hljs-built_in">request</span>.getContextPath();
<span class="hljs-built_in">String</span> basePath = <span class="hljs-built_in">request</span>.getScheme()+<span class="hljs-string">"://"</span>+<span class="hljs-built_in">request</span>.getServerName()+<span class="hljs-string">":"</span>+<span class="hljs-built_in">request</span>.getServerPort()+path+<span class="hljs-string">"/"</span>;
%></span>

<span class="hljs-doctype"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"></span>
<span class="hljs-tag"><<span class="hljs-title">html</span>></span>

  <span class="hljs-tag"><<span class="hljs-title">body</span>></span>
    Login Is Error. <span class="hljs-tag"><<span class="hljs-title">br</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">body</span>></span>
<span class="hljs-tag"></<span class="hljs-title">html</span>></span></code>

loginOk.java

<code class="hljs xml has-numbering"><span class="vbscript"><%@ page language=<span class="hljs-string">"java"</span> import=<span class="hljs-string">"java.util.*"</span> pageEncoding=<span class="hljs-string">"ISO-8859-1"</span>%></span>
<span class="vbscript"><%
<span class="hljs-built_in">String</span> path = <span class="hljs-built_in">request</span>.getContextPath();
<span class="hljs-built_in">String</span> basePath = <span class="hljs-built_in">request</span>.getScheme()+<span class="hljs-string">"://"</span>+<span class="hljs-built_in">request</span>.getServerName()+<span class="hljs-string">":"</span>+<span class="hljs-built_in">request</span>.getServerPort()+path+<span class="hljs-string">"/"</span>;
%></span>

<span class="hljs-doctype"><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"></span>
<span class="hljs-tag"><<span class="hljs-title">html</span>></span>

  <span class="hljs-tag"><<span class="hljs-title">body</span>></span>
    Login Is Ok. <span class="hljs-tag"><<span class="hljs-title">br</span>></span>
  <span class="hljs-tag"></<span class="hljs-title">body</span>></span>
<span class="hljs-tag"></<span class="hljs-title">html</span>></span></code>

第八步
给出struts.xml和applicationContext.xml的完整代码

struts.xml

<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="UTF-8" ?></span>    
<span class="hljs-doctype"><!DOCTYPE struts PUBLIC  
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"  
        "http://struts.apache.org/dtds/struts-2.3.dtd"></span>  

<span class="hljs-tag"><<span class="hljs-title">struts</span>></span> 
    <span class="hljs-comment"><!-- 指定由spring负责action对象的创建 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.objectFactory"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"spring"</span> /></span>
    <span class="hljs-comment"><!-- 是否启用开发模式 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.devMode"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"false"</span> /></span>
    <span class="hljs-comment"><!-- struts配置文件改动后,是否重新加载 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.configuration.xml.reload"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"true"</span> /></span>
    <span class="hljs-comment"><!-- 设置浏览器是否缓存静态内容 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.serve.static.browserCache"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"false"</span> /></span>
    <span class="hljs-comment"><!-- 请求参数的编码方式 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.i18n.encoding"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"utf-8"</span> /></span>
    <span class="hljs-comment"><!-- 每次HTTP请求系统都重新加载资源文件,有助于开发 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.i18n.reload"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"true"</span> /></span>
    <span class="hljs-comment"><!-- 文件上传最大值 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.multipart.maxSize"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"104857600"</span> /></span>
    <span class="hljs-comment"><!-- 让struts2支持动态方法调用 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.enable.DynamicMethodInvocation"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"true"</span> /></span>
    <span class="hljs-comment"><!-- Action名称中是否还是用斜线 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.enable.SlashesInActionNames"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"false"</span> /></span>
    <span class="hljs-comment"><!-- 允许标签中使用表达式语法 --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.tag.altSyntax"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"true"</span> /></span>
    <span class="hljs-comment"><!-- 对于WebLogic,Orion,OC4J此属性应该设置成true --></span>
    <span class="hljs-tag"><<span class="hljs-title">constant</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"struts.dispatcher.parametersWorkaround"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"false"</span> /></span> 

    <span class="hljs-tag"><<span class="hljs-title">package</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"default"</span> <span class="hljs-attribute">namespace</span>=<span class="hljs-value">"/"</span> <span class="hljs-attribute">extends</span>=<span class="hljs-value">"struts-default"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">action</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"login"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"loginAction"</span> <span class="hljs-attribute">method</span>=<span class="hljs-value">"login"</span>></span>
            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"login"</span>></span>login.jsp<span class="hljs-tag"></<span class="hljs-title">result</span>></span>
            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"ok"</span>></span>loginOk.jsp<span class="hljs-tag"></<span class="hljs-title">result</span>></span>
            <span class="hljs-tag"><<span class="hljs-title">result</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"error"</span>></span>loginError.jsp<span class="hljs-tag"></<span class="hljs-title">result</span>></span>
        <span class="hljs-tag"></<span class="hljs-title">action</span>></span>
    <span class="hljs-tag"></<span class="hljs-title">package</span>></span>
<span class="hljs-tag"></<span class="hljs-title">struts</span>></span></code>

applicationContext.xml
applicationContext.xml十分重要,同时也是最容易出错的。

<code class="hljs xml has-numbering"><span class="hljs-pi"><?xml version="1.0" encoding="UTF-8"?></span>
<span class="hljs-tag"><<span class="hljs-title">beans</span> <span class="hljs-attribute">xmlns</span>=<span class="hljs-value">"http://www.springframework.org/schema/beans"</span>  
    <span class="hljs-attribute">xmlns:xsi</span>=<span class="hljs-value">"http://www.w3.org/2001/XMLSchema-instance"</span> <span class="hljs-attribute">xmlns:jee</span>=<span class="hljs-value">"http://www.springframework.org/schema/jee"</span>  
    <span class="hljs-attribute">xmlns:aop</span>=<span class="hljs-value">"http://www.springframework.org/schema/aop"</span> <span class="hljs-attribute">xmlns:util</span>=<span class="hljs-value">"http://www.springframework.org/schema/util"</span>  
    <span class="hljs-attribute">xmlns:p</span>=<span class="hljs-value">"http://www.springframework.org/schema/p"</span> <span class="hljs-attribute">xmlns:tx</span>=<span class="hljs-value">"http://www.springframework.org/schema/tx"</span>  
    <span class="hljs-attribute">xmlns:tool</span>=<span class="hljs-value">"http://www.springframework.org/schema/tool"</span> <span class="hljs-attribute">xmlns:context</span>=<span class="hljs-value">"http://www.springframework.org/schema/context"</span>  
    <span class="hljs-attribute">xsi:schemaLocation</span>=<span class="hljs-value">"http://www.springframework.org/schema/beans   
            http://www.springframework.org/schema/beans/spring-beans-3.0.xsd  
            http://www.springframework.org/schema/tx  
            http://www.springframework.org/schema/tx/spring-tx.xsd  
            http://www.springframework.org/schema/aop  
            http://www.springframework.org/schema/aop/spring-aop.xsd  
            http://www.springframework.org/schema/context  
            http://www.springframework.org/schema/context/spring-context.xsd  
           http://www.springframework.org/schema/jee  
           http://www.springframework.org/schema/jee/spring-jee.xsd  
           http://www.springframework.org/schema/util  
           http://www.springframework.org/schema/util/spring-util.xsd  
           http://www.springframework.org/schema/tool  
           http://www.springframework.org/schema/tool/spring-tool.xsd"</span>  
    <span class="hljs-attribute">default-lazy-init</span>=<span class="hljs-value">"true"</span> <span class="hljs-attribute">default-autowire</span>=<span class="hljs-value">"byName"</span>></span>

    <span class="hljs-comment"><!-- 指定jdbc路径 --></span>
    <span class="hljs-tag"><<span class="hljs-title">bean</span>  
        <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"</span>></span>  
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"locations"</span>  
            <span class="hljs-attribute">value</span>=<span class="hljs-value">"classpath:jdbc.properties"</span> /></span>  
    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

    <span class="hljs-comment"><!-- 指定数据源 --></span>
    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"dataSource"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.logicalcobwebs.proxool.ProxoolDataSource"</span>></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"driver"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.driverClassName}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"driverUrl"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.url}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"user"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.username}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"password"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${jdbc.password}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"maximumConnectionCount"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.maxConnCount}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"minimumConnectionCount"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.minConnCount}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"statistics"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.statistics}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"simultaneousBuildThrottle"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.simultaneousBuildThrottle}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"trace"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.trace}"</span> /></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"verbose"</span> <span class="hljs-attribute">value</span>=<span class="hljs-value">"${proxool.verbose}"</span> /></span>
   <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

   <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"sessionFactory"</span>  
   <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.springframework.orm.hibernate4.LocalSessionFactoryBean"</span>></span>  
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"dataSource"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"dataSource"</span> /></span>  
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"packagesToScan"</span>></span>  
            <span class="hljs-tag"><<span class="hljs-title">list</span>></span>  
                <span class="hljs-tag"><<span class="hljs-title">value</span>></span>com.model<span class="hljs-tag"></<span class="hljs-title">value</span>></span>  
            <span class="hljs-tag"></<span class="hljs-title">list</span>></span>  
        <span class="hljs-tag"></<span class="hljs-title">property</span>></span>  
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"hibernateProperties"</span>></span>  
            <span class="hljs-tag"><<span class="hljs-title">props</span>></span>  
                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.dialect"</span>></span>org.hibernate.dialect.MySQLDialect<span class="hljs-tag"></<span class="hljs-title">prop</span>></span>  
                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.show_sql"</span>></span>true<span class="hljs-tag"></<span class="hljs-title">prop</span>></span>  
                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.format_sql"</span>></span>true<span class="hljs-tag"></<span class="hljs-title">prop</span>></span>  
                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.hbm2ddl.auto"</span>></span>update<span class="hljs-tag"></<span class="hljs-title">prop</span>></span> 
                <span class="hljs-tag"><<span class="hljs-title">prop</span> <span class="hljs-attribute">key</span>=<span class="hljs-value">"hibernate.current_session_context_class"</span>></span>org.springframework.orm.hibernate4.SpringSessionContext<span class="hljs-tag"></<span class="hljs-title">prop</span>></span>  
            <span class="hljs-tag"></<span class="hljs-title">props</span>></span>  
        <span class="hljs-tag"></<span class="hljs-title">property</span>></span>  
    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

    <span class="hljs-comment"><!-- 配置事务管理器 --></span>
    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"transactionManager"</span>  
        <span class="hljs-attribute">class</span>=<span class="hljs-value">"org.springframework.orm.hibernate4.HibernateTransactionManager"</span>></span>  
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"sessionFactory"</span>></span>  
            <span class="hljs-tag"><<span class="hljs-title">ref</span> <span class="hljs-attribute">local</span>=<span class="hljs-value">"sessionFactory"</span> /></span>  
        <span class="hljs-tag"></<span class="hljs-title">property</span>></span>  
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"dataSource"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"dataSource"</span> /></span>
    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>  

    <span class="hljs-comment"><!--采用注解来管理Bean --></span>  
    <span class="hljs-tag"><<span class="hljs-title">tx:annotation-driven</span> <span class="hljs-attribute">transaction-manager</span>=<span class="hljs-value">"transactionManager"</span> /></span>  

    <span class="hljs-comment"><!-- 登录Action,注入dao和service --></span>
    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"loginAction"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.action.LoginAction"</span> ></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"userService"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"userService"</span> /></span>
    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"userService"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.service.UserServiceImpl"</span> ></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"userDAO"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"userDAO"</span> /></span>
    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

    <span class="hljs-tag"><<span class="hljs-title">bean</span> <span class="hljs-attribute">id</span>=<span class="hljs-value">"userDAO"</span> <span class="hljs-attribute">class</span>=<span class="hljs-value">"com.dao.UserDAOImpl"</span> ></span>
        <span class="hljs-tag"><<span class="hljs-title">property</span> <span class="hljs-attribute">name</span>=<span class="hljs-value">"sessionFactory"</span> <span class="hljs-attribute">ref</span>=<span class="hljs-value">"sessionFactory"</span> /></span>
    <span class="hljs-tag"></<span class="hljs-title">bean</span>></span>

<span class="hljs-tag"></<span class="hljs-title">beans</span>></span>
</code>

总结:
再进行编写SSH框架demo的时候,出现了许多问题,每个问题都去网上搜索,虽然最终都解决,但花了太多时间,解决问题的效率有待提高。同时,在遇到一个问题时,要自己多分析问题,要多思考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值