Struts2是基于MVC设计模式的Java Web框架技术之一,按照MVC设计思想把Java Web应用程序分为:
控制器层,包括核心控制器FilterDispatcher和业务控制器Action;
模型层,包括业务逻辑组件和数据库访问组件;
视图层,包括HTML、JSP、Struts2的标签等;
Struts2标签库分为3大类:
UI标签(包含表单标签&非表单标签)、非UI标签(包含数据标签&控制标签)、Ajax标签
内容繁多,用到的时候再查吧。
在web项目右键>Project Capabilties>Add Struts Capabilities,即可配置好Struts2环境。
{其中在匹配模式的单选按钮组中选择/*,意为全部匹配,对应web.xml中
<filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
}
参考(http://www.cnblogs.com/wchhuangya/archive/2011/03/21/1968877.html),直接从(五、struts2实例--简单的登录例子)开始即可顺利完成;
其中处理器映射struts.xml
<package name="struts2" namespace="/" extends="struts-default"> <action name="login" class="org.jason.actions.LoginAction" method="execute"> <result name="success">/welcome.jsp</result> <result name="login">/login.jsp</result> </action> </package>
主要属性说明:(package-name:用于区别不同的package;必须是唯一的、可用的变量名;用于其它package来继承;
package--namespace:用于减少重复代码(和struts1比较);是调用action时输入路径的组成部分;
package--extends:用于继承其它package以使用里面的过滤器等东东;
<action>元素中name属性表示请求映射的地址,class属性表示请求的Action处理类),如果将class名字写错(误写成com.jason.actions.LoginAction了),会报错如下:
严重: Exception starting filter struts2 java.lang.ClassNotFoundException:
出现此错误之后,系统提示是过滤器加载的问题,想到web.xml中
<filter-name>struts2</filter-name> <filter-class> org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter </filter-class>
可能有问题,但运行环境是自动生成的,故排除此错误,仔细观察发现<action>中class写错了。
若盲目修改生成的参数只会徒增烦恼。
Spring是一个轻量级控制反转(IoC)和面向切面(AOP)的容器框架
参考Myeclipse10下搭建SSH框架(图解)Struts2.1+Spring3.0+Hibernate3.3 之后会发现,其实在MyEclipse10下搭建三个框架都挺简单的。
概括其流程:
a、新建web项目ssh;
b、添加Spring。MyEclipse→Project Capabilities→Add Spring Capabilities;
c、version选择3.0之后,选择5个包(按图选择相应的包Spring 3.0 AOP,Spring 3.0 Core,Spring 3.0 Persistence Core,Spring 3.0 Persistence JDBC,Spring 3.0 Web;JAR Library Installation里选择Copy到lib目录(避免发布到Tomcat出问题)。 );
d、自动生成applicationContext.xml;
<!-- 添加bean配置 --> <bean id="HelloWorld" class="com.demo.spring.test.HelloWorld"> <property name="message"> <value>Jason's World</value> </property> </bean>
package com.demo.spring.test; public class HelloWorld { protected String message; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public String execute(String str) { return "Hello " + getMessage()+"\tstr:"+str; } }
package com.demo.spring.test; import org.springframework.context.ApplicationContext; import org.springframework.context.support.FileSystemXmlApplicationContext; public class Test { public static void main(String[] args) { ApplicationContext ctx = new FileSystemXmlApplicationContext( "src/applicationContext.xml"); HelloWorld hello = (HelloWorld) ctx.getBean("HelloWorld"); System.out.println(hello.execute("test")); System.out.println(hello.getMessage()); hello.setMessage("set message"); System.out.println(hello.getMessage()); } }
输出结果则表明环境已经支持Spring了
Hello Jason's World str:test
Jason's World
set message
更好的教程:
http://blog.csdn.net/mazhaojuan/article/category/1756651
{四星,5篇系列教程,包含概念、实践、测试,不足之处在于一些可以自动生成的代码还要自己写}
在MyEclipse中快速搭建hibernate应用
{五星,其中d.创建实体类及该实体类的映射文件使用MyEclipse自动生成,简便清晰}
参考上文五星教程即可,其中(创建SessionFactory,这个SessionFactory其实是Hibernate提供的一个用于管理Session的类,他可以确保在每个独立的线程中Session是唯一的。),2.2中教程没创建SessionFactory,应该不恰当;
该过程自动创建,在此指定factory的位置com.demo.hibernate,默认名称为HibernateSessionFactory.java;
【如果是在上节Spring基础上搭建Hibernate,在一步步next的过程中最好选择新建一个独立的xml(2.2中选择将Hibernate的配置添加到Spring生成的applicationContext.xml中,这会导致测试故障难找),默认名hibernate.cfg.xml】;
hibernate.cfg.xml详解
<!--选择使用的方言 --> <property name="dialect">org.hibernate.dialect.MySQLDialect</property> <!-- 连接字符串 --> <property name="connection.url">jdbc:mysql://localhost:3306/page0803</property> <!-- 连接数据库的用户名(本数据库密码为空) --> <property name="connection.username">root</property> <!-- 数据库驱动 --> <property name="connection.driver_class">com.mysql.jdbc.Driver</property> <property name="myeclipse.connection.profile">SSH</property> <!-- 映射文件 --> <mapping resource="com/demo/entity/Students.hbm.xml"/>
自动生成的hibernate.cfg.xml中会包含映射文件,省去很多麻烦,如果没有映射文件,运行时会报错
Students is not mapped [from Students]
使用page0803的students表(http://my.oschina.net/SnifferApache/blog/297572#OSC_h3_20)
按照3.1五星中操作自动生成持久化类Students.java和映射文件Students.hbm.xml;
Test.java
package com.demo.entity; import java.util.Iterator; import java.util.List; import org.hibernate.Session; import org.hibernate.Transaction; import com.demo.hibernate.HibernateSessionFactory; public class Test { Session session = null; Transaction tx = null; //@SuppressWarnings("rawtypes") public static void main(String[] args) { Test th = new Test(); List cl = th.getAllStudents(); if (cl != null) { Iterator it = cl.iterator(); while (it.hasNext()) { Students stu = (Students) it.next(); System.out.println("ID:" + stu.getStuId() + "name:" + stu.getStuName() + "address:" + stu.getAddress() + "Phone:" + stu.getStuPhone()); } } } //@SuppressWarnings("rawtypes") public List getAllStudents() { session = HibernateSessionFactory.getSession(); List stulist = null; try { tx = session.beginTransaction(); stulist = session.createQuery("from Students").list(); return stulist; } catch (Exception ex) { System.err.println(ex.getMessage()); return null; } finally { HibernateSessionFactory.closeSession(); } } }
运行结果
ID:1name:杨华林address:长沙Phone:13787825190
ID:2name:李明清address:天津Phone:13787525190
ID:3name:李小华address:大连Phone:13788451190
ID:4name:郑小明address:苏州Phone:13787052188
ID:5name:杨一新address:西安Phone:13787851190
ID:6name:王新任address:广州Phone:13787056460
ID:7name:谢小华address:深圳Phone:13787075550
ID:8name:王建明address:厦门Phone:13788853690
ID:9name:秦一生address:北京Phone:13788689236
ID:10name:田翠林address:杭州Phone:13787655150
ID:11name:陈小明address:广州Phone:13787623668
挖坑待填