仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 495|回复: 7
打印 上一主题 下一主题

[学习教程] JAVA网站制作之Spring MVC框架的初级设置

[复制链接]
山那边是海 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:15:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
j2EE和asp比较,其实也没什么比的,原因和我上面说那些比较差不了多少,也是稳定性,安全性,J2EE比asp高,速度上比不过asp,asp也是延续着它的拖拽控件的方法,提高速度。初级  本文将为您供应关于SpringMVC框架的设置技能,以匡助办理基于Spring的web使用程序的多个实例。本设置办理主题常被学术界所疏忽,可是,这关于实际的web开辟尤其主要。本主题其实不间接联系关系任何详细的手艺,因而,我们将从最基础的观点入手下手对这个成绩举行申明。上面,我们将依据SpringMVC框架,为基于本手艺开辟的项目供应一系列的办理计划。

  Spring设置

  人们常常会在一台以上的主机上设置一种Web使用程序。比方,在临盆中,一个网站大概只要一个实例。除此实破例,开辟职员能够在用于开辟的呆板上设置其他的(开辟)实例。也能够在公司(机构)外部的当地开辟服务器上保护其他使用程序安装,这将让您受益不浅。该实例的目标是使Web计划者能够取得有质量包管的质料,并为必要为使用程序供应文件材料的人供应准进。

  人人都晓得,即便是最复杂的场景,也必要安装、设置和保护三个实例。而关于位于分歧地舆地位的团队来讲,要处置如许的项目便加倍坚苦。关于任何不是出格复杂的Web使用程序项目,都必要多名开辟职员来安装项目安装和当地设置和运转单位测试的安装等。

  良多构造都将本人开辟的产物作为Web使用程序。我们能够在良多产物中发明这类情形,比方电子商务体系、内容办理体系(CMS),和博客公布平台等。这类产物可在多个服务器中举行部署。关于乐成的多用处Web使用程序来讲,他们的开辟职员必需要包管他们的使用程序便于安装,而且可以与其他Web使用程序完善集成。经由上述会商以后,我们应当了然,作为本文主题的使用程序设置是通用Web使用程序项目开辟职员所必要办理的主要成绩之一。

  诸如CVS或Subversion之类的版本把持体系是开辟构造利用的一种尺度工具。这类工具代表了一些构造的中央源代码版本库,它们被用于坚持源代码的有序。用户能够跟踪使用程序源代码的变更,显现分歧版本的区分,并能够断定项目分支。并且,它们使得在使用程序部署中举行部分更新成为大概。

  很分明,版本把持体系软件是跟踪源代码所必须的,它关于办理使用程序设置成绩有十分年夜的匡助。在本文中,我们将不会把重点放在版本把持体系上,由于这方面已有良多相干的质料了。在此,我们将存眷版本把持成绩中的一个小话题:怎样使Web使用程序的设置加倍便利(特别是利用SpringMVC框架编写的Web使用程序)。

  成绩是:我们在此会商的是一种甚么样的设置?任何Web使用程序都必要一些资本,这些资本一般都是其所运转的服务器所独有的,比方数据库URL、发送电子邮件的SMTP服务器,和包括公用软件文件的文件夹等。如许的设置应当会合,从而使使用程序设置加倍复杂。

  可是,这只是这个成绩最复杂的一种版本。偶然候,在使用程序开辟中必要加倍庞大的设置。这意味着,必需将各次部署中的分歧Bean毗连起来,而这会使成绩加倍庞大。

  这些使用程序设置成绩的办理计划有诸多上风,包含:简化使用程序的安装和设置历程,使源代码版本把持加倍烦琐,削减源代码版本库中的抵触征象。上面,我们将经由过程示例具体会商这个话题。

  成绩

  我们起首来演示一下上文所提到的最复杂的版本。在这一场景中,我们但愿在使用程序部署中改动的是复杂的设置参数,比方链接、暗码等。假如您已经利用SpringMVC框架开辟过Web使用程序,那末您应当晓得这里将用到的两个设置文件:

  • /WEB-INF/applicationContext.xml,它让您能够设置Bean,大概显现使用程序高低文。经由过程这个文件,您能够界说本人的营业逻辑Bean、资本和其他能够与Web端口相干联的一切Bean。
  • /WEB-INF/[servlet-name]-servlet.xml,它被用于设置Web层、视图剖析器、把持器、校验器和其他一切MVC框架中必须的Bean。[servlet-name]指的是在web.xml部署形貌符中界说的Springdispatcherservlet的称号。

  那末成绩在哪儿呢?成绩就出在applicationContext.xml中将包含一些特定于主机的Bean界说。个中,最分明的一个示例就是包括了JDBC毗连信息的bean,可是任何一种略微庞大些的使用程序都有十几个相似的Bean。看一下上面的示例:

