Spring MVC BlazeDS Flex框架实践

Spring MVC BlazeDS Flex框架实践
Spring MVC BlazeDS Flex框架实践

SpringMVC+BlzeDS+Flex框架实践:HelloWorld篇收藏

一、环境配置:

MyEclipse7.0

Felx Builder3.0

JDK1.6

Flex sdk3.2

Tomcat6.0

二、创建JAVA Web工程

在MyEclipse中创建Web Project:TestProject

将相关JAR包拷贝到WEB-INF/lib下,并引入到项目的Build Path中

三、创建FLEX工程

在Flex Builder中创建Flex Project:TestProject

四、配置web.xml

配置JAVA Web工程中WebRoot/WEB-INF/web.xml

view plaincopy to clipboardprint?

1.

2.

3.xmlns="https://www.360docs.net/doc/8812814761.html,/xml/ns/j2ee"

4.xmlns:xsi="https://www.360docs.net/doc/8812814761.html,/2001/XMLSchema-instance"

5.xsi:schemaLocation="https://www.360docs.net/doc/8812814761.html,/xml/ns/j2ee

6.https://www.360docs.net/doc/8812814761.html,/xml/ns/j2ee/web-app_2_4.xsd">

7.

8.

9.index.jsp

10.

11.

12.

13.contextConfigLocation

14.

15.classpath:ApplicationContext.xml, classpath:Application-Flex.xml

16.

17.

18.

19.

20.

https://www.360docs.net/doc/8812814761.html,.springframework.web.context.ContextLoaderListener

22.

23.

24.

25.

https://www.360docs.net/doc/8812814761.html,.springframework.security.ui.session.HttpSessionEventPublisher

27.

28.

29.

30.

31.flex

32.org.springframework.web.servlet.DispatcherServlet

33.

34.1

35.

36.

37.flex

