求《谁把谁当真》全文带肉神仙肉全文加番外txt全百度网盘TXT

您所在的位置: &
Spring MVC框架的高级配置(下)
Spring MVC框架的高级配置(下)
本文介绍Spring MVC框架的高级配置,包括介绍配置时遇到的问题以及问题解决方法。
上文介绍Spring MVC框架配置时遇到的问题,以下是解决方案。
同步Bean属性
这个问题的一种可行的解决方案是将所有特定于主机的参数都放到普通的Java属性文件中,使用Spring的PropertyPlaceHolderConfigurer类,将这些参数写入Bean属性中。
使用这一解决方案,我们可以生成如下的属性文件(/Web-INF/JDBC.properties):
jdbc.driver=org.postgresql.Driver &
jdbcjdbc.url=jdbc:postgresql://localhost/test &
jdbc.user=postgres&
jdbc.password=&
我们的Bean配置如下:
&id="propertyConfigurer"&
class="org.springFramework.beans.factory.config.PropertyPlaceholderConfigurer"&
&&&&&name="location"&
&&&&&&&/WEB-INF/jdbc.properties&
&id="dataSource"&
class="org.springframework.jdbc.datasource.DriverManagerDataSource"&
&&&&&name="driverClassName"&
&&&&&&&&&${jdbc.driver}&
&&&&&name="url"&
&&&&&&&&&${jdbc.url}&
&&&&&name="username"&
&&&&&&&&&${jdbc.user}&
&&&&&name="password"&
&&&&&&&&&${jdbc.password}&
如上所述,我们定义了一个PropertyPlaceholderConfigurer类的实例,并将其位置属性设置为我们的属性文件。该类被实现为Bean工厂的后处理器,并将使用定义在文件中的属性来代替所有的占位符(${...}value)。
利用这种技术,我们可以从applicationContext.XML中移除所有特定于主机的配置属性。通过这种方式,我们可以自由地为该文件添加新的Bean,而不必担心特定于主机属性的同步性。这样可以简化生产部署和维护。
同步性连接
上面的技术解决了第一个问题,可是如果您计划修改不同应用程序部署之间的Bean连接,这一技术便不很适合。针对这一问题的一个解决方案便是额外创建一个名为applicationContext-[hostname].xml 的XML定义文件。其中[hostname]是部署应用程序的主机的名称。例如,在本地的机器上,这个文件通常名为 applicationContext-localhost.xml,而在部署时,它可能更名为applicationContext- .xml。
可以猜测,这一文件必须包括特定于某一主机的所有配置Bean。在本文中,我们将假设dataSource bean定义将位于这类文件中,而不是通用的applicationContext.xml定义。当然,这种机制与前者并非冲突,但是为了更加简单明了,我们将只关注这种方法。
既然我们已经有了特定的配置,下面我们就来讨论一下如何将其整合到整个Spring MVC框架配置概念中。要达到这一目的,可以有许多方法,我们将详细地一一说明。但首先,我们应该注意到,由于有些Bean可能位于独立的配置文件中,因此在 applicationContext.xml中,所有对它们的局部引用都必须更换成全局名称。
例如,如下引用:
&name="someProperty"&
&&&&local="someBean"&
应更改为:
&name="someProperty"&&
&bean="someBean"&
在这之后,我们有很多可以添加额外的资源以用于配置的方式。其中最明显的就是使用&import&标签将这一额外资源包含在 applicationContext.xml配置文件中。使用时,要将该标签放在applicationContext.xml文件开头。例如:
&resource=".xml"&
现在,在独立的XML定义文件和普通的应用程序上下文定义文件中的所有通用Bean定义都有了特定于主机的连接。由于大多数的Bean都不是特定于主机的,因此我们可以像处理Web应用程序中的其他资源一样自由地处理applicationContext.xml文件,并可以通过合适的版本控制系统与其进行同步。
但是,上述方法也有一定的弊端。如果您想保留不同XML文件的不同配置,就仍然必须担心applicationContext.xml的同步性,因为资源的名称必须根据不同服务器进行更改。虽然与原有的解决方案相比有了很大提高,只需更改文件名,但是这还是需要开发人员的手动协助。
由于与applicationContext.xml相比,主机配置不需如此频繁地进行更改,因此下一步便是将主机配置移动到web.xml文件中(如果可能的话)。幸运的是,我们有一个可用的解决方案。看一下下面关于web.xml配置的片断:
&&org.springFramework.web.context.ContextLoaderListener&& &
contextConfigLocation &
&&/WEB-INF/applicationContext.xml&/WEB-INF/&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& .xml&& &
正如您所看到的,除了web.xml文件中常有的ContextLoaderListener之外,我们还添加了 contextConfigLocation上下文参数配置。这一参数用于指示框架查找这些配置文件的位置。如果这一参数被省略,则Spring就只能到 applicationContext.xml中查找。这里我们也定义了特定于主机的配置文件来使用。
利用这种方法,我们将所有特定于主机的配置从applicationContext.xml文件中移除,这样便减轻了其在不同应用程序部署中的同步性。
如果这种方法成为您的新习惯,您还可以使其更加灵活。通过遵守下列指令,也可以将特定于主机的配置从web.xml文件中移除。
为此,需要创建特定于我们的应用程序上下文的类:
package&net.nighttale.spring. &
import&Java.net.InetA &
import&org.springframework.web.context.support.XmlWebApplicationC &
public&class&PerHostXmlWebApplicationContext &
extends&XmlWebApplicationContext&...{ &
&&&&protected&String[]&getDefaultConfigLocations()&...{ &
&&&&&&&&&&&&String&hostname&=&"localhost"; &
&&&&&&&&&&&&try&...{ &
&&&&&&&&&&&&&&&&hostname&=&InetAddress.getLocalHost().getHostName(); &
&&&&&&&&&&&&}&catch&(Exception&e)&...{ &
&&&&&&&&&&&&} &
&&&&&&&&&&&&String&perHostConfiguration&=&DEFAULT_CONFIG_LOCATION_PREFIX&
&&&&&&&&&&&&&&&&&+&"applicationContext-" &
&&&&&&&&&&&&&&&&&+&hostname &
&&&&&&&&&&&&&&&&&+&DEFAULT_CONFIG_LOCATION_SUFFIX &
&&&&&&&&&&&&&&&&&; &
&&&&&&&&&&&&logger.debug( &
&&&&&&&&&&&&&&&&&"Adding&per&host&configuration&file:&" &
&&&&&&&&&&&&&&&&&+&perHostConfiguration &
&&&&&&&&&&&&&&&&&); &
&&&&&&&&&&&&if&(getNamespace()&!=&null)&...{ &
&&&&&&&&&&&&&&&&&&&&return&new&String[]&...{ &
&&&&&&&&&&&&&&DEFAULT_CONFIG_LOCATION_PREFIX &
&&&&&&&&&&&&&&&&+&getNamespace() &
&&&&&&&&&&&&&&&&+&DEFAULT_CONFIG_LOCATION_SUFFIX &
&&&&&&&&&&&&&,&perHostConfiguration}; &
&&&&&&&&&&&&} &
&&&&&&&&&&&&else&...{ &
&&&&&&&&&&&&&&&&&&&&return&new&String[]&...{ &
&&&&&&&&&&&&&DEFAULT_CONFIG_LOCATION &
&&&&&&&&&&&&&&,&perHostConfiguration}; &
&&&&&&&&&&&&} &
这个类拓展了Spring中常被作为默认值使用的XmlWebApplicationContext。 XmlWebApplicationContext类将Web应用程序的配置从XML定义文件中复制过来。默认情况下,它可以配置来自 applicationContext.xml和[Servlet-name]-servlet.xml文件中的应用程序。这个类执行的惟一一项额外任务便是获取它所在的主机名称,并将applicationContext-[hostname].xml文件添加到配置文件列表中。
为了使用这个类,我们需要对其进行编译,将其包含在类途径中,并指示Spring框架使用它。前两步非常简单,我们就不在此赘述。我们可以指示Sping通过contextClass上下文参数来使用它。除了web.xml文件中的原有配置,我们还可以添加下列内容:
&&contextClass&
&&&&net.nighttale.spring.util.PerHostXmlWebApplicationContext &
如果我们使用这一配置片断,将会有三个文件被用于初始化这个框架:[servlet-name]-servlet.xml、applicationContext-[hostname].xml以及applicationContext.xml。
正如您所看到的,applicationContext.xml和web.xml文件已经完全摆脱了任何特定的配置细节,而且您也不必担心会在更新应用程序时破坏配置。
但是,这种方法有一个不足之处。因为,不论是否会使用,都需要在应用程序部署中有第三个配置文件。在这种情况下,便不需要特定于主机的配置。例如:
&version="1.0"&encoding="UTF-8"&
&!DOCTYPE&beans&PUBLIC&"-//SPRING//DTD&BEAN//EN"&&&&&&&&&&&&&&&&&&&&&&&&&&& "http://www.springframework.org/dtd/spring-beans.dtd"&
最后,需要知道应用程序上下文类需要查找的特定主机名。检查主机名称的最简单的方法是在机器上运行下列代码:
System.out.println(InetAddress.getLocalHost().getHostName());&
可以将其作为Java代码执行,也可在喜欢使用的脚本语言(如BeanShell或Groovy)中作为一个具有Java风格语法的脚本执行。在获取了主机的名称之后,应该创建一个默认的/WEB-INF/applicationContext-[hostname].xml空文件夹(如我们上面所定义的),然后便可以开始了。
在本文中,我们提供了一系列的配置技巧,让您在使用Spring MVC框架完成日常工作的时候更加轻松。如果您希望知道如何维护各种Web应用程序部署,可以试着找出最适合您的开发过程的解决方案。您的生活会更为轻松。
【编辑推荐】
【责任编辑: TEL:(010)】
关于的更多文章
AngularJS是很多Web开发人员在打造单页面应用程序时的首选创建方
随着云计算、物联网、大数据、移动互联网的大发展,你应该知道这些。
讲师: 38人学习过讲师: 1472人学习过讲师: 19人学习过
AngularJS是很多Web开发人员在打造单页面应用程序时的
针对大数据来说,2016年将是令人振奋的一年。智能算法
当下HTML5技术一直受到各方关注,“HTML5颠覆原生App
本书描述的是在逆向与反逆向之间展开的一场旷日持久的拉锯战。作者Eldad Eilam以一个解说人的身份为我们详尽地评述了双方使用的
51CTO旗下网站57015人阅读
JavaWeb(23)
Java(25)
本文说明:本文介绍使用maven搭建SpringMVC最简单的框架程序过程,适合初学者上手。
1.创建一个maven webapp工程。
2.修改WEB-INF目录下的web.xml文件:
内容如下,文中有注释
&?xml version=&1.0& encoding=&UTF-8&?&
&web-app xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns=&/xml/ns/javaee&
xmlns:web=&/xml/ns/javaee/web-app_2_5.xsd&
xsi:schemaLocation=&/xml/ns/javaee /xml/ns/javaee/web-app_3_0.xsd&
version=&3.0&&
&display-name&Archetype Created Web Application&/display-name&
&!-- spring MVC的核心就是DispatcherServlet,使用springMVC的第一步就是将下面的servlet放入web.xml
servlet-name属性非常重要,默认情况下,DispatchServlet会加载这个名字-servlet.xml的文件,如下,就会加载
dispather-servlet.xml,也是在WEN-INF目录下。
&servlet-name&dispatcher&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&
&load-on-startup&1&/load-on-startup&
&/servlet&
&!-- 设置dispatchservlet的匹配模式,通过把dispatchservlet映射到/,默认servlet会处理所有的请求,包括静态资源 --&
&servlet-mapping&
&servlet-name&dispatcher&/servlet-name&
&url-pattern&/&/url-pattern&
&/servlet-mapping&
&!-- 字符集过滤器 --&
&filter-name&encodingFilter&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&
&param-name&encoding&/param-name&
&param-value&UTF-8&/param-value&
&/init-param&
&init-param&
&param-name&forceEncoding&/param-name&
&param-value&true&/param-value&
&/init-param&
&filter-mapping&
&filter-name&encodingFilter&/filter-name&
&url-pattern&/*&/url-pattern&
&/filter-mapping&
&/web-app&
说明:其中字符集过滤器部分不是必须的,但是如果要处理中文的话,最好还是加上。
3.在WEN-INF目录下创建dispatcher-servlet.xml
内容如下,文中有注释。
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&http://www.springframework.org/schema/beans&
xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance&
xmlns:context=&http://www.springframework.org/schema/context&
xmlns:mvc=&http://www.springframework.org/schema/mvc&
xmlns:p=&http://www.springframework.org/schema/p&
xsi:schemaLocation=&http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd&
default-lazy-init=&true&&
&!-- 通过mvc:resources设置静态资源,这样servlet就会处理这些静态资源,而不通过控制器 --&
&!-- 设置不过滤内容,比如:css,jquery,img 等资源文件 --&
&mvc:resources location=&/*.html& mapping=&/**.html& /&
&mvc:resources location=&/css/*& mapping=&/css/**& /&
&mvc:resources location=&/js/*& mapping=&/js/**& /&
&mvc:resources location=&/images/*& mapping=&/images/**& /&
&!-- 添加注解驱动 --&
&mvc:annotation-driven /&
&!-- 默认扫描的包路径 --&
&context:component-scan base-package=&com.my.web& /&
&!-- mvc:view-controller可以在不需要Controller处理request的情况,转向到设置的View --&
&!-- 像下面这样设置,如果请求为/,则不通过controller,而直接解析为/index.jsp --&
&mvc:view-controller path=&/& view-name=&index& /&
&bean class=&org.springframework.web.servlet.view.UrlBasedViewResolver&&
&property name=&viewClass& value=&org.springframework.web.servlet.view.JstlView&&&/property&
&!-- 配置jsp路径前缀 --&
&property name=&prefix& value=&/&&&/property&
&!-- 配置URl后缀 --&
&property name=&suffix& value=&.jsp&&&/property&
&/beans&说明: 其中&!-- 默认扫描的包路径 --&
&context:component-scan base-package=&com.my.web& /&中的路径,com.my.web,是需要在src/main/java中创建的包,用来放Java代码。
4.使用maven引入SpringMVC所依赖的jar包。
修改pom.xml文件
4.1添加属性,在&project&标签中
&properties&
&project.build.sourceEncoding&UTF-8&/project.build.sourceEncoding&
&spring.version&3.1.2.RELEASE&/spring.version&
&/properties&
4.2添加依赖,在&dependencies&标签中
&!-- spring begin --&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-webmvc&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-jdbc&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-context&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-aop&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-core&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&dependency&
&groupId&org.springframework&/groupId&
&artifactId&spring-test&/artifactId&
&version&${spring.version}&/version&
&/dependency&
&!-- spring end --&
添加完成之后,通过更新工程,就会自动引入所依赖的jar包。
做完上面的准备工作之后就可以写代码了。
5.写前台页面:
在maven工程中生成的有一个index.jsp,将其修改成一下内容,很简单,只是一个登陆框,提交一个form表单,中的用户名和密码。
&%@ page language=&java& contentType=&text/ charset=UTF-8&
pageEncoding=&UTF-8&%&
&!DOCTYPE html PUBLIC &-//W3C//DTD HTML 4.01 Transitional//EN& &http://www.w3.org/TR/html4/loose.dtd&&
&meta http-equiv=&Content-Type& content=&text/ charset=UTF-8&&
&title&欢迎&/title&
&h2&Hello World!&/h2&
&form action=&login&&
用户名:&input id=&username& name=&username& type=&text&&&/input&&br&
密  码:&input id=&username& name=&password& type=&password&&&/input&&br&
&input type=&submit&&
&span&当前IP:&%=request.getRemoteAddr() %&&/span&
6.写controller层代码,用来响应前台请求。
package com.my.web.
import org.springframework.stereotype.C
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestP
import org.springframework.web.bind.annotation.ResponseB
* TODO 控制层代码
* @author 591791
* @date 日
@Controller
public class MyController {
@RequestMapping(&login&) //用来处理前台的login请求
private @ResponseBody String hello(
@RequestParam(value = &username&, required = false)String username,
@RequestParam(value = &password&, required = false)String password
return &Hello &+username+&,Your password is: &+
7,部署到tomcat上之后,运行效果如下:
====Q&A====
评论区有朋友说到实践的时候会报错:
“Exception starting filter encodingFilter
java.lang.ClassNotFoundException:&”
这是由于编译环境配置的问题,这个encoder的jar包是通过maven的形式加进来的,可能maven依赖库没有告诉到tomcat,所以tomcat启动的时候就找不到这个类。
解决办法是在project的properties中“Deployment Assembly”中加上maven lib,就可以了。
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:329651次
积分:2839
积分:2839
排名:第11791名
原创:119篇
转载:10篇
评论:78条
(1)(6)(1)(3)(5)(1)(2)(5)(1)(3)(32)(2)(2)(1)(5)(1)(1)(1)(5)(1)(3)(6)(4)(13)(8)(8)(7)JavaEE之--------SpringMVC框架的搭建(注解实现)
Spring这个强大的平台,可以放很多bean,当然像之前那样自己配置多个类确实麻烦
现在采用简单的注解实现
首先我们需要导入spring的包,带很多种
我们需要配置spring的配置文件
首先我们查看web.xml文件的配置
&span style=&font-size:18&&&!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%2D%2D%3E--&
&web-app version=&3.0& xmlns=&/xml/ns/javaee& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& xsi:schemalocation=&/xml/ns/javaee
/xml/ns/javaee/web-app_3_0.xsd&&
&display-name&&/display-name&
&context-param&
&cke:param-name&contextConfigLocation&/cke:param-name&
&cke:param-value&
classpath:beans.xml&!--{cke_protected}{C}%3C!%2D%2D%E5%8A%A0%E8%BD%BD%E5%A4%84%E4%BA%8Eclasspath%E4%B8%8B%E9%9D%A2%E7%9B%AE%E5%BD%95%E7%9A%84xml%E6%96%87%E4%BB%B6%EF%BC%8C%E9%80%9A%E8%BF%87%E6%A0%B8%E5%BF%83%E7%B1%BBContextLoaderListener%E8%BF%9B%E8%A1%8C%E5%8A%A0%E8%BD%BD%2D%2D%3E--&
&/cke:param-value&
&/context-param&
&filter-name&char&/filter-name&
&filter-class&org.springframework.web.filter.CharacterEncodingFilter&/filter-class&
&init-param&&!--{cke_protected}{C}%3C!%2D%2D%20spring%E6%A1%86%E6%9E%B6%E4%B8%AD%E8%87%AA%E5%B8%A6%E7%9A%84%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81%E8%A7%A3%E6%9E%90%E5%85%B6%EF%BC%8C%E5%B0%B1%E4%B8%8D%E7%94%A8%E6%88%91%E4%BB%AC%E8%87%AA%E5%B7%B1%E5%8E%BB%E5%86%99%E5%AD%97%E7%AC%A6%E7%BC%96%E7%A0%81%E8%BF%87%E6%BB%A4%E5%99%A8%20%2D%2D-%3E--&
&cke:param-name&encoding&/cke:param-name&
&cke:param-value&UTF-8&/cke:param-value&
&/init-param&
&filter-mapping&
&filter-name&char&/filter-name&
&servlet-name&hncu&/servlet-name&&!--{cke_protected}{C}%3C!%2D%2D%20%E6%8B%A6%E6%88%AA%E7%9A%84%E8%B7%AF%E5%BE%84%E6%98%AFserlvet%E7%9A%84name%E6%98%AFhncu%E7%9A%84%20%2D%2D%3E--&
&/filter-mapping&
&listener&
&listener-class&org.springframework.web.context.ContextLoaderListener&/listener-class&
&/listener&
&servlet-name&hncu&/servlet-name&
&servlet-class&org.springframework.web.servlet.DispatcherServlet&/servlet-class&&!--{cke_protected}{C}%3C!%2D%2D%20%E9%85%8D%E7%BD%AE%E6%A0%B8%E5%BF%83%E5%88%86%E9%85%8D%E5%99%A8%20%2D%2D%3E--&
&!--{cke_protected}{C}%3C!%2D%2D%20%E5%8F%AF%E4%BB%A5%E9%80%9A%E8%BF%87%E8%87%AA%E5%B7%B1%E9%85%8D%E7%BD%AEnamespace%E6%9D%A5%E6%8C%87%E5%AE%9ASpringMVC%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%90%8D%20%2D%2D%3E--&
&init-param&
&cke:param-name&namespace&/cke:param-name&
&cke:param-value&hncu-servlet&/cke:param-value&&!--{cke_protected}{C}%3C!%2D%2D%E8%A7%A3%E5%86%B3%E5%9C%A8%E9%A1%B9%E7%9B%AE%E5%90%AF%E5%8A%A8%E7%9A%84%E6%97%B6%E5%80%99%E7%B3%BB%E7%BB%9F%E8%87%AA%E5%8A%A8%E5%8A%A0%E8%BD%BD%E7%9A%84servlet-name.xml%E6%96%87%E4%BB%B6%E7%9A%84%E9%BA%BB%E7%83%A6%2C%E5%8F%AF%E4%BB%A5%E8%87%AA%E5%B7%B1%E8%BF%9B%E8%A1%8C%E9%85%8D%E7%BD%AE%2D%2D%3E--&
&/init-param&
&/servlet&
&servlet-mapping&
&servlet-name&hncu&/servlet-name&
&url-pattern&/sp/*&/url-pattern&&!--{cke_protected}{C}%3C!%2D%2D%20%E6%8B%A6%E6%88%AA%E8%B7%AF%E5%BE%84%E8%BF%9B%E5%8E%BBspringm%E7%9A%84%E8%8C%83%E5%9B%B4%20%2D%2D%3E--&
&/servlet-mapping&
&welcome-file-list&
&welcome-file&index.&/welcome-file&
&/welcome-file-list&
&/web-app&&/span&
web.xml文件中一般只是配置spring的加载器,和拦截进去springmvc的路径。
在beans.xml(spring的配置文件)
&span style=&font-size:18&&&!--{cke_protected}{C}%3C!%2D%2D%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%2D%2D%3E--&
&beans xmlns=&http://www.springframework.org/schema/beans& xmlns:xsi=&http://www.w3.org/2001/XMLSchema-instance& xmlns:context=&http://www.springframework.org/schema/context& xmlns:tx=&http://www.springframework.org/schema/tx& xsi:schemalocation=&http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd&&
&!--{cke_protected}{C}%3C!%2D%2D%E9%85%8D%E7%BD%AE%E5%8F%AF%E4%BB%A5%E8%AF%86%E5%88%AB%40RequestMapping%E6%B3%A8%E8%A7%A3%E7%9A%84%E7%B1%BB%20%20%2D%2D%3E--&
&bean class=&org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping&&&/bean&&!--{cke_protected}{C}%3C!%2D%2D%20%E9%85%8D%E7%BD%AE%E9%BB%98%E8%AE%A4%E7%9A%84%E6%B3%A8%E8%A7%A3%E7%B1%BB%20%2D%2D%3E--&
&bean class=&org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping&&&!--{cke_protected}{C}%3C!%2D%2D%20%E8%BF%9B%E8%A1%8Curl%E5%9C%B0%E5%9D%80%E6%98%A0%E5%B0%84%EF%BC%8C%E4%B8%8D%E9%85%8D%E7%BD%AE%E8%BF%99%E4%B8%AA%E7%9A%84%E6%97%B6%E5%80%99%EF%BC%8C%E5%BD%93%E9%A1%B9%E7%9B%AE%E5%90%AF%E5%8A%A8%E4%BC%9A%E9%9C%80%E8%A6%81%E4%B8%80%E4%B8%AAname-servlet%2D%2D%3E--&
&!--{cke_protected}{C}%3C!%2D%2Dxml%E6%96%87%E4%BB%B6%E8%BF%99%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E5%8E%9F%E6%9C%AC%E5%B0%B1%E6%98%AF%E5%B1%9E%E4%BA%8E%E5%90%8C%E4%B8%80%E4%B8%AA%E7%A9%BA%E9%97%B4%E7%9A%84%E5%86%85%E5%AE%B9%EF%BC%8C%E8%A6%81%E6%98%AF%E4%B8%8D%E8%BF%9B%E8%A1%8C%E5%9C%B0%E5%9D%80%E6%98%A0%E5%B0%84%EF%BC%8C%E7%A8%8B%E5%BA%8F%E6%98%AF%E6%9F%A5%E6%89%BE%E4%B8%8D%E5%88%B0%20%2D%2D%3E--&
&bean class=&org.springframework.web.servlet.view.ResourceBundleViewResolver&&
&!--{cke_protected}{C}%3C!%2D%2D%20%E5%BD%93%E6%8E%A7%E5%88%B6%E5%99%A8%E8%AF%B7%E6%B1%82%E4%B9%8B%E5%90%8E%EF%BC%8C%E8%BF%94%E5%9B%9E%E5%80%BC%E7%9A%84%E8%82%AF%E5%AE%9A%E4%BC%9A%E8%BD%AC%E5%88%B0%E6%9F%90%E4%B8%AA%E9%A1%B5%E9%9D%A2%EF%BC%8C%E5%B0%B1%E9%9C%80%E8%A6%81%E5%9C%B0%E5%9D%80%E8%B5%84%E6%BA%90%E7%BB%91%E5%AE%9A%20%2D%2D%3E--&
&property name=&basenames&&
&list& &!--{cke_protected}{C}%3C!%2D%2D%E9%BB%98%E8%AE%A4%E6%9F%A5%E8%AF%A2classpath%3Ahncu.properties%20%20%2D%2D%3E--&
&value&hncu&/value& &!--{cke_protected}{C}%3C!%2D%2D%20%E6%8C%87%E5%AE%9A%E8%B5%84%E6%BA%90%E9%85%8D%E7%BD%AE%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%BAhncu.properties%20%2D%2D%3E--&
&/property&
&property name=&defaultParentView& value=&hncu&&&/property&
&!--{cke_protected}{C}%3C!%2D%2D%20%E9%85%8D%E7%BD%AE%E4%B8%80%E4%B8%AA%E7%94%A8%E4%BA%8E%E6%96%87%E4%BB%B6%E4%B8%8A%E4%BC%A0%E7%9A%84%E6%A0%B8%E5%BF%83%E7%B1%BB%20%20%20%20%20%E6%B3%A8%E6%84%8F%EF%BC%9Aid%E4%B8%80%E5%AE%9A%E8%A6%81%E9%85%8D%20%0A%20%20%20%20%3Cbean%20id%3D%22multipartResolver%22%20class%3D%22org.springframework.monsMultipartResolver%22%20%3E%0A%20%20%20%20%3C%2Fbean%3E%0A%20%20%20%20%2D%2D%3E--&
&!--{cke_protected}{C}%3C!%2D%2D%20%E8%BF%99%E6%98%AF%E8%87%AA%E5%8A%A8%E6%89%AB%E6%8F%8F%E7%9A%84%E9%A1%B9%E7%9B%AE%E9%87%8C%E9%9D%A2%EF%BC%8C%E4%B8%8B%E9%9D%A2%E9%85%8D%E7%BD%AE%E7%9A%84%E8%B7%AF%E5%BE%84%E9%87%8C%E9%9D%A2%E5%BE%85%E6%9C%89%E6%B3%A8%E8%A7%A3%E7%9A%84%E7%B1%BB%EF%BC%8C%E8%BF%9B%E8%A1%8C%E8%87%AA%E5%8A%A8%E6%89%AB%E6%8F%8F%20%2D%2D%3E--&
&context:component-scan base-package=&cn.hncu&&
&/context:component-scan&
&/beans&&/span&
资源绑定核心类的书写
&span style=&font-size:18&&hncu.(class)=org.springframework.web.servlet.view.JstlView
hncu.url=/jsps/hello.jsp&/span&
这里面可以指定资源是某种类型,这里是jsp,和可以是xml,和pdf等文件
基本的配置就搞定了;
现在需要是前台请求后台,就不需要写serlvet
&h2&&span style=&font-size:18&&学生信息输入&/span&&/h2&
&form action=&'&c:url& value=&/sp/saveStud&&
&span style=&font-size:18&&' method=&post&& &input name=&name& type=&text& /&&br /&
&input name=&age& type=&text& /&&br /&
&input name=&addr.city& type=&text& /&&br /&
&input type=&submit& /& &/span&&/form&
我们能看到在上面的urll地址请求中,直接请求的是 /sp/savaStud,sp是进入springmvc,后面的路径就只需要我们在类的方法上面添加注解就可以搞定了。
&span style=&font-size:18&&@Controller
public class StudController {
@Resource(name=&studService&) //注入
private IStudS
@RequestMapping(value=&/saveStud&,params={&name&})
public String save(User user){
service.save(user);
return &hncu&;
这个简单的代码就是能够让前台访问到这里
注意:必须配置之前的配置文件
请求的类里面必须在类前面添加@controller注解,在相应的方法时,添加@RequestMapping(value=&/savaStud&);这就能请求这个函数了,当我们需要什么参数的,只需要在函数的添加即可,如 需要 request和response对象,serlvet里面的对象,这里的就可以直接添加。
还可以要求必须传什么值进来,和不准传什么值进来等等,在参数里都可以进行。
下面是代码的演示:
&span style=&font-size:18&&@Controller //声明这是采用注解的类
//@RequestMapping(value=&/aa&)
//这里声明就是为下面路径的父页面,则下面的访问路径的前面都必须带这个如访问
项目名/sp/aa/aa
public class MyControllerAnno implements ServletContextAware{
@RequestMapping(value=&/aa&) //当这样标明之后,我们采用项目名+/拦截路径名/aa就可以访问
用于影射路径的---由这里的value值决定访问地址
public String m1(){
System.out.println(&进来了&);
return &xyz&;
//可以随意添加 Servlet API类的参数类型作为入参
@RequestMapping(value=&/m2&)
public String m2(@RequestParam(&nm&)String name,HttpServletRequest req,
Integer age){
System.out.println(&name:&+name+&,age:&+age);
System.out.println(&name2:&+req.getParameter(&nm&));
return &hncu&;
//http://localhost:8080/springmvc2/sp/m3/aa/22
这种访问方式需要直接访问
@RequestMapping(value=&/m3/{na}/{ag}&)
public String m3(@PathVariable(&na&)String name,@PathVariable(&ag&)Integer age){
System.out.println(&name:&+name+&,age:&+age);//aa , 22
return &hncu&;
//http://localhost:8080/springmvc2/sp/m4
//@RequestMapping(value=&/m4&,params={&nm&,&age!=100&}) //访问时必须带参数nm但age!=100
//@RequestMapping(value=&/m4&,params={&nm&,&!age&}) //访问时必须带参数nm但不能带age
//@RequestMapping(value=&/m4&,params={&nm&,&age&}) //访问时必须还nm和age两个参数
@RequestMapping(value=&/m4&,params={&nm&,&age&},headers={&referer=http://localhost:8080/springmvc2/&,&content-type=application/*&}) //防盗链和限制必须是form或ajax提交
public String m4(){
System.out.println(&name.....&);
return &hncu&;
//级联的值对象数据也能封装
//http://localhost:8080/springmvc2/sp/m5?name=Jack&age=24&addr.city=SZ
@RequestMapping(value=&/m5&)
public String m5(User user){
System.out.println(&user:&+user);
return &hncu&;
//同时从请求路径中接收参数和从表单中接收参数,读取方式在下面有例子
@RequestMapping(value=&/m6/{nm}&)
public ModelAndView m6(@PathVariable(&nm&) String name, @RequestParam(&age&) Integer age,@RequestParam(&addr&) String addr){
System.out.println(&name:&+name+&,age:&+age);
System.out.println(&addr:&+addr);
ModelAndView mv = new ModelAndView();
mv.setViewName(&hncu&);
mv.addObject(&name&, name);
mv.addObject(&addr&, addr);
//绑定其他数据 ,如http协议的相应头//测试地址:http://localhost:8080/springmvc2/sp/m7?name=JJJJJ&addr.city=BJ
@RequestMapping(value=&/m7&)
public String m6(HttpSession s,
@RequestHeader(&accept&)String accept,
@CookieValue(&JSESSIONID&) String sessionId , User user){
System.out.println(&JSESSIONID1:&+s.getId());
System.out.println(&JSESSIONID2:&+sessionId);
System.out.println(&accept:&+accept);
System.out.println(&user:&+user);
return &hncu&;
//绑定到数组、集合等类型的请求参数(入参)上
@RequestMapping(value=&/m8&,method={RequestMethod.PUT,RequestMethod.POST})//限定请求方式只能:PUT或POST
public String m8(@RequestParam(&h&) String[] hobies,
@RequestParam(&ss&) List&string& ss ){
System.out.println(Arrays.toString(hobies));
System.out.println(&List:&+ss);
return &hncu&;
//演示文件的下载
@RequestMapping(value=&/m9&)
public void m9(OutputStream out,HttpSession session,HttpServletResponse resp) throws Exception{
String filename=session.getServletContext().getRealPath(&/upfile/中文.jsp&);
resp.setContentType(&application/force-download&);//文件下载必须要设置相应头
resp.setHeader(&Content-Disposition&, &filename=中文.jsp&);
InputStream in =new
FileInputStream(filename);
Streams.copy(in, out, true);
// 演示文件上传(用SpringMVC中提供的来实现)---多文件
MultipartFile&---FileItem
@RequestMapping(value=&/m10&)
public String m10(@RequestParam(value=&nm&)List&multipartfile& files) throws Exception, IOException{
//根据这里可以可以去name为nm的值,所以,我们可以在前台动态的添加文件选择框,供用户使用
String path=sc.getRealPath(&/upfile&);
System.out.println(path);
System.out.println(&长度&+files.size());
for(MultipartFile file:files){
Streams.copy(file.getInputStream(), new FileOutputStream(path+&/&+file.getOriginalFilename()), true);
return &hncu&;
private ServletC //需要实现ServletConextAware
public void setServletContext(ServletContext arg0) {
this.sc=arg0;
}&/multipartfile&&/string&&/span&
这些就是能实现了,但是在我们的架构层中就不行了,我们需要配置注解就能搞定了,就不用像之前那种采用spring的依赖注入了。
如简单的演示
只需要添加@Repository(value=&dao&) 就可以了
&span style=&font-size:18&&@Repository(value=&dao&)
public class AaDao{
逻辑层 Service
以前的service需要注入dao,现在直接注解搞定
@Service(value=&service&)
public class StudService {
@Resource(name=&dao&)
private IStudD//直接就可以这样用了
同样的 controller中也是需要这样的
@Controller
public class StudController {
@Resource(name=&service&)
private IStudS}
基本上springmvc+spring直接访问数据库就可以架构起来了。

我要回帖

更多关于 媚肉生香全文加番外 的文章

 

随机推荐