<beanid="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName">
<value>org.postgresql.Driver</value>
</property>
<propertyname="url">
<value>jdbc:postgresql://localhost/test</value>
</property>
<propertyname="username">
<value>postgres</value>
</property>
<propertyname="password">
<value></value>
</property>
</bean>
  这个办理计划的成绩在于对applicationContext.xml文件的保护。关于初学者来讲,假想一下,项目放在源代码版本把持体系中,比方CVS。上面,假定您但愿在网站中增加新的功效,那末就必要在使用程序高低订婚义中增加分外的Bean界说。成绩是怎样在临盆服务器上表现这些改动。

  一般情形下,使用程序的当地实例不会与举动站点利用一样的数据库,因而applicationContext.xml文件将包含让您可以会见当地数据库的设置。当您想提交在源代码版本库中的改动时,就必要注重这些特定于主机属性的同步性。版本库中的文件终极大概利用当地设置中的设置。假如想在临盆服务器上更新设置,就必需手动同步这些属性的值。这长短常单调的义务,并且还十分简单堕落。

  关于使用程序的每一个实例来讲,这个成绩加倍主要。假设有三位开辟职员正在利用代码段基址,并且他们利用的是当地的数据库。当您提交变动的时分,他们每一个人在当地服务器上更新源代码的时分都必需十分审慎。他们会手动同步这些变动,然后提交他们的事情。如许一来,版本把持体系关于这些设置文件来讲已毫无用途。假如已经利用过SpringMVC,那末您应当晓得applicationContext.xml是使用程序中的关头组件,由于是它将一切的工具粘合在一同。以是,我们必要一种机制来匡助使使用程序中各项坚持有序,这点十分主要。

  正如后面所提到的,这是您大概碰到的较复杂的设置成绩。更难的成绩呈现在当必要在分歧服务器中举行分歧的Bean毗连的时分。这类成绩常会呈现在一样平常软件开辟义务中。比方,假设您的产物有一个客户身份考证模块,能够对来自干系数据库或LDAP服务器中的用户举行身份考证。天然,这一身份考证模块可使用笼统了特定版本库的Bean举行设置。假如您想改动分歧使用程序部署中考证用户的体例,就必要在applicationContext.xml文件中举行分歧的Bean毗连。这类设置成绩罕见于在部署中有可设置特征的一切使用程序。

  鄙人文中,我们将会商这两种设置成绩。起首我们会存眷同步的Bean属性成绩及其办理计划,接上去,我们会会商加倍庞大的同步Bean毗连成绩。
<P>  办理计划

  同步Bean属性

  这个成绩的一种可行的办理计划是将一切特定于主机的参数都放到一般的Java属性文件中,利用Spring的PropertyPlaceHolderConfigurer类,将这些参数写进Bean属性中。

  利用这一办理计划,我们能够天生以下的属性文件(/WEB-INF/jdbc.properties):

jdbc.driver=org.postgresql.Driver
jdbc.url=jdbc:postgresql://localhost/test
jdbc.user=postgres
jdbc.password=
  我们的Bean设置以下:

<beanid="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<propertyname="location">
<value>/WEB-INF/jdbc.properties</value>
</property>
</bean>