38./messagebroker/*

39.

40.

41.

42.30

43.

在web.xml里配置了初始化配置文件(ApplicationContext.xml、Application-Flex.xml),因此需要在src目录下创建相应的xml文件(文件名需要与web.xml中设置的配置文件名相同,否则加载时将会报错)。

六、配置ApplicationContext.xml

+ expand sourceview plaincopy to clipboardprint?

1.

2. xmlns="https://www.360docs.net/doc/8812814761.html,/schema/beans"

3. xmlns:xsi="https://www.360docs.net/doc/8812814761.html,/2001/XMLSchema-instance"

4. xmlns:flex="https://www.360docs.net/doc/8812814761.html,/schema/flex"

5. xmlns:aop="https://www.360docs.net/doc/8812814761.html,/schema/aop"

6. xsi:schemaLocation="https://www.360docs.net/doc/8812814761.html,/schema/beans

7. https://www.360docs.net/doc/8812814761.html,/schema/beans/spring-beans-2.0.xsd

8. https://www.360docs.net/doc/8812814761.html,/schema/aop

9. https://www.360docs.net/doc/8812814761.html,/schema/aop/spring-aop-2.0.xsd

10. https://www.360docs.net/doc/8812814761.html,/schema/flex

11. https://www.360docs.net/doc/8812814761.html,/schema/flex/spring-flex-1.0.xsd">

12.

13.

14.

七、Spring MVC配置

使用Spring MVC框架,将使用到两个配置文件ApplicationContext.xml、[servlet-name]-servlet.xml

WEB-INF/[servlet-name]-servlet.xml, 它被用于配置Web层、视图解析器、控制器、校验器以及其他所有MVC框架中必需的

Bean。[servlet-name]指的是在web.xml部署描述符中定义的Spring dispatcher servlet的名称。

根据在web.xml中定义的名称,我们的配置文件应该为flex-servlet.xml。在

WEB-INF下创建flex-servlet.xml。

配置flex-servlet.xml

1.

2.

3.xmlns:xsi="https://www.360docs.net/doc/8812814761.html,/2001/XMLSchema-instance"

4.xsi:schemaLocation="

5.https://www.360docs.net/doc/8812814761.html,/schema/beans

6.https://www.360docs.net/doc/8812814761.html,/schema/beans/spring-beans-2.5.xsd

7.https://www.360docs.net/doc/8812814761.html,/schema/flex

8.https://www.360docs.net/doc/8812814761.html,/schema/flex/spring-flex-1.0.xsd">

9.

八、Spring+BlazeDS配置

BlazeDS是一种服务端使用java进行web通信的技术,其可以使开发人员方便地连接到后端分布式数据,推送数据到Flex或AIR应用,为RIA(rich Internet application)提供更好的体验。

Spring集成BlazeDS就是把spring的bean暴露成BlazeDS服务。在Spring BlazeDS Integration之前,BlazeDS要访问spring的bean,需要自己写代码。通过Spring BlazeDS Integration,当Flash来访问服务端时,spring会把请求转发给Flex message broker。同时,我们把spring中的一些bean暴露成Flex remoting service,那么Flash就能调用到spring中暴露成Flex remoting service的bean。

主要的BlazeDS组件是MessageBroker. Flex端传入的http信息将会通过Spring的DispatcherServlet来触发Spring-managed MessageBroker. 也就是说spring用DispatcherServlet来管理BlazeDS的MessageBroker。

配置Application-Flex.xml

1.

2.xmlns="https://www.360docs.net/doc/8812814761.html,/schema/beans" xmlns:xsi="http://www.w

https://www.360docs.net/doc/8812814761.html,/2001/XMLSchema-instance"

3.xmlns:flex="https://www.360docs.net/doc/8812814761.html,/schema/flex"

4.xmlns:aop="https://www.360docs.net/doc/8812814761.html,/schema/aop"

5.xsi:schemaLocation="https://www.360docs.net/doc/8812814761.html,/schema/beans

6.https://www.360docs.net/doc/8812814761.html,/schema/beans/spring-beans-2.0.xsd

7.https://www.360docs.net/doc/8812814761.html,/schema/aop https://www.360docs.net/doc/8812814761.html,/schema/aop/spring-aop-2.0.xsd

8.https://www.360docs.net/doc/8812814761.html,/schema/flex

9.https://www.360docs.net/doc/8812814761.html,/schema/flex/spring-flex-1.0.xsd">

10.

11.

1)下载BlazeDS

下载地址:https://www.360docs.net/doc/8812814761.html,/wiki/display/blazeds/Release+Builds

2)解压blazeds.zip,解压其中的blazeds.war,将其中flex目录下的四个xml文件(messaging- config.xml、proxy-config.xml、remoting-config.xml、services-config.xml)拷贝到

l JAVA工程WebRoot/WEB-INF/flex下(flex目录需要手动创建)

l FLEX工程src/config下(config目录需要手动创建)

3)修改FLEX 工程src/config/services-config.xml

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.server="Tomcat"/>

11.

12.

13.

14.id="my-amf"

15.class="mx.messaging.channels.AMFChannel">

16.

17.url="/TestWeb/messagebroker/amf"

18.class="flex.messaging.endpoints.AMFEndpoint"/>

19.

20.

21.id="my-secure-amf"

22.class="mx.messaging.channels.SecureAMFChannel">

23.

24. class="flex.messaging.endpoints.SecureAMFEndpoint"/>

25.

26.false

27.

28.

29.

30.id="my-polling-amf"

31.class="flex.mx.messaging.channels.AMFChannel">

32.

33.url=" /TestWeb/messagebroker/amfpolling"

34.class="flex.messaging.endpoints.AMFEndpoint"/>

35.

36. true

37. 4

38.

39.

40.

41.

42.

43.

44. [BlazeDS]

45. false

46. false

47. false

48. false

49.

50.

51. Endpoint.*

53. Configuration

54.

55.

56.

57.

58. false

59.

60.

十、框架应用

1)创建UserService.java

搭好框架后,需要在JAVA工程中创建JAVA类,并通过配置文件发布给FLEX应用,以此验证JAVA与FLEX的通信是否成功

在JAVA工程src下创建package:com.admin.service,创建UserService.java

package com.admin.service;

public class UserService {

public String getMessage(){

System.out.println("Excute UserService :"+"hello world!");

return "Hello World";

}

}

2)发布UserService

所有的JAVA类,如果想要发布给FLEX应用,就需要在Application-Flex中添加节点,在Application-Flex.xml中添加如下配置:

3)FLEX引用UserService

对于所有JAVA工程发布的远程服务,如果需要调用,则必须在FLEX工程的配置文件remoting-config.xml中进行配置,在remoting-config.xml中添加如下配置(这里的source必须和JAVA工程中发布远程服务时提供的bean id一致,否则调用将会失败):

UserService

4)创建FLEX应用程序

在FLEX工程src下创建modules/common目录,创建Index.mxml,在其中调用UserService

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3. layout="vertical"

4. horizontalAlign="center"

5. creationComplete="initApp()"

6. fontSize="15">

7.

8.

20.

21.

22.

23.

在这里需要特别提一下,由于FLEX工程创建时会默认提供一个主应用程序TestProject.mxml,当我们希望主应用程序由我们自己决定时(在本例中主应用程序为moduls/common/Index.mxml),需要修改FLEX工程目录下的.actionScriptProperties文件。修改如下配置

6)修改JAVA主页

修改JAVA工程中的index.jsp

<%response.sendRedirect(path+"/modules/common/Index.html");%>

十一、编译运行

1)编译FLEX工程

选择Project—>Clean—>TestProject

2)拷贝编译目录bin-debug/modules到JAVA工程的WebRoot下

3)在MyEclipse中启动Tomcat服务器

4)运行程序

服务器正常启动后,在浏览器中输入如下地址(其中9090为服务器端口号):

http://localhost:9090/TestProject/modules/common/Index.html

运行结果如下:

本例到此就实践结束,似乎有点长,下一次将在此基础上添加数据库配置。。。。。。

Spring MVC+BlazeDS+Flex框架实践:Database篇收藏

在https://www.360docs.net/doc/8812814761.html,/meteorlWJ/archive/2009/09/12/4545858.aspx中实践了此框架的基础搭建,本次的实践将在此基础上引入hibernate配置,并创建FLEX应用实现数据库操作。

一、环境配置

MyEclipse 7.0

Flex Builder 3.0

Tomcat 6.0

JDK1.6

Flex sdk 3.2

Oracle 10g :XE

二、Hibernate+Proxool配置

Hibernate管理JAVA类到数据库表的映射,并提供数据查询和获取的方法。Hibernate对JDBC进行了轻量级的对象封装,完成了数据持久化的重任。

这是一个Java SQL Driver驱动程序,提供了对你选择的其它类型的驱动程序的连接池封装。Proxool提供一个健壮、易用的连接池,最为关键的是这个连接池提供监控的功能,方便易用,便于发现连接泄漏的情况。

1)连接池配置:proxool.xml

在JAVA工程src下创建proxool.xml,添加如下配置:

其中参数详解如下:

driver-url :连接字符串

driver-class :驱动类

statistics :连接池使用状态统计

driver-properties :数据库连接用户名/密码

house-keeping-sleep-time :house keeper保留线程处于睡眠状态的最长时间,

house-keeper的职责就是检查各个连接的状态,并判断是否需要销毁或创建

maximum-new-connections :没有空闲连接时可以分配在队列中等待的最大请求数

maximum-connection-count :最大连接数

minimum-connection-count :最小连接数

trace :每个被执行的SQL语句是执行期是否用被LOG记录

verbose :详细信息设置

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3.

4. test

5. jdbc:oracle:thin:@localhost:1521:xe oracle.jdbc.driver.OracleDriver

6. 1m,15m,1d

7.

8.

9. 90000

10.

11. 20

12. 5

13. 3600000 100

14. 10

15. true

16. true

17. select sysdate from dual

18.

19.

2)hibernate配置

在JAVA工程src目录下创建Application-hibernate.xml,添下如下配置

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3.

4.xmlns:security="https://www.360docs.net/doc/8812814761.html,/schema/security"

5.xmlns:xsi="https://www.360docs.net/doc/8812814761.html,/2001/XMLSchema-instance" xmlns:tx="https://www.360docs.net/doc/8812814761.html,/schema/tx"

6.xsi:schemaLocation="https://www.360docs.net/doc/8812814761.html,/schema/beans https://www.360docs.net/doc/8812814761.html,/schema/beans/spring-beans-2.0.xsd

7.https://www.360docs.net/doc/8812814761.html,/schema/security https://www.360docs.net/doc/8812814761.html,/schema/security/spring-security-2.0.xsd

8.https://www.360docs.net/doc/8812814761.html,/schema/tx https://www.360docs.net/doc/8812814761.html,/schema/tx/spring-tx-2.0.xsd">

9.

10.

11. class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">

12.

13.

14.

15.

16.

https://www.360docs.net/doc/8812814761.html,.hibernate.dialect.Oracle9Dialect

18.

19. false

20.

21.true

22.

23.true

24. org.hibernate.connection.ProxoolConnectionProvider

25.

26. test

27. proxool.xml

29.

https://www.360docs.net/doc/8812814761.html,.hibernate.cache.EhCacheProvider

31.

32.

33.

34.true

35.

37.

38.true

39.

40.

41.

42.

43.

44.

45.transaction-manager="transactionManager" />

46.

47.

48. class="org.springframework.orm.hibernate3.HibernateTrans

49.actionManager">

50.

51.

3)配置web.xml

在上一篇中提到web.xml中配置了初始化时加载的文件,在添加了hibernate配置后,同样需要将其添加到web.xml的初始化文件列表中,

修改web.xml中的相关配置:

+ expand sourceview plaincopy to clipboardprint?

1.

2.contextConfigLocation

3.

4.classpath:ApplicationContext.xml,

5.classpath:Application-Flex.xml,

6.classpath:Application-hibernate.xml

7.

8.

三、数据库对象映射配置

项目中使用Hibernate管理JAVA类到数据库表的映射,它可以实现ORM(Object Relational Mapping),将关系数据库中表的数据映射成对象。

1)创建数据库对象

通过以下脚本创建数据库对象

+ expand sourceview plaincopy to clipboardprint?

1.-- Create table

2.create table FWK.FWK_USERS

3.(

4. USER_ID NUMBER not null,

5. USER_NAME VARCHAR2(100) not null,

6. USER_PASSWORD VARCHAR2(240),

7. USER_DESCRIPTION VARCHAR2(240),

8. EMAIL_ADDRESS VARCHAR2(240),

9. START_DATE_ACTIVE DATE,

10. END_DATE_ACTIVE DATE,

11. OBJECT_VERSION_NUMBER NUMBER,

12. CREATED_BY NUMBER not null,

13. CREATION_DATE DATE not null,

14. LAST_UPDATED_BY NUMBER not null,

15. LAST_UPDATE_DATE DATE not null

16.);

17.create unique index FWK_USERS_PK on fwk_users(USER_ID);

18.create sequence fwk_users_s start with 1000;

2)创建Who字段映射类

如果你接触过ORACLE数据库,相信对WHO字段应该很熟悉了吧,这里就不多做解释了。本例中将WHO字段的映射独立出来,这样对所有的数据库映射类都能同样使用,而不用重复相同的代码。

在src下创建package https://www.360docs.net/doc/8812814761.html,mon.domain,创建BaseWhoEntity.java

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.domain;

2.import java.io.Serializable;

3.import java.util.Date;

4.import javax.persistence.Column;

5.import javax.persistence.MappedSuperclass;

6.@MappedSuperclass

7.public class BaseWhoEntity implements Serializable{

8. // DataType:NUMBER

9. @Column(name = "OBJECT_VERSION_NUMBER", nullable = true)

10. private Long objectVersionNumber;

11. // DataType:NUMBER

12. @Column(name = "CREATED_BY", nullable = false)

13. private Long createdBy;

14. // DataType:DATE

15. @Column(name = "CREATION_DATE", nullable = false)

16. private Date creationDate;

17. // DataType:NUMBER

18. @Column(name = "LAST_UPDATED_BY", nullable = false)

19. private Long lastUpdatedBy;

20. // DataType:DATE

21. @Column(name = "LAST_UPDATE_DATE", nullable = false)

22. private Date lastUpdateDate;

23. public Long getObjectVersionNumber() {

24. return objectVersionNumber;

25. }

26. public void setObjectVersionNumber(Long objectVersionNumber) {

27. this.objectVersionNumber = objectVersionNumber;

28. }

29. public Long getCreatedBy() {

30. return createdBy;

31. }

32. public void setCreatedBy(Long createdBy) {

33. this.createdBy = createdBy;

34. }

35. public Date getCreationDate() {

36. return creationDate;

37. }

38. public void setCreationDate(Date creationDate) {

39. this.creationDate = creationDate;

40. }

41. public Long getLastUpdatedBy() {

42. return lastUpdatedBy;

43. }

44. public void setLastUpdatedBy(Long lastUpdatedBy) {

45. https://www.360docs.net/doc/8812814761.html,stUpdatedBy = lastUpdatedBy;

46. }

47. public Date getLastUpdateDate() {

48. return lastUpdateDate;

49. }

50. public void setLastUpdateDate(Date lastUpdateDate) {

51. https://www.360docs.net/doc/8812814761.html,stUpdateDate = lastUpdateDate;

52. }

53.}

3)创建数据库实体类

在创建完数据库表FwkUsers后,我们需要创建与之对应的JAVA实体类,通过Hibernate的annotation实现对象映射

在JAVA工程src下创建package com.admin.domain,创建FrameworkUser.java

+ expand sourceview plaincopy to clipboardprint?

2.import java.util.Date;

3.import javax.persistence.Column;

4.import javax.persistence.Entity;

5.import javax.persistence.GeneratedValue;

6.import javax.persistence.GenerationType;

7.import javax.persistence.Id;

8.import javax.persistence.SequenceGenerator;

9.import javax.persistence.Table;

10.import https://www.360docs.net/doc/8812814761.html,mon.domain.BaseWhoEntity;

11.@Entity

12.@Table(name = "FWK_USERS")

13.public class FrameworkUser extends BaseWhoEntity{

14. // DataType:NUMBER

15. @Id

16. @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "FWK_USERS_S")

17. @SequenceGenerator(name = "FWK_USERS_S", sequenceName = "FWK_USERS_S")

18. @Column(name = "USER_ID", nullable = false)

19. private Long userId;

20. // DataType:VARCHAR2

21. @Column(name = "USER_NAME", nullable = false, length = 100)

22. private String userName;

23. // DataType:VARCHAR2

24. @Column(name = "USER_PASSWORD", nullable = true, length = 240)

25. private String userPassword;

26. // DataType:VARCHAR2

27. @Column(name = "USER_DESCRIPTION", nullable = true, length = 240)

28. private String userDescription;

29. // DataType:VARCHAR2

30. @Column(name = "EMAIL_ADDRESS", nullable = true, length = 240)

31. private String emailAddress;

32. // DataType:DATE

33. @Column(name = "START_DATE_ACTIVE", nullable = true)

34. private Date startDateActive;

35. // DataType:DATE

36. @Column(name = "END_DATE_ACTIVE", nullable = true)

37. private Date endDateActive;

38. public Long getUserId() {

39. return userId;

40. }

41. public void setUserId(Long userId) {

42. https://www.360docs.net/doc/8812814761.html,erId = userId;

43. }

44. public String getUserName() {

45. return userName;

46. }

47. public void setUserName(String userName) {

48. https://www.360docs.net/doc/8812814761.html,erName = userName;

49. }

50. public String getUserPassword() {

51. return userPassword;

52. }

53. public void setUserPassword(String userPassword) {

54. https://www.360docs.net/doc/8812814761.html,erPassword = userPassword;

55. }

56. public String getUserDescription() {

57. return userDescription;

58. }

59. public void setUserDescription(String userDescription) {

60. https://www.360docs.net/doc/8812814761.html,erDescription = userDescription;

61. }

62. public String getEmailAddress() {

63. return emailAddress;

64. }

65. public void setEmailAddress(String emailAddress) {

66. this.emailAddress = emailAddress;

68. public Date getStartDateActive() {

69. return startDateActive;

70. }

71. public void setStartDateActive(Date startDateActive) {

72. this.startDateActive = startDateActive;

73. }

74. public Date getEndDateActive() {

75. return endDateActive;

76. }

77. public void setEndDateActive(Date endDateActive) {

78. this.endDateActive = endDateActive;

79. }

80.}

4)创建对象扫描类

项目中使用Hibernate映射数据库对象,在做CUDI(Create、Update、Delete、Insert)时希望能够通过对象名自动找到对应的DAO进行事务处理。

在JAVA工程src目录下创建package https://www.360docs.net/doc/8812814761.html,mon.util,创建ExtSpringPackageScan.java

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.util;

2.import java.util.ArrayList;

3.import java.util.List;

4.import org.springframework.core.io.Resource;

5.import org.springframework.core.io.support.PathMatchingResourcePatternResolver;

6.import org.springframework.core.io.support.ResourcePatternResolver;

7.import org.springframework.core.type.classreading.CachingMetadataReaderFactory;

8.import org.springframework.core.type.classreading.MetadataReader;

9.import org.springframework.core.type.classreading.MetadataReaderFactory;

10.import org.springframework.util.ClassUtils;

11.public class ExtSpringPackageScan {

12. static ResourcePatternResolver resourcePatternResolver=new PathMatchingResourcePatternResolver();

13.public static List getClasses(final String[] packagesToScan){

14. List classNames=new ArrayList();

15. if(packagesToScan != null)

16. try

17. {

18. int len = packagesToScan.length;

19. for(int i = 0; i < len; i++)

20. {

21. String pkg =packagesToScan[i];

22. String pattern = (new StringBuilder()).append("classpath*:").append(ClassUtils.convertClassNameToResourcePath(pkg)).append

("**/*.class").toString();

