`
anson_xu
  • 浏览: 513152 次
  • 性别: Icon_minigender_1
  • 来自: 惠州
社区版块
存档分类

我的智囊团构建全过程

    博客分类:
  • SSH
阅读更多
ssh综合实战
(Struts+spring+hibernate)
(Eclipse + mysql+Tomcate+ConnectionPool)
注意:在使用过程中连接是不关闭的,所以用连接池


user
create table user
(
   id   INT AUTO_INCREMENT PRIMARY KEY ,
   userid                         VARCHAR(50)                  not null ,
   userpwd                        VARCHAR(50),
   userques                       VARCHAR(50),
   userans                        VARCHAR(50),
   usermail                       VARCHAR(50),
   integral                       int,
   grade                          int,
   sex                            VARCHAR(2),
   realname                       VARCHAR(50)
) ;
开发流程中,首先是搭建环境
1、创建表在mysql
在cmd中net start mysql
mysql -uroot -pmysqladmin
create database mldn;
user mldn;
复制表
commit;
show tables;

2、打开eclipse
项目位置f:\Eclipse\MyZNTProject(工作间)
3、新建项目(先配mysql驱动window-->preferences-->myEclipse-->Database Explore-->Drivers
-->new-->MySql Connector/J
-->jdbc:mysql//:localhost:3306/mldn
-->加入jars包mysql-connect-java-5.0.4.bin.jsr
-->Driver classname:org.git.mm.mysql.Driver
-->ok
4.进入DB Browser
建一个新连接试试
5、新建项目MyZhiNangTuanDemo
6、加spring+hibernate+struts
-->spring 包全选(可以查看包是否被全加进去了) ApplicationContext.xml
-->hibernate包全选(hibernate 3.1) sessionFactory
用Use JNDI DataSource(dataSource)
(数据源名称:jdbc/mldn)
DataSource:java:comp/env/jdbc/mldn
Dialect:mysql
不建工厂
选全replace包
-->struts(struts 1.2)
org.lxh.myzngt.struts
7.配applicationContext.xml
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
  <property name="sessionFactory">
  <ref bean="sessionFactory"/>
</property>
</bean>
(也可以不配hibernateTemplate直接给dao注sessionFactory)
sessionFactory中加
<prop key="hibernate.connection.autocommit">true</prop>表示 自动 提交 
8.web.xml
<context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>/WEB-INF/classes/applicationContext.xml</param-value>
</context-param>
<servlet>
  <servlet-name>context</servlet-name>
  <servlet-class>org.springframework.web.context.ContextLoaderServlet</servlet-class>
   <load-on-startup>1</load-on-startup>
</servlet>
(其实也可以配成<listener>)

9.配struts-config.xml
-->new struts1.2 plugin
-->ContextLoaderPlugIn
-->contextConfigLocation
-->WEB-INF/classes/applicationContext.xml

<controller processorClass="org.springframework.web.struts.DelegatingRequestProcessor"></controller>

10.使用过滤器解决乱码问题
-->新建EncodingFilter
------>interface:javax.servlet.Filter
在doFilter中
req.setCharacterEncoding("");
chain.doFilter(req.resp);
在web.xml中加
<filter>
  <filter-name>encoding</filter-name>
  <filter-class>org.lxh.myzngt.filter.EncodingFilter</filter-class>
  <init-param>
     <param-name>charset</param-name>
     <param-value>gbk</param-vale>
</filter>
<filter-mapping>
   <filter-name>encoding</filter-name>
   <url-pattern>/*</usl-pattern>
</filter-mapping>
在EncodingFilter中
加private String charset = null;
在init中加
this.charset = arg0.getInitParameter("charset");
把doFilter中设为this.charset

11.md5加密
在util下新建类
----------------------------------------------------------------------------------
MD5Code.java
package org.lxh.myzngt.util;

public class MD5Code {
/*
* 下面这些S11-S44实际上是一个4*4的矩阵,在原始的C实现中是用#define 实现的, 这里把它们实现成为static
* final是表示了只读,切能在同一个进程空间内的多个 Instance间共享
*/
static final int S11 = 7;

static final int S12 = 12;

static final int S13 = 17;

static final int S14 = 22;

static final int S21 = 5;

static final int S22 = 9;

static final int S23 = 14;

static final int S24 = 20;

static final int S31 = 4;

static final int S32 = 11;

static final int S33 = 16;

static final int S34 = 23;

static final int S41 = 6;

static final int S42 = 10;

static final int S43 = 15;

static final int S44 = 21;

static final byte[] PADDING = { -128, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0 };

/*
* 下面的三个成员是MD5计算过程中用到的3个核心数据,在原始的C实现中 被定义到MD5_CTX结构中
*/
private long[] state = new long[4];// state (ABCD)

private long[] count = new long[2];// number of bits, modulo 2^64 (lsb

// first)

private byte[] buffer = new byte[64]; // input buffer

/*
* digestHexStr是MD5的唯一一个公共成员,是最新一次计算结果的 16进制ASCII表示.
*/

public String digestHexStr;

/*
* digest,是最新一次计算结果的2进制内部表示,表示128bit的MD5值.
*/
private byte[] digest = new byte[16];

/*
* getMD5ofStr是类MD5最主要的公共方法,入口参数是你想要进行MD5变换的字符串
* 返回的是变换完的结果,这个结果是从公共成员digestHexStr取得的.
*/
public String getMD5ofStr(String inbuf) {
md5Init();
md5Update(inbuf.getBytes(), inbuf.length());
md5Final();
digestHexStr = "";
for (int i = 0; i < 16; i++) {
digestHexStr += byteHEX(digest[i]);
}
return digestHexStr;
}

// 这是MD5这个类的标准构造函数,JavaBean要求有一个public的并且没有参数的构造函数
public MD5Code() {
md5Init();
return;
}

/* md5Init是一个初始化函数,初始化核心变量,装入标准的幻数 */
private void md5Init() {
count[0] = 0L;
count[1] = 0L;
// /* Load magic initialization constants.
state[0] = 0x67452301L;
state[1] = 0xefcdab89L;
state[2] = 0x98badcfeL;
state[3] = 0x10325476L;
return;
}

/*
* F, G, H ,I 是4个基本的MD5函数,在原始的MD5的C实现中,由于它们是
* 简单的位运算,可能出于效率的考虑把它们实现成了宏,在java中,我们把它们 实现成了private方法,名字保持了原来C中的。
*/
private long F(long x, long y, long z) {
return (x & y) | ((~x) & z);
}

private long G(long x, long y, long z) {
return (x & z) | (y & (~z));
}

private long H(long x, long y, long z) {
return x ^ y ^ z;
}

private long I(long x, long y, long z) {
return y ^ (x | (~z));
}

/*
* FF,GG,HH和II将调用F,G,H,I进行近一步变换 FF, GG, HH, and II transformations for
* rounds 1, 2, 3, and 4. Rotation is separate from addition to prevent
* recomputation.
*/
private long FF(long a, long b, long c, long d, long x, long s, long ac) {
a += F(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}

private long GG(long a, long b, long c, long d, long x, long s, long ac) {
a += G(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}

private long HH(long a, long b, long c, long d, long x, long s, long ac) {
a += H(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}

private long II(long a, long b, long c, long d, long x, long s, long ac) {
a += I(b, c, d) + x + ac;
a = ((int) a << s) | ((int) a >>> (32 - s));
a += b;
return a;
}

/*
* md5Update是MD5的主计算过程,inbuf是要变换的字节串,inputlen是长度,这个
* 函数由getMD5ofStr调用,调用之前需要调用md5init,因此把它设计成private的
*/
private void md5Update(byte[] inbuf, int inputLen) {
int i, index, partLen;
byte[] block = new byte[64];
index = (int) (count[0] >>> 3) & 0x3F;
// /* Update number of bits */
if ((count[0] += (inputLen << 3)) < (inputLen << 3))
count[1]++;
count[1] += (inputLen >>> 29);
partLen = 64 - index;
// Transform as many times as possible.
if (inputLen >= partLen) {
md5Memcpy(buffer, inbuf, index, 0, partLen);
md5Transform(buffer);
for (i = partLen; i + 63 < inputLen; i += 64) {
md5Memcpy(block, inbuf, 0, i, 64);
md5Transform(block);
}
index = 0;
} else
i = 0;
// /* Buffer remaining input */
md5Memcpy(buffer, inbuf, index, i, inputLen - i);
}

/*
* md5Final整理和填写输出结果
*/
private void md5Final() {
byte[] bits = new byte[8];
int index, padLen;
// /* Save number of bits */
Encode(bits, count,;
// /* Pad out to 56 mod 64.
index = (int) (count[0] >>> 3) & 0x3f;
padLen = (index < 56) ? (56 - index) : (120 - index);
md5Update(PADDING, padLen);
// /* Append length (before padding) */
md5Update(bits,;
// /* Store state in digest */
Encode(digest, state, 16);
}

/*
* md5Memcpy是一个内部使用的byte数组的块拷贝函数,从input的inpos开始把len长度的
* 字节拷贝到output的outpos位置开始
*/
private void md5Memcpy(byte[] output, byte[] input, int outpos, int inpos,
int len) {
int i;
for (i = 0; i < len; i++)
output[outpos + i] = input[inpos + i];
}

/*
* md5Transform是MD5核心变换程序,有md5Update调用,block是分块的原始字节
*/
private void md5Transform(byte block[]) {
long a = state[0], b = state[1], c = state[2], d = state[3];
long[] x = new long[16];
Decode(x, block, 64);
/* Round 1 */
a = FF(a, b, c, d, x[0], S11, 0xd76aa478L); /* 1 */
d = FF(d, a, b, c, x[1], S12, 0xe8c7b756L); /* 2 */
c = FF(c, d, a, b, x[2], S13, 0x242070dbL); /* 3 */
b = FF(b, c, d, a, x[3], S14, 0xc1bdceeeL); /* 4 */
a = FF(a, b, c, d, x[4], S11, 0xf57c0fafL); /* 5 */
d = FF(d, a, b, c, x[5], S12, 0x4787c62aL); /* 6 */
c = FF(c, d, a, b, x[6], S13, 0xa8304613L); /* 7 */
b = FF(b, c, d, a, x[7], S14, 0xfd469501L); /* 8 */
a = FF(a, b, c, d, x[8], S11, 0x698098d8L); /* 9 */
d = FF(d, a, b, c, x[9], S12, 0x8b44f7afL); /* 10 */
c = FF(c, d, a, b, x[10], S13, 0xffff5bb1L); /* 11 */
b = FF(b, c, d, a, x[11], S14, 0x895cd7beL); /* 12 */
a = FF(a, b, c, d, x[12], S11, 0x6b901122L); /* 13 */
d = FF(d, a, b, c, x[13], S12, 0xfd987193L); /* 14 */
c = FF(c, d, a, b, x[14], S13, 0xa679438eL); /* 15 */
b = FF(b, c, d, a, x[15], S14, 0x49b40821L); /* 16 */
/* Round 2 */
a = GG(a, b, c, d, x[1], S21, 0xf61e2562L); /* 17 */
d = GG(d, a, b, c, x[6], S22, 0xc040b340L); /* 18 */
c = GG(c, d, a, b, x[11], S23, 0x265e5a51L); /* 19 */
b = GG(b, c, d, a, x[0], S24, 0xe9b6c7aaL); /* 20 */
a = GG(a, b, c, d, x[5], S21, 0xd62f105dL); /* 21 */
d = GG(d, a, b, c, x[10], S22, 0x2441453L); /* 22 */
c = GG(c, d, a, b, x[15], S23, 0xd8a1e681L); /* 23 */
b = GG(b, c, d, a, x[4], S24, 0xe7d3fbc8L); /* 24 */
a = GG(a, b, c, d, x[9], S21, 0x21e1cde6L); /* 25 */
d = GG(d, a, b, c, x[14], S22, 0xc33707d6L); /* 26 */
c = GG(c, d, a, b, x[3], S23, 0xf4d50d87L); /* 27 */
b = GG(b, c, d, a, x[8], S24, 0x455a14edL); /* 28 */
a = GG(a, b, c, d, x[13], S21, 0xa9e3e905L); /* 29 */
d = GG(d, a, b, c, x[2], S22, 0xfcefa3f8L); /* 30 */
c = GG(c, d, a, b, x[7], S23, 0x676f02d9L); /* 31 */
b = GG(b, c, d, a, x[12], S24, 0x8d2a4c8aL); /* 32 */
/* Round 3 */
a = HH(a, b, c, d, x[5], S31, 0xfffa3942L); /* 33 */
d = HH(d, a, b, c, x[8], S32, 0x8771f681L); /* 34 */
c = HH(c, d, a, b, x[11], S33, 0x6d9d6122L); /* 35 */
b = HH(b, c, d, a, x[14], S34, 0xfde5380cL); /* 36 */
a = HH(a, b, c, d, x[1], S31, 0xa4beea44L); /* 37 */
d = HH(d, a, b, c, x[4], S32, 0x4bdecfa9L); /* 38 */
c = HH(c, d, a, b, x[7], S33, 0xf6bb4b60L); /* 39 */
b = HH(b, c, d, a, x[10], S34, 0xbebfbc70L); /* 40 */
a = HH(a, b, c, d, x[13], S31, 0x289b7ec6L); /* 41 */
d = HH(d, a, b, c, x[0], S32, 0xeaa127faL); /* 42 */
c = HH(c, d, a, b, x[3], S33, 0xd4ef3085L); /* 43 */
b = HH(b, c, d, a, x[6], S34, 0x4881d05L); /* 44 */
a = HH(a, b, c, d, x[9], S31, 0xd9d4d039L); /* 45 */
d = HH(d, a, b, c, x[12], S32, 0xe6db99e5L); /* 46 */
c = HH(c, d, a, b, x[15], S33, 0x1fa27cf8L); /* 47 */
b = HH(b, c, d, a, x[2], S34, 0xc4ac5665L); /* 48 */
/* Round 4 */
a = II(a, b, c, d, x[0], S41, 0xf4292244L); /* 49 */
d = II(d, a, b, c, x[7], S42, 0x432aff97L); /* 50 */
c = II(c, d, a, b, x[14], S43, 0xab9423a7L); /* 51 */
b = II(b, c, d, a, x[5], S44, 0xfc93a039L); /* 52 */
a = II(a, b, c, d, x[12], S41, 0x655b59c3L); /* 53 */
d = II(d, a, b, c, x[3], S42, 0x8f0ccc92L); /* 54 */
c = II(c, d, a, b, x[10], S43, 0xffeff47dL); /* 55 */
b = II(b, c, d, a, x[1], S44, 0x85845dd1L); /* 56 */
a = II(a, b, c, d, x[8], S41, 0x6fa87e4fL); /* 57 */
d = II(d, a, b, c, x[15], S42, 0xfe2ce6e0L); /* 58 */
c = II(c, d, a, b, x[6], S43, 0xa3014314L); /* 59 */
b = II(b, c, d, a, x[13], S44, 0x4e0811a1L); /* 60 */
a = II(a, b, c, d, x[4], S41, 0xf7537e82L); /* 61 */
d = II(d, a, b, c, x[11], S42, 0xbd3af235L); /* 62 */
c = II(c, d, a, b, x[2], S43, 0x2ad7d2bbL); /* 63 */
b = II(b, c, d, a, x[9], S44, 0xeb86d391L); /* 64 */
state[0] += a;
state[1] += b;
state[2] += c;
state[3] += d;
}

/*
* Encode把long数组按顺序拆成byte数组,因为java的long类型是64bit的, 只拆低32bit,以适应原始C实现的用途
*/
private void Encode(byte[] output, long[] input, int len) {
int i, j;
for (i = 0, j = 0; j < len; i++, j += 4) {
output[j] = (byte) (input[i] & 0xffL);
output[j + 1] = (byte) ((input[i] >>> & 0xffL);
output[j + 2] = (byte) ((input[i] >>> 16) & 0xffL);
output[j + 3] = (byte) ((input[i] >>> 24) & 0xffL);
}
}

/*
* Decode把byte数组按顺序合成成long数组,因为java的long类型是64bit的,
* 只合成低32bit,高32bit清零,以适应原始C实现的用途
*/
private void Decode(long[] output, byte[] input, int len) {
int i, j;
for (i = 0, j = 0; j < len; i++, j += 4)
output[i] = b2iu(input[j]) | (b2iu(input[j + 1]) <<
| (b2iu(input[j + 2]) << 16) | (b2iu(input[j + 3]) << 24);
return;
}

/*
* b2iu是我写的一个把byte按照不考虑正负号的原则的"升位"程序,因为java没有unsigned运算
*/
public static long b2iu(byte b) {
return b < 0 ? b & 0x7F + 128 : b;
}

/*
* byteHEX(),用来把一个byte类型的数转换成十六进制的ASCII表示,
* 因为java中的byte的toString无法实现这一点,我们又没有C语言中的 sprintf(outbuf,"%02X",ib)
*/
public static String byteHEX(byte ib) {
char[] Digit = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A',
'B', 'C', 'D', 'E', 'F' };
char[] ob = new char[2];
ob[0] = Digit[(ib >>> 4) & 0X0F];
ob[1] = Digit[ib & 0X0F];
String s = new String(ob);
return s;
}
}

------------------------------------------------------------------------------------------
使用时md5.getMD5ofStr("dsfasdfasdf");

12.验证码文件image.jsp


13.系统结构
|-jsp
|-images
|-js
|-css
|-inc(要导入的文件)


14.数据源配置
在tomcate/conf/server.xml文件中加
-->在</Host></Engine></Service></Server>前面加<context>配置
(工作的根目录为F:\Eclipse\MyZNTProject\MyZhiNangTuanDemo\WebRoot
放到docBase中,Resource name="jdbc/mldn",url=jdbc:mysql://localhost:3306/mldn)
----------------------------------------------------------------------------------
<Context path="/zhinangtuan" docBase="F:\Eclipse\MyZNTProject\MyZhiNangTuanDemo\WebRoot"
debug="5" reloadable="true" crossContext="true">

<Logger className="org.apache.catalina.logger.FileLogger"
prefix="localhost_MysqlTest_log." suffix=".txt"
timestamp="true"/>

<Resource name="jdbc/mldn"  auth="Container" type="javax.sql.DataSource"/>

<ResourceParams name="jdbc/mldn">
<parameter>
<name>factory</name>
<value>org.apache.commons.dbcp.BasicDataSourceFactory</value>
</parameter>
<parameter>
<name>maxActive</name>
<value>100</value>
</parameter>
<parameter>
<name>maxIdle</name>
<value>30</value>
</parameter>
<parameter>
<name>maxWait</name>
<value>5000</value>
</parameter>
<parameter>
<name>username</name>
<value>root</value>
</parameter>
<parameter>
<name>password</name>
<value>mysqladmin</value>
</parameter>
<parameter>
<name>driverClassName</name>
<value>org.gjt.mm.mysql.Driver</value>
</parameter>
<parameter>
<name>url</name>
<value>jdbc:mysql://localhost:3306/mldn</value>
</parameter>
  </ResourceParams>
</Context>

----------------------------------------------------------------------------------
</Host></Engine></Service></Server>

13.直接起动tomcat服务器(不用在eclipse中起)
测试http://localhost:8080/zhinangtuan  (即为数据源中<context path=/zhinangtuan)

14.在jsp下建admin,把分页文件split.jsp

15.用户注册功能
register.sjp
<jsp:include flush="true" page="inc/template"/>导入 文件 
<html:form action="" method="post">
  <html:text property="userid"/>
</body>
</html:html>
-->新建sturts1.2 Form ,Action &Jsp
-->user case :user
-->加属性id,userid,username,userques......
-->建一个errors.jsp   <h1>程序出现错误<html:errors/><a href="" onclick="history.back()">返回
-->在struts-config.xml中配<forward>
-->在register.jsp页中加<input type="hidden" name="status" value="regist">
--><input type="hidden" name="type" value="1">
作用是type=1表是注册功能要验证id password 否为空
在userForm中也要加private int type生成get set方法
在validate方法中
ActionErrors errors = new ActionErrors();
if(type==1){
  //注册
  if(this.userid==null || "".equals(this.userid)){
     errors.add("userid",new ActionMessage("user.userid.null"));
}
  if()......
  if
}
其中user.userid.null为读取资源文件user.userid.null=user name null

16.写Action
//先判断验证码是否正确
UserForm userForm = (UserForm) form;
String code = (String)request.getSession().getAttribute("ccode");(这是image.jsp文件 保存在session上的)
String checkcode = userForm.getCheckcode();用户输入的
if(!(checkcode.equals(ccode))){
  ActionMessages errors = new ActionMessages();
  errors.add("checkcode",new ActionMessage("check.error"));
  super.saveErrors(request,errors);
  return mapping.getInputForward();这里即为<action 中的input="jsp/errors.jsp那个页面">
}

User user = new User;
user.setUserid(userForm.getUserid);
.....
try{
   this.service.register(user);
    request.getSession().setAttribute("userid",user.getUserid());
    request.getSession().setAttribute("grade"),user.getGrade());
   return mapping.fingForward("registersuccess");
} catch(Exception e){
   e.printStackTrace();
  return mapping.findForward("registerfailure");
  }

17.写IUserDAO接口和实现
---vo内容和表一样
--->HibernateDaoSupport
--public void register(User user) throws Exception;
--------> super.getSession().save(user);

---->生成映射文件并修改它去掉catory="";

18.配applicationContext.xml
<bean id ="dao">

19.在DispatchAction中加service层的属性
再接着写action

20.在index.jsp页面中
<jsp:include flush="true" page="inc/template.htm"/>
<logic:present name="userid" scope="session">
  欢迎${userid}等级${grade}
  <a href="">个人中心</a>
</logic:present>

21.如果有问题可以清空tomcate中的发布文件 
分享到:
评论

相关推荐

    我的智囊团ssh架构pdf

    《我的智囊团SSH架构PDF》是一份详细指导如何构建基于SSH框架的Web应用程序的教程。SSH,全称为Struts2、Spring和Hibernate,是Java领域广泛应用的三大开源框架组合,用于实现MVC(Model-View-Controller)设计模式...

    我的智囊团代码

    【标题】:“我的智囊团代码”这一标题可能是指一个包含个人或团队在解决特定问题或项目时编写的代码集合,特别提到了SQL代码,暗示这个智囊团可能专注于数据库管理和数据分析。 【描述】:“我的智囊团代码,包括...

    我的智囊团项目代码二

    综上所述,"我的智囊团项目代码二"涉及到的是一个大型项目代码的分卷压缩和管理问题,这在实际的软件开发过程中是非常常见的。正确管理和合并这些分卷压缩文件是成功恢复和使用项目代码的关键步骤,同时也反映了团队...

    我的智囊团

    "我的智囊团"是一个基于Java技术栈的项目,整合了三个重要的开源框架:Struts、Hibernate和Spring。这三个框架在企业级应用开发中扮演着关键角色,它们各自负责不同的功能,共同构建出一个强大的后端系统。 Struts...

    我的智囊团源代码我的智囊团源代码我的智囊团源代码

    学习j2ee有帮助哦!我的智囊团代码!!

    李兴华 我的智囊团项目 代码 MLDN5

    李兴华 我的智囊团项目 代码 MLDN

    李兴华SSH我的智囊团项目笔记及代码

    在《李兴华SSH我的智囊团项目笔记及代码》中,你可以学习到如何将这三大框架整合在一起,构建一个完整的Web应用。笔记部分可能包括了每个框架的基本概念、配置详解、使用技巧,以及它们之间的协作方式。代码部分则是...

    李兴华我的智囊团项目代码

    李兴华 我的智囊团 项目代码 MLDN

    我的智囊团项目笔记

    【我的智囊团项目笔记】是一份集合了李兴华在IT行业中积累的丰富知识与经验的文档集合,旨在分享他在智囊团项目中的实践与思考。这份笔记可能涵盖了项目管理、技术选型、团队协作、问题解决等多个方面,对于想要提升...

    我的智囊团源代码part2

    "我的智囊团源代码part2" 是一个与J2EE相关的项目,旨在提供学习者一个实践平台,深入了解和掌握Java企业级应用开发技术。...记得在CSDN上查找其他部分的源代码,以便完整地构建和运行这个"我的智囊团"应用。

    我的智囊团ssh源代码

    【标题】"我的智囊团ssh源代码"指的是一个与SSH(Struts、Spring、Hibernate)集成框架相关的源代码集合,SSH是Java EE(以前称为J2EE)开发中的一个流行选择,用于构建企业级应用。这个源代码库可能是为了教学或者...

    李兴华-我的智囊团—数据库创建脚本

    李兴华-我的智囊团—数据库创建脚本 本人已经试验过了可以运行

    我的智囊团源码修改版

    总的来说,“我的智囊团源码修改版”是一个基于Java技术栈的Web应用,利用MyEclipse进行开发,依托Tomcat运行,数据存储在SQL Server 2005中,并且采用了SSH框架来构建业务逻辑。这个项目体现了Java EE开发的一般...

    SSH整合项目 我的智囊团 源代码+sql

    这个项目名为“我的智囊团”,提供了完整的源代码和SQL数据,可以帮助开发者理解和学习如何将这三个强大的框架整合在一起。 Spring框架是核心的依赖注入(DI)和面向切面编程(AOP)容器,它简化了Java应用的开发和...

    李兴华我的智囊团Part_4以及MD5Code

    完整Web Project我的智囊团开发,由于大小限制,只能分完整四部分上传.

    我的智囊团(SSH)_06_开发个人信息中心

    在本课程"我的智囊团(SSH)_06_开发个人信息中心"中,我们将深入探讨如何使用Struts、Spring和Hibernate这三个核心技术栈构建一个完整的个人信息中心模块。这个项目实战由资深讲师李兴华指导,旨在帮助开发者掌握...

    李兴华我的智囊团项目笔记

    【压缩包子文件的文件名称列表】:只有“我的智囊团笔记”这一条信息,可能表示压缩包中包含的是整个项目的所有笔记文件,涵盖了从项目规划、需求分析、设计、实现到测试的全过程。这些笔记可能包括了技术选型、架构...

    我的智囊团(SSH)_04_开发提问及回复功能_上

    "我的智囊团(SSH)_04_开发提问及回复功能_上"这个项目实战是基于MLDN(可能是“麻辣炖”的缩写或者“Machine Learning and Data Networking”的简称)平台,采用Struts、Spring和Hibernate(SSH)这三种技术进行...

Global site tag (gtag.js) - Google Analytics