<beanid="dataSource"
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<propertyname="driverClassName">
<value>${jdbc.driver}</value>
</property>
<propertyname="url">
<value>${jdbc.url}</value>
</property>
<propertyname="username">
<value>${jdbc.user}</value>
</property>
<propertyname="password">
<value>${jdbc.password}</value>
</property>
</bean>
  如上所述,我们界说了一个PropertyPlaceholderConfigurer类的实例,并将其地位属性设置为我们的属性文件。该类被完成为Bean工场的后处置器,并将利用界说在文件中的属性来取代一切的占位符(${...}value)。

  使用这类手艺,我们能够从applicationContext.xml中移除一切特定于主机的设置属性。经由过程这类体例,我们能够自在地为该文件增加新的Bean,而不用忧虑特定于主机属性的同步性。如许能够简化临盆部署和保护。

  同步性毗连

  下面的手艺办理了第一个成绩,但是假如您企图修正分歧使用程序部署之间的Bean毗连,这一手艺便不很合适。针对这一成绩的一个办理计划即是分外创立一个名为applicationContext-[hostname].xml的XML界说文件。个中[hostname]是部署使用程序的主机的称号。比方,在当地的呆板上,这个文件一般名为applicationContext-localhost.xml,而在部署时,它大概改名为applicationContext-somehost.com.xml。

  能够推测,这一文件必需包含特定于某一主机的一切设置Bean。在本文中,我们将假定dataSourcebean界说将位于这类文件中,而不是通用的applicationContext.xml界说。固然,这类机制与前者并不是抵触,可是为了加倍复杂了然,我们将只存眷这类办法。

  既然我们已有了特定的设置,上面我们就来会商一下怎样将其整合到全部SpringMVC设置观点中。要到达这一目标,能够有很多办法,我们将具体地逐一申明。但起首,我们应当注重到,因为有些Bean大概位于自力的设置文件中,因而在applicationContext.xml中,一切对它们的部分援用都必需改换玉成局称号。

  比方,以下援用:

<propertyname="someProperty">
<reflocal="someBean"/>
</property>
  应变动为:

<propertyname="someProperty">
<refbean="someBean"/>
</property>
  在这以后,我们有良多能够增加分外的资本以用于设置的体例。个中最分明的就是利用<import>标签将这一分外资本包括在applicationContext.xml设置文件中。利用时,要将该标签放在applicationContext.xml文件开首。比方:
  1. <importresource="applicationContext-somehost.com.xml"/>
复制代码
<P>  如今,在自力的XML界说文件和一般的使用程序高低订婚义文件中的一切通用Bean界说都有了特定于主机的毗连。因为年夜多半的Bean都不是特定于主机的,因而我们能够像处置Web使用程序中的其他资本一样自在地处置applicationContext.xml文件,并能够经由过程符合的版本把持体系与其举行同步。

  可是,上述办法也有必定的坏处。假如您想保存分歧XML文件的分歧设置,就仍旧必需忧虑applicationContext.xml的同步性,由于资本的称号必需依据分歧服务器举行变动。固然与原本的办理计划比拟有了很年夜进步,只需变动文件名,可是这仍是必要开辟职员的手动帮忙。

  因为与applicationContext.xml比拟,主机设置不需云云频仍地举行变动,因而下一步即是将主机设置挪动到web.xml文件中(假如大概的话)。侥幸的是,我们有一个可用的办理计划。看一下上面关于web.xml设置的片段:

<listener>
<listener-class>
org.springframework.web.context.ContextLoaderListener
</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/applicationContext-somehost.com.xml
</param-value>
</context-param>
  正如您所看到的,除web.xml文件中常有的ContextLoaderListener以外,我们还增加了contextConfigLocation高低文参数设置。这一参数用于唆使框架查找这些设置文件的地位。假如这一参数被省略,则Spring就只能到applicationContext.xml中查找。这里我们也界说了特定于主机的设置文件来利用。

  使用这类办法,我们将一切特定于主机的设置从applicationContext.xml文件中移除,如许便加重了其在分歧使用程序部署中的同步性。

  假如这类办法成为您的新习气,您还可使其加倍天真。经由过程恪守以下指令,也能够将特定于主机的设置从web.xml文件中移除。

  为此,必要创立特定于我们的使用程序高低文的类:

packagenet.nighttale.spring.util;

importjava.net.InetAddress;

importorg.springframework.web.context.support.XmlWebApplicationContext;