23. Resource resources[] = resourcePatternResolver.getResources(pattern);

24. MetadataReaderFactory readerFactory = new CachingMetadataReaderFactory(resourcePatternResolver);

25. Resource arr$[] = resources;

26. int len$ = arr$.length;

27. for(int i$ = 0; i$ < len$; i$++)

28. {

29. Resource resource = arr$[i$];

30. if(!resource.isReadable())

31. continue;

32. MetadataReader reader = readerFactory.getMetadataReader(resource);

33. String className = reader.getClassMetadata().getClassName();

34. classNames.add(className);

35. }

36. }

37. }

38. catch(Exception ex)

39. {

40. ex.printStackTrace();

41. }

42. return classNames;

43.}

44.}

四、DAO设计

DAO层的设计采用的是泛型设计。泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

1)DAO接口设计

在JAVA 工程src下创建package https://www.360docs.net/doc/8812814761.html,mon.hibernate,创建GenericDao.java

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.hibernate;

2.import java.io.Serializable;

3.import https://www.360docs.net/doc/8812814761.html,ng.reflect.InvocationTargetException;

4.import java.util.List;

5.import java.util.Map;

6.import org.springframework.orm.hibernate3.HibernateCallback;

7.public interface GenericDao {

8. public PK save(T value) throws Exception;

9. public T get(PK id, Class klass);

10. public T beforeSave(T value) throws Exception;

11.}

2)DAO接口实现

在JAVA工程https://www.360docs.net/doc/8812814761.html,mon.hibernate下创建GenericDaoImpl.java

view plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.hibernate;

2.import java.io.Serializable;

3.import java.math.BigDecimal;

4.import java.sql.SQLException;

5.import java.util.Date;

6.import java.util.HashMap;

7.import java.util.List;

8.import java.util.Map;

9.import java.util.Set;

10.import https://www.360docs.net/doc/8812814761.html,mons.beanutils.BeanUtils;

11.import org.apache.log4j.Logger;

12.import org.hibernate.Criteria;

13.import org.hibernate.HibernateException;

14.import org.hibernate.Query;

15.import org.hibernate.SQLQuery;

16.import org.hibernate.Session;

17.import org.hibernate.criterion.Example;

18.import org.hibernate.criterion.Projections;

19.import org.perf4j.aop.Profiled;

20.import org.springframework.orm.hibernate3.HibernateCallback;

21.import org.springframework.orm.hibernate3.support.HibernateDaoSupport;

22.import https://www.360docs.net/doc/8812814761.html,mon.domain.BaseWhoEntity;

23.public class GenericDaoImpl extends HibernateDaoSupport implements GenericDao {

24. public T beforeSave(T value) throws Exception {

25. if (value instanceof BaseWhoEntity) {

26. BaseWhoEntity temp = (BaseWhoEntity) value;

27. Map map = new HashMap();

28. map.put("createdBy", new Long(7));

29. map.put("creationDate", new Date());

30. map.put("lastUpdatedBy", new Long(7));

31. map.put("lastUpdateDate", new Date());

32. map.put("objectVersionNumber", new Long(1));

33. try {

34. BeanUtils.populate(value, map);

35. } catch (Exception e) {

36. logger.error("将Map转化为对像时出错", e);

37. throw e;

38. }

39. }

40. return value;

41. }

43. public PK save(T value) throws Exception {

44. try {

45. System.out.println("执行保存!");

46. return (PK) this.getHibernateTemplate().save(beforeSave(value));

47. } catch (Exception e) {

48. throw e;

49. }

50. }

51. @Profiled(tag = "GenericDaoImpl.get")

52. @SuppressWarnings("unchecked")

53. public T get(PK id, Class klass) {

54. return (T) getHibernateTemplate().get(klass, id);

55. }

56.}

五、Service设计

通过设计Service层,实现与FLEX之间的数据传递。

1)在JAVA 工程src下创建package https://www.360docs.net/doc/8812814761.html,mon.service,创建GenericService.java

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.hibernate;

2.import java.io.Serializable;

3.import java.util.ArrayList;

4.import java.util.HashMap;

5.import java.util.List;

6.import java.util.Map;

7.import https://www.360docs.net/doc/8812814761.html,mons.logging.Log;

8.import https://www.360docs.net/doc/8812814761.html,mons.logging.LogFactory;

9.import org.hibernate.SessionFactory;

10.import org.springframework.beans.factory.InitializingBean;

11.import org.springframework.orm.hibernate3.HibernateCallback;

12.import https://www.360docs.net/doc/8812814761.html,mon.util.ExtSpringPackageScan;

13.public class GenericService implements InitializingBean {

14. private static final Log logger = LogFactory.getLog(GenericService.class);

15. private SessionFactory sessionFactory;

16. private String[] packagesToScan;

17. @SuppressWarnings("unchecked")

18. private Map daoMap = new HashMap();

19. private List classList = new ArrayList();

20. public Map getDaoMap() {

21. return daoMap;

22. }

23. public void setDaoMap(Map daoMap)

24.{

25. this.daoMap = daoMap;

26. }

27. public String[] getPackagesToScan() {

28. return packagesToScan;

29. }

30. public void setPackagesToScan(String[] packagesToScan)

31.{

32. this.packagesToScan = packagesToScan;

33. }

34. @SuppressWarnings("unchecked")

35. public void afterPropertiesSet() throws Exception {

36. classList.addAll(ExtSpringPackageScan.getClasses(packagesToScan));

37. StringBuffer sb = new StringBuffer();

38. for (String className : classList)

39. sb.append(className + ",");

40. https://www.360docs.net/doc/8812814761.html,("初始化完成Pojo与表的映射:" + sb.toString());

41. https://www.360docs.net/doc/8812814761.html,("初始化完成DaoMap:" + daoMap);

42. }

43. public SessionFactory getSessionFactory() {

44. return sessionFactory;

46. public void setSessionFactory(SessionFactory sessionFactory) {

47. this.sessionFactory = sessionFactory;

48. }

49. @SuppressWarnings("unchecked")

50. public PK save(T value) throws Exception {

51. try {

52. GenericDao gd = getDao(value.getClass().getName());

53. if (gd != null) {

54. return (PK) gd.save(value);

55. } else {

56. logger.error("保存错误,无法找到相应的DAO来处理,请确认配置信息是否正确!");

57. return null;

58. }

59. } catch (Exception e) {

60. throw e;

61. }

62. }

63. public String getClass(String className) {

64. for (String classInList : classList) {

65. if (classInList.endsWith(className) || classInList.equals(className))

66. return classInList;

67. }

68. return null;

69. }

70. @SuppressWarnings("unchecked")

71. public GenericDao getDao(String fullClassName) {

72. GenericDao gd = null;

73. if (daoMap.get(fullClassName) == null) {

74. logger.debug("使用缺省的Dao");

75. gd = daoMap.get("default");

76. } else {

77. gd = daoMap.get(fullClassName);

78. logger.debug("使用Dao:" + gd.getClass().getName());

79. }

80. return gd;

81. }

82. @SuppressWarnings("unchecked")

83. public T get(PK id, String className) {

84. try {

85. String fullClassName = getClass(className);

86. Class klass = (Class) Class.forName(fullClassName);

87. GenericDao gd = getDao(fullClassName);

88. return (T) gd.get(id, klass);

89. } catch (ClassNotFoundException e) {

90. e.printStackTrace();

91. } catch (NullPointerException ne) {

92. logger.error("传入类型:" + className + "不存在!");

93. ne.printStackTrace();

94. }

95. return null;

96. }

97.}

2)创建具体应用类BaseService.java

在JAVA工程https://www.360docs.net/doc/8812814761.html,mon.service下创建BaseService.java

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.service;

2.import java.util.Date;

3.import java.util.Map;

4.import https://www.360docs.net/doc/8812814761.html,mons.beanutils.BeanUtils;

5.import https://www.360docs.net/doc/8812814761.html,mons.beanutils.ConvertUtils;

6.import https://www.360docs.net/doc/8812814761.html,mons.beanutils.PropertyUtilsBean;

7.import https://www.360docs.net/doc/8812814761.html,mons.beanutils.converters.DateConverter;

8.import org.springframework.transaction.annotation.Propagation;

10.import https://www.360docs.net/doc/8812814761.html,mon.hibernate.GenericService;

11.public class BaseService {

12. GenericService genericService;

13. private PropertyUtilsBean pb = new PropertyUtilsBean();

14. static {

15. ConvertUtils.deregister(Date.class);

16. DateConverter dateConverter = new DateConverter(null);

17. ConvertUtils.register(dateConverter, Date.class);

18. }

19. public GenericService getGenericService() {

20. return genericService;

21. }

22. public void setGenericService(GenericService genericService) {

23. this.genericService = genericService;

24. }

25. @Transactional(propagation = Propagation.SUPPORTS)

26. @SuppressWarnings("unchecked")

27. public Map save(Map map) throws Exception {

28. try {

29. if (map.get("className") != null) {

30. Object value = this.popMapToObject(map);

31. genericService.save(value);

32. return pb.describe(value);

33. }

34. } catch (Exception e) {

35. e.printStackTrace();

36. throw e;

37. }

38. return null;

39. }

40. public Object popMapToObject(Map proerties) throws Exception {

41. System.out.println("组装POJO参数:" + proerties);

42. if (proerties.get("className") != null) {

43. String className = (String) proerties.get("className");

44. Object value = Class.forName(genericService.getClass(className)).newInstance();

45. BeanUtils.populate(value, proerties);

46. System.out.println("组装后的class:" + BeanUtils.describe(value));

47. return value;

48. }

49. return null;

50. }

51.}

3)完成DAO与Service层的设计后,需要修改hibernate配置

修改Application-hibernate.xml,添加如下配置:

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3.class="https://www.360docs.net/doc/8812814761.html,mon.hibernate.GenericService">

4.

5.

6.

7.

8.

9. com.hand.**.domain

10.

11.

12.

13.

14.

15.

16.

17.

18.

20.

21.

22.class="https://www.360docs.net/doc/8812814761.html,mon.hibernate.GenericDaoImpl">

23.

24.

25.

26.

六、远程服务应用

1)发布BaseService

修改Application-Flex.xml,添加如下配置:

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3.

4.

5.

2)FLEX引用BaseService

修改FLEX工程remoting-config.xml,添加如下配置:

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3. BaseService

4.

5.

3)创建UserModule.mxml

在FLEX工程src/modules下创admin目录,创建UserModule.mxml,通过RemoteObject调用远程服务

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3.

4.

24.

25.

26.

27.

https://www.360docs.net/doc/8812814761.html,belWidth="100">

29.

30.

31.

33.

34.displayAsPassword="true"/>

35.

36.

https://www.360docs.net/doc/8812814761.html,belWidth="100">

38.

39.

40.

41.

42.

43.click="saveRecord()"

44.x="761" y="277" cornerRadius="9"/>

45.

46.

47.

4)修改Index.mxml,添加如下内容:

+ expand sourceview plaincopy to clipboardprint?

1.

2.width="50%" height="50%"/>

七、编译运行

1)编译FLEX工程

选择Project—>Clean—>TestProject

2)拷贝编译目录bin-debug/modules到JAVA工程WebRoot下

3)启动本地数据库

4)启动Tomcat服务器

5)服务器正常启动后,在浏览器中输入地址(其中9090为服务器端口) http://localhost:9090/TestProject/modules/common/Index.html

运行结果如下:

首页:

保存数据,检查JAVA与FLEX通信是否正常:

访问数据库,检查数据是否保存成功:

在Spring MVC+BlazeDS+Flex框架实践:Database篇的基础上,这次要加入的是Spring Security的配置与应用。至于Spring Security的原理及配置详解网上已经有很多可参考的文章,在这里就不再重复了。

一、Spring Security配置

1)添加Application-Security.xml

在JAVA工程src下创建Application-Security.xml

+ expand sourceview plaincopy to clipboardprint?

1.

2.

3. xmlns="https://www.360docs.net/doc/8812814761.html,/schema/security"

4. xmlns:xsi="https://www.360docs.net/doc/8812814761.html,/2001/XMLSchema-instance"

5. xsi:schemaLocation="https://www.360docs.net/doc/8812814761.html,/schema/beans https://www.360docs.net/doc/8812814761.html,/schema/beans/spring-beans-2.5.xsd

6. https://www.360docs.net/doc/8812814761.html,/schema/security https://www.360docs.net/doc/8812814761.html,/schema/security/spring-security-2.0.4.xsd

7. ">

8.

9.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

26.

27.

28.

29.

30.

31.

32.

33.

34.

35.

36.

37.

38.

39. userName

40.

41.

42.

2)修改web.xml

在添加Application-Security.xml后,需要在web.xml中将其添加到初始化加载列表中

修改web.xml以下配置:

+ expand sourceview plaincopy to clipboardprint?

1.

2. contextConfigLocation

3.

4. classpath:ApplicationContext.xml,classpath:Application-Flex.xml,classpath:Application-hibernate.xml,classpath:Application-Security.xml

5.

6.

二、Security类创建

在JAVA工程src下创建package https://www.360docs.net/doc/8812814761.html,mon.security

创建SecurityLogListener.java

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.security;

2.import java.util.Date;

3.import java.util.HashMap;

4.import java.util.List;

5.import java.util.Map;

6.import https://www.360docs.net/doc/8812814761.html,mons.logging.Log;

7.import https://www.360docs.net/doc/8812814761.html,mons.logging.LogFactory;

8.import org.springframework.context.ApplicationEvent;

9.import org.springframework.context.ApplicationListener;

10.import org.springframework.security.event.authentication.AbstractAuthenticationEvent;

11.import org.springframework.security.event.authentication.AuthenticationSuccessEvent;

13.import org.springframework.security.ui.WebAuthenticationDetails;

14.import org.springframework.security.ui.session.HttpSessionApplicationEvent;

15.import org.springframework.security.ui.session.HttpSessionDestroyedEvent;

16.import https://www.360docs.net/doc/8812814761.html,mon.hibernate.GenericService;

17.import flex.messaging.FlexContext;

18.public class SecurityLogListener implements ApplicationListener {

19. private static final Log logger = LogFactory.getLog(SecurityLogListener.class);

20. GenericService genericService;

21. public GenericService getGenericService() {

22. return genericService;

23. }

24. public void setGenericService(GenericService genericService) {

25. this.genericService = genericService;

26. }

27. public void onApplicationEvent(ApplicationEvent event) {

28. if (event instanceof AbstractAuthenticationEvent) {

29. try {

30. AbstractAuthenticationEvent authEvent = (AbstractAuthenticationEvent) event;

31. if (event instanceof AuthenticationSuccessEvent) {

32. Object obj = authEvent.getAuthentication().getPrincipal();

33. if (obj instanceof FlexUserDetails) {

34.

35. System.out.println("Username: "+((FlexUserDetails) obj).getUsername());

36. System.out.println("Login Date: "+new Date());

37. System.out.println("Session Id: "+FlexContext.getFlexSession().getId());

38. }

39. } else if (event instanceof InteractiveAuthenticationSuccessEvent)

40. logger.warn("InteractiveAuthenticationSuccessEvent:" + authEvent.getAuthentication().getDetails());

41. } catch (Exception e) {

42. // TODO Auto-generated catch block

43. e.printStackTrace();

44. }

45. } else if (event instanceof HttpSessionApplicationEvent) {

46. HttpSessionApplicationEvent sessionEvent = (HttpSessionApplicationEvent) event;

47. if (event instanceof HttpSessionDestroyedEvent) {

48. https://www.360docs.net/doc/8812814761.html,("[destroy]"+sessionEvent.getSession().getId());

49. Map params = new HashMap();

50. params.put("sessionId", sessionEvent.getSession().getId());

51. System.out.println("Session Id: "+sessionEvent.getSession().getId());

52. System.out.println("Session remove date: "+new Date());

53.

54. }else

55. https://www.360docs.net/doc/8812814761.html,("[create]"+sessionEvent.getSession().getId());

56. }

57. }

58.}

创建SecurityLogoutHandler.java

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.security;

2.import java.util.Date;

3.import java.util.HashMap;

4.import java.util.List;

5.import java.util.Map;

6.import javax.servlet.http.HttpServletRequest;

7.import javax.servlet.http.HttpServletResponse;

8.import https://www.360docs.net/doc/8812814761.html,mons.logging.Log;

9.import https://www.360docs.net/doc/8812814761.html,mons.logging.LogFactory;

10.import org.springframework.security.Authentication;

11.import org.springframework.security.ui.logout.SecurityContextLogoutHandler;

12.import https://www.360docs.net/doc/8812814761.html,mon.hibernate.GenericService;

13.public class SecurityLogoutHandler extends SecurityContextLogoutHandler {

14. private static final Log logger = LogFactory.getLog(SecurityLogoutHandler.class);

15. GenericService genericService;

19. public GenericService getGenericService() {

20. return genericService;

21. }

22. public void setGenericService(GenericService genericService) {

23. this.genericService = genericService;

24. }

25. public void logout(HttpServletRequest httpservletrequest, HttpServletResponse httpservletresponse,

26. Authentication authentication) {

27. try {

28. Map params = new HashMap();

29. params.put("sessionId", httpservletrequest.getSession().getId());

30.

31. } catch (Exception e) {

32. // TODO Auto-generated catch block

33. e.printStackTrace();

34. }

35. super.logout(httpservletrequest, httpservletresponse, authentication);

36. }

37.}

创建FlexUserDetails.java

此类中的信息与数据库的结构有关

+ expand sourceview plaincopy to clipboardprint?

1.package https://www.360docs.net/doc/8812814761.html,mon.security;

2.import java.util.Date;

3.import org.springframework.security.GrantedAuthority;

4.import https://www.360docs.net/doc/8812814761.html,erDetails;

5.import com.admin.domain.FrameworkUser;