publicclassPerHostXmlWebApplicationContext
extendsXmlWebApplicationContext{

protectedString[]getDefaultConfigLocations(){
Stringhostname="localhost";
try{
hostname=InetAddress.getLocalHost().getHostName();
}catch(Exceptione){
}

StringperHostConfiguration=DEFAULT_CONFIG_LOCATION_PREFIX
+"applicationContext-"
+hostname
+DEFAULT_CONFIG_LOCATION_SUFFIX
;

logger.debug(
"Addingperhostconfigurationfile:"
+perHostConfiguration
);

if(getNamespace()!=null){
returnnewString[]{
DEFAULT_CONFIG_LOCATION_PREFIX
+getNamespace()
+DEFAULT_CONFIG_LOCATION_SUFFIX
,perHostConfiguration};
}
else{
returnnewString[]{
DEFAULT_CONFIG_LOCATION
,perHostConfiguration};
}
}
}
  这个类拓展了Spring中常被作为默许值利用的XmlWebApplicationContext。XmlWebApplicationContext类将Web使用程序的设置从XML界说文件中复制过去。默许情形下,它能够设置来自applicationContext.xml和[servlet-name]-servlet.xml文件中的使用程序。这个类实行的唯一一项分外义务即是猎取它地点的主机称号,并将applicationContext-[hostname].xml文件增加到设置文件列表中。

  为了利用这个类,我们必要对其举行编译,将其包括在类路子中,并唆使Spring框架利用它。前两步十分复杂,我们就不在此赘述。我们能够唆使Sping经由过程contextClass高低文参数来利用它。除web.xml文件中的原有设置,我们还能够增加以下内容:

<context-param>
<param-name>contextClass</param-name>
<param-value>
net.nighttale.spring.util.PerHostXmlWebApplicationContext
</param-value>
</context-param>
  假如我们利用这一设置片段,将会有三个文件被用于初始化这个框架:[servlet-name]-servlet.xml、applicationContext-[hostname].xml和applicationContext.xml。

  正如您所看到的,applicationContext.xml和web.xml文件已完整挣脱了任何特定的设置细节,并且您也不用忧虑会在更新使用程序时损坏设置。

  可是,这类办法有一个不敷的地方。由于,不管是不是会利用,都必要在使用程序部署中有第三个设置文件。在这类情形下,便不必要特定于主机的设置。比方:

<?xmlversion="1.0"encoding="UTF-8"?>
<!DOCTYPEbeansPUBLIC"-//SPRING//DTDBEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">

<beans></beans>
  最初,必要晓得使用程序高低文类必要查找的特定主机名。反省主机称号的最复杂的办法是在呆板上运转以下代码:

System.out.println(InetAddress.getLocalHost().getHostName())
  能够将其作为Java代码实行,也可在喜好利用的剧本言语(如BeanShell或Groovy)中作为一个具有Java作风语法的剧本实行。在猎取了主机的称号以后,应当创立一个默许的/WEB-INF/applicationContext-[hostname].xml空文件夹(如我们下面所界说的),然后即可以入手下手了。

  停止语

  在本文中,我们供应了一系列的设置技能,让您在利用SpringMVC框架完成一样平常事情的时分加倍轻松。假如您但愿晓得怎样保护各类Web使用程序部署,能够试着找出最合适您的开辟历程的办理计划。您的生存会更加轻松。
在ruby里才是一切皆对象。当然我不并不是很了解ruby,但是ruby确实是将语法简化得很好。
小妖女 该用户已被删除
沙发
发表于 2015-1-20 18:33:54 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
活着的死人 该用户已被删除
板凳
发表于 2015-1-29 14:35:20 | 只看该作者
如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。
透明 该用户已被删除
地板
发表于 2015-2-5 15:17:39 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
爱飞 该用户已被删除
5#
发表于 2015-2-12 11:20:45 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
愤怒的大鸟 该用户已被删除
6#
发表于 2015-2-28 10:37:06 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
只想知道 该用户已被删除
7#
发表于 2015-3-17 02:10:29 | 只看该作者
另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。
深爱那片海 该用户已被删除
8#
发表于 2015-3-23 15:27:25 | 只看该作者
是一种突破用户端机器环境和CPU
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-12-24 01:21

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表