6.public class FlexUserDetails implements UserDetails {

7. private FrameworkUser fu;

8. private GrantedAuthority[] authorities;

9. public FlexUserDetails(FrameworkUser user,GrantedAuthority[] roles){

10. this.fu=user;

11. this.authorities=roles;

12.

13. }

14. public GrantedAuthority[] getAuthorities() {

15. return authorities;

16. }

17. public String getPassword() {

18. return fu.getUserPassword();

19. }

20. public String getUsername() {

21. // TODO Auto-generated method stub

22. return fu.getUserName();

23. }

24. public boolean isAccountNonExpired() {

25. return true;

26. }

27. public boolean isAccountNonLocked() {

28. // TODO Auto-generated method stub

29. return true;

30. }

31. public boolean isCredentialsNonExpired() {

32. // TODO Auto-generated method stub

33. return true;

34. }

35. public boolean isEnabled() {

36. Date now=new Date();

37. return fu.getStartDateActive().before(now)&&(fu.getEndDateActive()==null||fu.getEndDateActive().after(now));

38. }

SpringMVC深入总结

一、前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。 官方的下载网址是:https://www.360docs.net/doc/8812814761.html,/download(本文使用是的Spring 3.0.5版本) Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都很好。可以参考我写的一篇关于Spring MVC与Struts2与Servlet比较的文章https://www.360docs.net/doc/8812814761.html,/admin/blogs/698217 Spring3 MVC的优点: 1、Spring3 MVC的学习难度小于Struts2,Struts2用不上的多余功能太多。呵呵,当然这不是决定因素。 2、Spring3 MVC很容易就可以写出性能优秀的程序,Struts2要处处小心才可以写出性能优秀的程序(指MVC部分) 3、Spring3 MVC的灵活是你无法想像的,Spring的扩展性有口皆碑,Spring3 MVC当然也不会落后,不会因使用了MVC框架而感到有任何的限制。 Struts2的众多优点:略... (呵呵,是不是不公平?) 众多文章开篇时总要吹些牛,吸引一下读者的眼球,把读者的胃口调起来,这样大家才有兴趣接着往后看。本文也没能例外。不过保证你看了之后不会后悔定有收获。

关于话务员实习报告

关于话务员实习报告 经过半年多的实习,无论从心态上还是你自己的做事方法上我都了很大的改善和提高,特此对整个实习过程做一个总结,以便自己对自己以后的职业生涯有一个良好的指导和规划,话务员实习报告。 一、实习目的 实习是大学教育最后一个极为重要的实践性教学环节。通过实习,使我们在社会实践中接触与本专业相关的实际工作,增强感性认识,培养和锻炼我们综合运用所学的基础理论、基本技能和专业知识,去独立分析和解决实际问题的能力,把理论和实践结合起来,提高实践动手能力,为我们毕业后走上工作岗位打下一定的基础;同时可以检验教学效果,为进一步提高教育教学质量,培养合格人才积累经验,并为自己能顺利与社会环境接轨做准备。全面严格要求自己,不断追求进步,不断完善自己,不断超越自己。 二.实习择业分析 实习的时候,由于自己的性格关系,也是为了以后自身更好的发展,我没有选择与自己专业对口的酒店进行实习。因为在大二开始,我就为自己的职业生涯做了一个总体的分析。如果以后在酒店发展,我的职业道路走得不是很顺利,如果能从我的性格特点来选择适合自己的道路,我会更加走得顺利。相反,我可以利用从酒店管理专业中所学到的知识从其他方面来发展,会更加有利益自己。因为我本身很踏实很耐心,而且很善于与别人沟通,我选择了电视购物这一个行业,从事电话营销。

在校期间,我对电话营销这一行业并不是了解得很多,相反,我平时投入大量精力的是市场营销,而且真正投入到电视购物中来,我才知道这个行业中的一些特点。电话营销,只能够凭借客户声音和特点来揣摩这个客户的性格特点,做这一行业特别能锻炼一个人的洞察能力和反应能力。 三、实习地点 江苏南通市海安县通榆南路8号 四、实习单位和部门 江苏同喜贸易有限公司 五、实习内容: 最开始进行的培训,因为在校期间,酒店管理这个专业中也有商务中心和前厅管理这方面的知识,所以,我上手很快,很短的时间内我就掌握了电话营销的一些礼仪,说话的方式以及一些用词方法。培训的一周中,我认真思考了电话营销中一些细节以及蕴含在其中的道理,争取早点成为一名合格的话务员。 一周后我能够顺利地和老员工一起进入回访状态。初次给陌生的客户打电话,我显得格外紧张。不过,在两三个电话后,我的紧张感和不安也明显地减少了,我意识到,销售面临着很高的拒绝率,也是对我应变能力和交集能力的一个挑战,打了10多个电话,大部分的电话都遭到了客户的拒绝。不过,我却从中锻炼了自己的胆识,说话的方式,以及如何与别人打交道。

英文字母大小写转换程序设计 (2)

摘要 (1) 数制转换 (2) 1 DOS功能调用介绍 (2) 2 设计方案 (5) 3 总程序 (6) 4 程序流程图及程序设计分析 (13) 4.1主程序流程图 (13) 4.2主程序流程图分析 (14) 4.3大小写转换子程序ABC (14) 4.3.1 子程序ABC (14) 4.3.2 子程序ABC的流程图 (16) 4.3.3 子程序ABC流程图分析 (16) 4.4ASCII码转换子程序CBA (17) 4.4.1 子程序CBA (17) 4.4.2 子程序CBA的流程图 (18) 4.4.3 子程序ABC流程图分析 (18) 5 程序运行实例 (19) 5.1大小写转换 (20) 5.2ASCII码转换 (20) 5.3输入非字符 (21) 5.4调试中出现的错误 (21) 6 心得体会 (23) 参考文献 (24)

摘要 汇编语言是直接面向处理器(Processor)的程序设计语言。处理器是在指令的控制下工作的,处理器可以识别的每一条指令称为机器指令。每一种处理器都有自己可以识别的一整套指令,称为指令集。处理器执行指令时,根据不同的指令采取不同的动作,完成不同的功能,既可以改变自己内部的工作状态,也能控制其它外围电路的工作状态。汇编语言的主要特点是可以使用助记符来表示机器指令的操作码和操作数,可以用标号和符号来代替地址、常量和变量。这次课程设计的任务是用汇编语言进行一个数制转换,从键盘输入一串字符(非字符则不接受),通过屏幕提示菜单选择转换成ASCII码,或者进行大小写转换(原来是大写转换成小写,小写则转换为大写)并显示。先输入要转换的数据,再对数据进行检验判断其合法性,对不合法的数据进行警报并重新输入数据,对合法的数据按照要求进行大小写转换或者转换成ASCII,码,最后显示转换后的字符串。 关键词:DOS功能调用 ASCII码大小写转换

2.Spring-mvc框架结构及执行流程

Spring mvc架构及执行流程一、请求处理流程图 二、执行流程说明 三、组件说明

说明:在springmvc的各个组件中,处理器映射器、处理器适配器、视图解析器称为springmvc 的三大组件。 需要用户编写的组件有handler、view 四、Spring MVC配置 1、组件扫描器:使用组件扫描器省去在spring容器配置每个controller类,使用 自动扫描标记@controller的配置如下:

2、RequestMappingHandlerMapping:注解处理器映射器,对类中标记@RequestMapping 的方法进行映射,根据RequestMapping定义的url匹配RequestMapping标记的方 法,匹配成功返回HandlerMethod对象给前端控制器,HandlerMethod对象中封装 注解描述: @RequestMapping:定义请求url到处理器功能方法的映射 3、RequestMappingHandlerAdapter:注解式处理器适配器,对标记@RequestMapping 的方法进行适配。 从spring3.1版本开始,废除了AnnotationMethodHandlerAdapter的使用,推荐使用 4、:spring mvc 使用自动加载RequestMappingHandlerMapping和RequestMappingHandlerAdapter,可用在spring-mvc.xml 配置文件总使用替代注解处理器和适配器的配置。 5、视图解析器 InternalResourceViewResolver:支持JSP视图解析 viewClass:JstlView表示JSP模板页面需要使用JSTL标签库,所以classpath中必须包含jstl 的相关jar 包。此属性可以不设置,默认为JstlView。 prefix 和suffix:查找视图页面的前缀和后缀,最终视图的址为:

A用汉语拼音拼出24个“希腊字母”的读音

用汉语拼音拼出24个“希腊字母”的读音 序号大写小写英文注音国际音标注音中文注音 1 Α? alpha a:lf 阿尔法 2 Β? beta bet 贝塔 3 Γ? gamma ga:m 伽马 4 Δ? delta delt 德尔塔 5 Ε? epsilon ep`silon 伊普西龙 6 Ζ? zeta zat 截塔 7 Η? eta eit 艾塔 8 Θα thet αit 西塔 9 Ιβ iot aiot 约塔 10 Κγ kappa kap 卡帕 11 ∧δ lambda lambd 兰布达 12 Με mu mju 缪 13 Νζ nu nju 纽

14 Ξη xi ksi 克西 15 Οθ omicron omik`ron 奥密克戎 16 ∏ι pi pai 派 17 Ρκ rho rou 肉 18 ∑λ sigma `sigma 西格马 19 Τμ tau tau 套 20 Υν upsilon jup`silon 宇普西龙 21 Φξ phi fai 佛爱 22 Χο chi phai 西 23 Ψπ psi psai 普西 24 Ωρ omega o`miga 欧米伽

全部希腊字母读音 序号大写小写英文注音国际音标注音中文注音 1 Α? alpha a:lf 阿尔法 2 Β? beta bet 贝塔 3 Γ? gamma ga:m 伽马 4 Δ? delta delt 德尔塔 5 Ε? epsilon ep`silon 伊普西龙 6 Ζ? zeta zat 截塔 7 Η? eta eit 艾塔 8 Θα theta αit 西塔 9 Ιβ iota aiot 约塔 10 Κγ kappa kap 卡帕 11 ∧δ lambda lambd 兰布达 12 Με mu mju 缪 13 Νζ nu nju 纽 14 Ξη xi ksi 克西 15 Οθ omicron omik`ron 奥密克戎 16 ∏ι pi pai 派 17 Ρκ rho rou 肉 18 ∑λ sigma `sigma 西格马

大学生话务员社会实践报告

大学生话务员社会实践报告 从x月三号到x月二十三号,整个暑假,每天都在进行社会实践——从宿舍到公司上班,上班的环境是在空调室内,对着电脑而工作, 其实挺轻松的,就是每天对着资料打打电话,上班时间是早上8:30到 下午6:00,中午有两个小时的休息时间,但是每天坐几个钟,要打一 两百个电话,有点厌烦是难免的。在这个话务员的工作上,学到了许多 知识,这个暑假很特别,时间过得很充实,在为人处事等方面都让我受 益匪浅。 一开始,我去面试这个兼职时,以为是学校里的,暑假在这里帮忙 招生,结果打电话过去问了才知道是学校外面的公司在招话务员。同学 都说话务员这个工作很累,每天要打很多电话,很枯燥。但是我没做过 话务员,想挑战一下电话营销这一行业,所以就去公司面试了。本来还 有一个培训的,结果我因为要考试,培训就错过了,什么的不知道,就 给了我几份资料,让我坐在办公室里自己先看一下,办公室里还有其他 的暑假工,有些还是高中刚毕业的,我在这次实践的过程中倒是认识了 很多人,我们学校的还有两个。培训进行了几天,因为人还没找齐,我 们这几个第一个星期就是在办公室里看看资料,后来也给我们练过,让 我们随便在资料上找一个号码,打过去推销防伪标签,刚开始很紧张, 因为没打过,而且都是老总,有时候我想的和他问的不一样,我就慌了,不知道要怎么回答,后来练了两天好多了,经理告诉我们,他第一次打 电话的时候也很紧张,慢慢电话打多了,有感觉了,就不会这样了。

今年暑假我参加了由湖南城市学院城市管理学院组织的“大学生暑期三下乡社会实践活动”,学校本着让同学们更好的掌握专业知识,发扬爱国热情,积极为社会、人民服务,让同学们全方位的接触、了解社会,特别是贫困地区的状况,并通过调查,发现当地存在的实际问题,分析并做出解决方案,并从中有所体会、领悟以增强大学生的使命感。培养良好的社会适应能力,努力锻炼自己成为对社会有益、对人民有用的当代大学生的目的,安排了城市管理学院的党总支书记刘辉书记做我们的带队老师。在全国建设社会主义新农村的形式下,我们本次活动的主题就定为“服务新农村建设新家园” 特色支教,也就是把小朋友召集起来,教他们唱歌、跳舞,和他们一起做游戏,以及把我们自带的书发给他们,为他们解说书上的知识。支教的过程中,和孩子们打成一片,听着他们爽朗的笑声,看着他们专注的眼神,以及一脸的求知欲,感觉自己好像也回到了童年,回到了那幸福的时光。 公司是中鼎国信防伪有限公司,去年刚成立的,所以是一个挺新的公司,有采购部、市场一部和二部、行政部、技术部、还有会计,挺完善的。公司刚成立时,所有员工都是通过培训,然后以自荐的形式去竞选职位的,让其他的职员投票,听起来挺好的,可以刺激大家的积极性和胆识。大多公司上下班是用打卡的形式,这里都是扫描指纹的,这样可以避免代别人打卡的现象。这里的公司主要是做防伪标签的,我们的任务就是打电话寻找潜在的意向客户,发资料给他们看看,同时还要介绍一下用了防伪标签的好处,它可以防止别人对自己产品的假冒伪劣,

键盘英文字母大小写对照表

鍵盤__英文字母大小寫__對照表

认识键盘 整个键盘分为五个小区:上面一行是功能键区和状态指示区;下面的五行是主键盘区、编辑键区和辅助键区。

对打字来说,最主要的是熟悉主键盘区各个键的用处。主键盘区包括26个英文字母,10个阿拉伯数字,一些特殊符号外,还附加一些功能键: o[Back Space] ——后退键,删除光标前一个字符;

o[Enter] ——换行键,将光标移至下一行首; o[Shift] ——字母大小写临时转换键;与数字键同时按下,输入数字上的符号; o[Ctrl]、[Alt] ——控制键,必须与其他键一起使用; o[Caps Lock] ——锁定键,将英文字母锁定为大写状态; o[Tab] ——跳格键,将光标右移到下一个跳格位置; o空格键——输入一个空格。 功能键区F1到F12的功能根据具体的操作系统或应用程序而定。 编辑键区中包括插入字符键[Ins],删除当前光标位置的字符键[Del],将光标移至行首的[Home]键和将光标移至行尾的[End]键,向上翻页[Page Up]键和向下翻页[Page Down]键,以及上下左右箭头。 辅助键区(小键盘区)有9个数字键,可用于数字的连续输入,用于大量输入数字的情况,如在财会的输入方面,另外,五笔字型中的五笔画收入也采用。当使用小键盘输入数字时应按下[Num Lock],此时对应的指示灯亮。

打字指法 准备打字时,除拇指外其余的八个手指分别放在基本键上,拇指放在空格键上,十指分工,包键到指,分工明确。

每个手指除了指定的基本键外,还分工有其他字键,称为它的范围键。其中黄色的键位由小手指负责,红色的键位由无名指负责,蓝色由中指负责,绿色键位由食指负责,紫色空格键由大拇指负责。 掌握指法练习技巧:左右手指放在基本键上;击完它迅速返回原位;食指击键注意键位角度;小指击键力量保持均匀;数字键采用跳跃式击键。

springmvc原理

1.springmvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。 为什么要使用Spring: AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用AOP后,公共服务(比如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。 IOC 允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。正如单词倒置所表明的,IOC 就像反过来的JNDI。没有使用一堆抽象工厂、服务定位器、单元素(singleton)和直接构造(straightconstruction),每一个对象都是用其协作对象构造的。因此是由容器管理协作对象(collaborator)。 Spring即使一个AOP框架,也是一IOC容器。Spring 最好的地方是它有助于您替换对象。有了Spring,只要用JavaBean属性和配置文件加入依赖性(协作对象)。然后可以很容易地在需要时替换具有类似接口的协作对象。 Spring 框架是一个分层架构,由7 个定义良好的模块组成。Spring模块构建在核心容器之上,核心容器定义了创建、配置和管理bean 的方式,如图 1 所示。 组成Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下: 核心容器:核心容器提供Spring框架的基本功能。核心容器的主要组件是BeanFactory,它是工厂模式的实现。BeanFactory使用控制反转(IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。 Spring 上下文:Spring 上下文是一个配置文件,向Spring框架提供上下文信息。Spring 上下文包括企业服务,例如JNDI、EJB、电子邮件、国际化、校验和调度功能。 Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了Spring框架中。所以,可以很容易地使Spring 框架管理的任何对象支持AOP。Spring AOP

数学、物理中常见希腊字母读法

序号大写小写英文注音国际音标注音中文读音意义 1 Α α alpha a:lf 阿尔法角度;系数 2 Β β beta bet 贝塔磁通系数;角度;系数 3 Γ γ gamma ga:m 伽马电导系数(小写) 4 Δ δ delta delt 德尔塔变动;密度;屈光度 5 Ε ε epsilon ep`silon 伊普西龙对数之基数 6 Ζ ζ zet a zat 截塔系数;方位角;阻抗;相对粘度;原子序数 7 Η η eta eit 艾塔磁滞系数;效率(小写) 8 Θ θ thet θit 西塔温度;相位角 9 Ι ι iot aiot 约塔微小,一点儿 10 Κ κ kappa kap 卡帕介质常数 11 ∧λ lambda lambd 兰布达波长(小写);体积 12 Μ μ mu mju 缪磁导系数微(千分之一)放大因数(小写) 13 Ν ν nu nju 纽磁阻系数 14 Ξ ξ xi ksi 克西 15 Ο ο omicron omik`ron 奥密克戎 16 ∏ π pi pai 派圆周率=圆周÷直径=3.14159 26535 89793 17 Ρ ρ rho rou 肉电阻系数(小写) 18 ∑ σ sigma `sigma 西格马总和(大写),表面密度;跨导(小写) 19 Τ τ tau tau 套时间常数 20 Υ υ upsilon jup`silon 宇普西龙位移 21 Φ φ phi fai 佛爱磁通;角 22 Χ χ chi phai 西 23 Ψ ψ psi psai 普西角速;介质电通量(静电力线);角 24 Ω ω omega o`miga 欧米伽欧姆(大写);角速(小写);角' apostrophe [ ?'p?str?fi ] 撇号,省略号;所有格符号—dash [ d?? ] 破折号 ‘ ’ single quotation [ kw?u'tei??n ] marks 单引号 “ ” double quotation marks 双引号 ( ) parentheses [ p?'renθisi:z ] 圆括号 [ ] square [ skw?? ] brackets 方括号 《》French quotes 法文引号;书名号 ... ellipsis [ i'lipsis ] 省略号 ¨tandem [ 't?nd?m ] colon 双点号,正号 " ditto [ 'dit?u ] . 同上 ‖ parallel [ 'p?r?lel ] 双线号 /virgule [ 'v?:gju:l ] . 斜线号 &ampersand [ '?mp?s?nd ] .= and ~swung dash 代字号 §section; division [ di'vi??n ] 分节号 → arrow [ '?r?u ] .箭号;参见号 +plus [ pl?s ] 加号;正号

暑期社会实践报告 招生话务员简易版_1

The Short-Term Results Report By Individuals Or Institutions At Regular Or Irregular Times, Including Analysis, Synthesis, Innovation, Etc., Will Eventually Achieve Good Planning For The Future. 编订:XXXXXXXX 20XX年XX月XX日 暑期社会实践报告招生 话务员简易版

暑期社会实践报告招生话务员简易 版 温馨提示:本报告文件应用在个人或机构组织在定时或不定时情况下进行的近期成果汇报,表达方式以叙述、说明为主,内容包含分析,综合,新意,重点等,最终实现对未来的良好规划。文档下载完成后可以直接编辑,请根据自己的需求进行套用。 实践单位:解放军通讯学院 实践时间:XX年7月15日——XX年8月 19日 一.实践目的 之所以会想在这个暑假去参加社会实践, 主要是想将自己所学到的东西用到社会工作中 去,从而了解自己的长短,对于该继续发扬的 东西,我要好好地保持,对于学习中还没有涉 及到,而工作中有需求的东西,我将在以后的 学习过程中,将它弥补起来,为我以后出身社 会工作,打好坚实的基础。另一方面,关注社

会、了解社会、投身社会,是我们大学生对社会应有的态度。作为即将毕业的大学生,我们对社会的了解还太少,也不够深入。而作为一名知识分子,用自己所学的东西,积极回报社会,是我们义不容辞的责任。这点作为大学生的我们做的也不够。利用这次暑假时间的机会,我想让自己与社会接轨,挑战一下自己的性格弱点。 二.实践内容 社会实践在我的大学生活中可算是重要的一部分了.从大一开始,我就积极寻找各种机会锻炼自己.家教老师,服务生,推销员等都尝试过,也在这些角色中我也学到很多知识. 忙碌的考试周过去了,我和我的同学一起,拉着行李箱,就开始出发了。拖着重重的

学习SpringMVC系列教程(一)Spring MVC入门

2.1、Spring Web MVC是什么 Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进行职责解耦,基于请求驱动指的就是使用请求-响应模型,框架的目的就是帮助我们简化开发,Spring Web MVC也是要简化我们日常Web开发的。 另外还有一种基于组件的、事件驱动的Web框架在此就不介绍了,如Tapestry、JSF等。 Spring Web MVC也是服务到工作者模式的实现,但进行可优化。前端控制器是DispatcherServlet;应用控制器其实拆为处理器映射器(Handler Mapping)进行处理器管理和视图解析器(View Resolver)进行视图管理;页面控制器/动作/处理器为Controller接口(仅包含ModelAndView handleRequest(request, response) 方法)的实现(也可以是任何的POJO类);支持本地化(Locale)解析、主题(Theme)解析及文件上传等;提供了非常灵活的数据验证、格式化和数据绑定机制;提供了强大的约定大于配置(惯例优先原则)的契约式编程支持。 2.2、Spring Web MVC能帮我们做什么 √让我们能非常简单的设计出干净的Web层和薄薄的Web层; √进行更简洁的Web层的开发;

√天生与Spring框架集成(如IoC容器、AOP等); √提供强大的约定大于配置的契约式编程支持; √能简单的进行Web层的单元测试; √支持灵活的URL到页面控制器的映射; √非常容易与其他视图技术集成,如Velocity、FreeMarker等等,因为模型数据不放在特定的API里,而是放在一个Model里(Map数据结构实现,因此很容易被其他框架使用); √非常灵活的数据验证、格式化和数据绑定机制,能使用任何对象进行数据绑定,不必实现特定框架的API; √提供一套强大的JSP标签库,简化JSP开发; √支持灵活的本地化、主题等解析; √更加简单的异常处理; √对静态资源的支持; √支持Restful风格。 2.3、Spring Web MVC架构

全部希腊字母读音

全部希腊字母读音 1 Αα a:lfa 阿尔法角度(小写);系数 2 Ββbeta 贝塔磁通系数;磁感应强度(大写);角度(小写);系数 3 Γγ ga:m 伽马电导系数(小写) 4 Γδ delta 德尔塔变化量(大写);屈 光度 5 Δε ep`silon 艾普斯龙对数之基数; 电势能(小写) 6 Εδ zeta 泽塔系数;方位角;阻抗; 相对粘度;原子序数 7 Ζε eta 伊塔磁滞系数;效率(小写) 8 Θζζita 西塔温度;相位角 9 Ηη iot约塔微小,一点儿 10 Κθ kap卡帕介质常数 11 ∧ι lamda 兰布达波长(小写);体积 12 Μκ mju 缪磁导系数微(千分之一) 放大因数(小写);动摩擦因数(小写) 13 Νλ nju 纽磁阻系数;光频率(小写),中微子(小写) 14 Ξμ ksi 克西随机变量 15 Ον omik`ron 奥密克戎无穷小量:ν(x)

16 ∏π pai 派圆周率=圆周÷直径=3.14159 2653589793 17 Ρξ rou 柔电阻系数(小写)密度(小写) 18 ∑ζ`sigma 斯格马总和(大写),表面密度;跨导(小写) 19 Τη to: 套时间常数;周期(大写) 20 Υυ jup`silon 宇普斯龙位移 21 Φθ fai 法爱磁通(大写);电势(小写);黄金分割符号;工程学中表示直径(大写斜体);光通(大写)单位lm 22 Φχ khi ch, 奇卡方分布;电感 23 Χψ psai 帕赛角速;介质电通量(静电力线);角 24 Ψω o`miga 欧米伽欧姆(大写);角速度(小写);角 希腊数字的写法 I - 1 unus II - 2 duo III - 3 tres IV - 4 quattuor V - 5 quinque

话务员实习日记

竭诚为您提供优质文档/双击可除 话务员实习日记 篇一:话务员实习心得体会 话务员实习心得体会 大三的暑期很快就到了,为了让这个暑假更有意义,我决定在假期要好好实践一下,提前体验一下社会中的无奈和竞争。高中一同学很有志向和抱负,她的公司在大家的祝福中开始挂牌营运了。大学生在假期找实习单位是非常困难的,因为时间 短,很多单位不想花人力,物力和资金来手把手教会我们,然后个把月的时间刚好上手,就准备回校了。同学很照顾我,允许我来公司实习,而且还带有底薪,虽然底薪少的得刚好够吃,但是觉得已经很好了。我在公司里面是做话务员的。在还没有从事这个职位的时候,觉得话务员很轻松的,整天打打电话就行了,不用出去跑,不用出去晒太阳。我从放假至今是第三周了,我觉得我改变了这个看法。我得出了很多与我刚来这个公司的相左的想法和感悟。 话务员没有我想象中那么轻松,而是一项非常具有挑战

力的职位。我们每天的电话量在20通左右,看起来好像少了点,可是光是这20通电话就夹杂了人生许多境遇和未曾体验过的心理变化。我们所联系的客户群体都是些企业经理和老板,他们在忙着挣钱,忙着谈生意,而我们的电话往往是在不经意间就打了过去。和善的客户就会认真听完我们所说的话,急躁点的,就不怎么听了,不怎么听也就算了,是狠狠的挂断了电话。我现在也终于明白了几个道理,异性相吸的道理和同龄相通的道理。我是女性,所以一般我打电话过对方去,一般如果是男性接的电话,他们都会比较认真仔细的听我讲,而如果对方是女的话,一般态度都是比较凶的,我终于体会到了“女人何苦为难女人”这句话。更进一层的就是,如果对方的年龄也正处20几岁的,不管男女都很会尊重人,都会很认真的听完我们的话,而如果是中年人的话,那就是毫不客气的了,不管是男性女性,态度都是很急躁的。 篇二:话务员实习报告 话务员实习报告 摘要:面临着一个艳阳高照振奋人心的暑假,我怀着新奇和期待的心情准备迎接这次的暑期社会实践。不禁回想起这一年来的心路历程,我们从对大学的懵懂憧憬,到接受大学生活的种种挑战,再到适应了大学生活并探求属于自己的大学方式,一路上有喜有悲,有笑有泪,有苦有甜,有迷茫,也有豁然开朗,我们在经历着自己的丰富的人生,就像是雏

spring MVC配置详解

牧涛 --<-<-<@态度决定一切→_→。。。 ?博客园 ?首页 ?新闻 ?新随笔 ?联系 ?管理 ?订阅 随笔- 171 文章- 3 评论- 79 spring MVC配置详解 现在主流的Web MVC框架除了Struts这个主力外,其次就是Spring MVC了,因此这也是作为一名程序员需要掌握的主流框架,框架选择多了,应对多变的需求和业务时,可实行的方案自然就多了。不过要想灵活运用Spring MVC来应对大多数的Web开发,就必须要掌握它的配置及原理。 一、Spring MVC环境搭建:(Spring 2.5.6 + Hibernate 3.2.0) 1. jar包引入 Spring 2.5.6:spring.jar、spring-webmvc.jar、commons-logging.jar、cglib -nodep-2.1_3.jar Hibernate 3.6.8:hibernate3.jar、hibernate-jpa-2.0-api-1.0.1.Final.jar、a ntlr-2.7.6.jar、commons-collections-3.1、dom4j-1.6.1.jar、javassist-3.12.0.G A.jar、jta-1.1.jar、slf4j-api-1.6.1.jar、slf4j-nop-1.6.4.jar、相应数据库的驱动jar 包 SpringMVC是一个基于DispatcherServlet(分发器)的MVC框架,每一个请求最先访问的都是DispatcherServlet,DispatcherServlet负责转发每一个Request请求给相应的Handler,Handler处理以后再返回相应的视图(View)和模型(Model),返回的视图和模型都可以不指定,即可以只返回Model或只返回View或都不返回。 DispatcherServlet是继承自HttpServlet的,既然SpringMVC是基于DispatcherSe rvlet的,那么我们先来配置一下DispatcherServlet,好让它能够管理我们希望它管理的内容。HttpServlet是在web.xml文件中声明的。 spring org.springframework.web.servlet.DispatcherServlet< /servlet-class>