实时搜索: mvc web框架有哪些

mvc web框架有哪些

341条评论 2671人喜欢 1757次阅读 617人点赞
新手疑惑:

1.JAVA WEB 开发架构MCV中的 Servlet 的作用是什么?
请说的通俗易懂一点。

2.在MVC架构中 Servlet 与 Javabeans和JSP 的关系是什么?

请说的通俗易懂一点。
.. , 最好是把所需jar能发给我,教教我怎么配置。 ...

webform和mvc,为什么mvc更好一些:

MVC在框架的思想、框架的扩展、便利功能,确实比webForm好很多

框架的思想:MVC框架其也实现了AOP编程的思想。其好处就是,在webForm中如果你像控制管道的映射,你必须自己实现管道的一整套流程。而MVC中如果你想控制映射,只需要简单的继承FitterAttribute,再实现对应接口即可

便利功能:MVC框架继承了ajax,表单验证,这些通用的功能

框架扩展:其实就是针对第一点,你想控制mvc的映射过程不需要自己实现一整套,只需要实现对应的接口

JAVA WEB 开发架构中的 Servlet 的作用是什么?: 1.Servlet 相当于一个控制器,页面把请求数据提交给它,然后 它调用方法处理并返回给用户 结果页面

2.mvc意思是 模型层,视图层,控制层的意思。Servlet 是控制器也就是c(控制层),Javabean 是模型层里面封装着程序要处理的数据,jsp是视图层
程序把数据通过视图页面反馈给用户

能分享一下JAVA WEB 在MVC框架下的分角色登陆功能的实现代码吗?: http://pan.baidu.com/s/1c27aVc8
好像是这个,我也记不清了,这个项目是用maven搭建的环境

spring mvc controller 是不是单例: 我们知道Spring MVC是多线程单实例的MVC框架,就是说,对于同一个Controller,只会生成一个实例来处理所有的请求,因此bean实例只会实例化一次,并被存放在工厂中,以供其他请求使用
今天发现spring3中的controller默认是单例的,若是某个controller中有一个私有的变量a,所有请求到同一个controller时,使用的a变量是共用的,即若是某个请求中修改了这个变量a,则,在别的请求中能够读到这个修改的内容。
若是在@controller之前增加@Scope("prototype"),就可以改变单例模式为多例模式

单例的原因有二:

1、为了性能。

2、不需要多例。

1、这个不用废话了,单例不用每次都new,当然快了。

2、不需要实例会让很多人迷惑,因为spring mvc官方也没明确说不可以多例。

我这里说不需要的原因是看开发者怎么用了,如果你给controller中定义很多的属性,那么单例肯定会出现竞争访问了。

因此,只要controller中不定义属性,那么单例完全是安全的。下面给个例子说明下:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

package com.lavasoft.demo.web.controller.lsh.ch5;

import org.springframework.context.annotation.Scope;

import org.springframework.stereotype.Controller;

import org.springframework.ui.ModelMap;

import org.springframework.web.bind.annotation.RequestMapping;

/**

* Created by Administrator on 14-4-9.

*

* @author leizhimin 14-4-9 上午10:55

*/

@Controller

@RequestMapping("/demo/lsh/ch5")

@Scope("prototype")

public class MultViewController {

private static int st = 0; //静态的

private int index = 0; //非静态

@RequestMapping("/show")

public String toShow(ModelMap model) {

User user = new User();

user.setUserName("testuname");

user.setAge("23");

model.put("user", user);

return "/lsh/ch5/show";

}

@RequestMapping("/test")

public String test() {

System.out.println(st++ + " | " + index++);

return "/lsh/ch5/test";

}

}

0 | 0

1 | 1

2 | 2

3 | 3

4 | 4

改为单例的:

0 | 0

1 | 0

2 | 0

3 | 0

4 | 0

从此可见,单例是不安全的,会导致属性重复使用。

最佳实践:

1、不要在controller中定义成员变量。

2、万一必须要定义一个非静态成员变量时候,则通过注解@Scope("prototype"),将其设置为多例模式

如何用Java类配置Spring MVC: 1.方法一:在初始化时保存ApplicationContext对象
代码:
ApplicationContext ac = new FileSystemXmlApplicationContext("applicationContext.xml");
ac.getBean("beanId");
说明:这种方式适用于采用Spring框架的独立应用程序,需要程序通过配置文件手工初始化Spring的情况。
2.方法二:通过Spring提供的工具类获取ApplicationContext对象
代码:
import org.springframework.web.context.support.WebApplicationContextUtils;
ApplicationContext ac1 = WebApplicationContextUtils.getRequiredWebApplicationContext(ServletContext sc);
ApplicationContext ac2 = WebApplicationContextUtils.getWebApplicationContext(ServletContext sc);
ac1.getBean("beanId");
ac2.getBean("beanId");
说明:
这种方式适合于采用Spring框架的B/S系统,通过ServletContext对象获取ApplicationContext对象,然后在通过它获取需要的类实例。
上面两个工具方式的区别是,前者在获取失败时抛出异常,后者返回null。
其中 servletContext sc 可以具体 换成 servlet.getServletContext()或者 this.getServletContext() 或者 request.getSession().getServletContext(); 另外,由于spring是注入的对象放在ServletContext中的,所以可以直接在ServletContext取出 WebApplicationContext 对象: WebApplicationContext webApplicationContext = (WebApplicationContext) servletContext.getAttribute(WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);
3.方法三:继承自抽象类ApplicationObjectSupport
说明:抽象类ApplicationObjectSupport提供getApplicationContext()方法,可以方便的获取到ApplicationContext。
Spring初始化时,会通过该抽象类的setApplicationContext(ApplicationContext context)方法将ApplicationContext 对象注入。
4.方法四:继承自抽象类WebApplicationObjectSupport
说明:类似上面方法,调用getWebApplicationContext()获取WebApplicationContext
5.方法五:实现接口ApplicationContextAware
说明:实现该接口的setApplicationContext(ApplicationContext context)方法,并保存ApplicationContext 对象。
Spring初始化时,会通过该方法将ApplicationContext对象注入。

阐述在java中是如何分层的,可以介绍MVC架构,以一个简单的实例说明: MVC模式。
Model模式层
View视图层
Controller控制器
视图(View)代表用户交互界面,对于Web应用来说,可以概括为HTML界面,但有可能为XHTML、XML和Applet。随着应用的复杂性和规模性,界面的处理也变得具有挑战性。一个应用可能有很多不同的视图,MVC设计模式对于视图的处理仅限于视图上数据的采集和处理,以及用户的请求,而不包括在视图上的业务流程的处理。业务流程的处理交予模型(Model)处理。比如一个订单的视图只接受来自模型的数据并显示给用户,以及将用户界面的输入数据和请求传递给控制和模型。

  模型(Model):就是业务流程/状态的处理以及业务规则的制定。业务流程的处理过程对其它层来说是黑箱操作,模型接受视图请求的数据,并返回最终的处理结果。业务模型的设计可以说是MVC最主要的核心。目前流行的EJB模型就是一个典型的应用例子,它从应用技术实现的角度对模型做了进一步的划分,以便充分利用现有的组件,但它不能作为应用设计模型的框架。它仅仅告诉你按这种模型设计就可以利用某些技术组件,从而减少了技术上的困难。对一个开发者来说,就可以专注于业务模型的设计。MVC设计模式告诉我们,把应用的模型按一定的规则抽取出来,抽取的层次很重要,这也是判断开发人员是否优秀的设计依据。抽象与具体不能隔得太远,也不能太近。MVC并没有提供模型的设计方法,而只告诉你应该组织管理这些模型,以便于模型的重构和提高重用性。我们可以用对象编程来做比喻,MVC定义了一个顶级类,告诉它的子类你只能做这些,但没法限制你能做这些。这点对编程的开发人员非常重要。

  业务模型还有一个很重要的模型那就是数据模型。数据模型主要指实体对象的数据 保存(持续化)。比如将一张订单保存到数据库,从数据库获取订单。我们可以将这个模型单独列出,所有有关数据库的操作只限制在该模型中。

  控制(Controller)可以理解为从用户接收请求, 将模型与视图匹配在一起,共同完成用户的请求。划分控制层的作用也很明显,它清楚地告诉你,它就是一个分发器,选择什么样的模型,选择什么样的视图,可以完成什么样的用户请求。控制层并不做任何的数据处理。例如,用户点击一个连接,控制层接受请求后, 并不处理业务信息,它只把用户的信息传递给模型,告诉模型做什么,选择符合要求的视图返回给用户。因此,一个模型可能对应多个视图,一个视图可能对应多个模型。
MVC的一个形象的例子,我要去买一辆奔驰车,那么我先要去4S店,那么这个店面就是控制层,他不会关心车子是什么制造的,只管提供车给我。那么车厂就是SERVICE层,他只管制造车子,把结果提供给4S店,那车子的零件又是怎么来的呢?他就是通过更多的零件厂商来提供,那么这些零件厂商就是DAO层。

如何使用eclipse创建一个jdbc+spring+springmvc项目,本人菜鸟一枚,还望高手指教。: SpringMVC+MyBatis+Freemarker 简单框架搭建(一)

一、开发环境:
Eclipse、Tomcat、SVN等请参见如下的帖子,很详细了。
http://www.iteye.com/topic/982182

svn和maven插件的安装:
1、先安装gef插件
地址:http://download.eclipse.org/tools/gef/updates/interim/
2、安装svn插件
地址:http://subclipse.tigris.org/update_1.6.x
3、maven插件
m2eclipse-core Update 地址: http://m2eclipse.sonatype.org/sites/m2e
m2eclipse-extras Update 地市: http://m2eclipse.sonatype.org/sites/m2e-extras
4、安装可能出现的问题
直接在线安装maven2 会出现依赖插件找不到的问题,无法安装。必须先安装gef 插件后才能安 装m2eclipse-core 插件,然而安装m2eclipse-extras 插件又依赖subclipse 插件。所以,三个插 件的正确的安装顺序是:gef插件 》subclipse插件 》m2eclipse插件

二、web.xml 和 applicationContext.xml 配置
1、web.xml文件配置:
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
version="2.5">

<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!-- Spring MVC 配置 -->
<servlet>
<servlet-name>springServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:contextConfigLocation-springService.xml</param-value>
</init-param>
<load-on-startup>0</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<!-- 事件监听器 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- shiro 权限控制的过滤器 -->

<!-- Spring 刷新Introspector防止内存泄露 -->
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>

<!-- session超时定义,单位为分钟 -->
<session-config>
<session-timeout>20</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!-- 设置servlet编码开始 -->
<filter>
<filter-name>Set Character Encoding</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>GB2312</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Set Character Encoding</filter-name>
<url-pattern>/</url-pattern>
</filter-mapping>
<!-- 设置servlet编码结束 -->

<display-name>Archetype Created Web Application</display-name>
</web-app>

<context-param>节点和<listener>节点是web项目启动时最先读取的两个节点,所以这两个节点里面所配置的内容是web项目启动时最先加载的部分。
<context-param>节点中配置的applicationContext.xml里面主要是数据库的配置信息,以及事务等等
<listener>节点配置的是web请求的监听器

2、applicationContext.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:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
xmlns:p="http://www.springframework.org/schema/p"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd
">

<!-- 自动注解除Controller以外的Component -->
<context:component-scan base-package="com.weiluo.example">
<context:exclude-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!-- 此配置可以让我们以${xxx}的形式来读取property.properties里面的信息 -->
<!-- <context:property-placeholder/> -->

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<property name="locations">
<list>
<value>classpath:jdbc.properties</value>
</list>
</property>
</bean>

<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName" value="${jdbc.driver}"></property>
<property name="url"
value="${jdbc.url}"></property>
<property name="username" value="${jdbc.username}"></property>
<property name="password" value="${jdbc.password}"></property>

<!-- Connection Pooling Info -->
<property name="maxActive" value="${dbcp.maxActive}" />
<property name="maxIdle" value="${dbcp.maxIdle}" />
<property name="defaultAutoCommit" value="false" />
<!-- 连接Idle一个小时后超时 -->
<property name="timeBetweenEvictionRunsMillis" value="360000" />
<property name="minEvictableIdleTimeMillis" value="360000" />
</bean>

<!-- 配置SessionFactory -->
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"
p:dataSource-ref = "dataSource"
p:configLocation = "classpath:sqlMapConfig.xml" />

<!-- 采用spring与mybatis整合的第二种方法 -->
<bean id="sqlSessionTemplate" class="org.mybatis.spring.SqlSessionTemplate">
<constructor-arg index="0" ref="sqlSessionFactory" />
</bean>

<!-- 配置事务管理器 -->
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"
p:dataSource-ref = "dataSource" />

<!-- MapperScanner配置,自动搜索mapper里面的对象,并注入 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer"
p:basePackage = "com.weiluo.example.entity" />

<!-- 启动Spring注解事务 -->
<tx:annotation-driven/>

</beans>

3、web.xml中的<servlet>节点配置的是与请求处理相关的一些内容,主要是 url路由处理器,视图解析器,等等,如下:

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:util="http://www.springframework.org/schema/util" xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="
http://www.springframework.org/schema/util
http://www.springframework.org/schema/util/spring-util-3.1.xsd
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-3.1.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.1.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc-3.1.xsd">

<!-- url映射拦截器 -->
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="order" value="1" />
</bean>
<!-- 配置数据格式转换器 -->
<bean
class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">
<property name="messageConverters">
<list>
<ref bean="jsonHttpMessageConverter" />
</list>
</property>
</bean>
<bean id="jsonHttpMessageConverter"
class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
</bean>

<!-- 开启controller注解支持 -->
<!-- 注:如果base-package=cn.javass 则注解事务不起作用 TODO 读源码 -->
<context:component-scan base-package="com.weiluo.example.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>
<!-- 因为web-inf目录下面的静态资源文件是不能直接通过目录过去的,所以需要特殊声明-->
<mvc:resources location="/static/" mapping="/static/**" />

<!-- 视图解析器 -->
<bean id="viewResolver"
class="org.springframework.web.servlet.view.freemarker.FreeMarkerViewResolver">
<property name="cache" value="true" />
<property name="prefix" value="" />
<property name="suffix" value=".html" />
<property name="exposeSpringMacroHelpers" value="true" />
<property name="exposeRequestAttributes" value="true" />
<property name="exposeSessionAttributes" value="true" />
<property name="requestContextAttribute" value="rc" />
<property name="contentType" value="text/html;charset=GB2312" />
<property name="order" value="0"/>
</bean>

spring mvc mybatis 整合用配置web.xml文件吗: 使用SSM框架做了几个小项目了,感觉还不错是时候总结一下了。先总结一下SSM整合的文件配置。其实具体的用法最好还是看官方文档。
Spring: http://spring.io/docs
MyBatis: http://mybatis.github.io/mybatis-3/
基本的组织结构和用法就不说了,前面的博客和官方文档上都非常的全面。jar包可以使用Maven来组织管理。来看配置文件。
web.xml的配置
web.xml应该是整个项目最重要的配置文件了,不过servlet3.0中已经支持注解配置方式了。在servlet3.0以前每个servlet必须要在web.xml中配置servlet及其映射关系。但是在spring框架中就不用了,因为Spring中是依赖注入(Dependency Injection)的也叫控制反转(Inversion of Control)。但是也要配置一个重要的servlet,就是前端控制器(DispatcherServlet)。配置方式与普通的servlet基本相似。
配置内容如下:
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- ContextconfigLocation配置springmvc加载的配置文件
适配器、处理映射器等
-->
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<!-- 1、.action访问以.action结尾的 由DispatcherServlet进行解析
2、/,所有访问都由DispatcherServlet进行解析
-->
<url-pattern>/</url-pattern>
</servlet-mapping>

这里需要注意,springmvc.xml是spring配置文件,将在后面讨论。在<servlet-mapping>中url如果是.action,前端控制器就只会拦截以.action结尾的请求,并不会理会静态的文件。对静态页面的控制就要通过其他的手段。以/作为url的话就会拦截所有的请求,包括静态页面的请求。这样的话就可以拦截任何想要处理的请求,但是有一个问题。如果拦截了所有的请求,如果不在拦截器中做出相应的处理那么所有静态的js、css以及页面中用到的图片就会访问不到造成页面无法正常显示。但这可以通过静态资源的配置来解决这个问题。后面会提到。
配置spring容器:
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/spring/applicationContext-*.xml</param-value>

</context-param>

其中applicationContext-*.xml包含3个配置文件,是springIoC容器的具体配置。后面会提到。
配置一个监听器:
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

web.xml的完整配置是这样的:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.0"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<display-name></display-name>
<!-- 404错误拦截 -->
<error-page>
<error-code>404</error-code>
<location>/error404.jsp</location>
</error-page>
<!-- 500错误拦截 -->
<error-page>
<error-code>500</error-code>
<location>/error500.jsp</location>
</error-page>
<!-- 加载spring容器 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/spring/applicationContext-*.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- 配置前端控制器 -->
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!-- ContextconfigLocation配置springmvc加载的配置文件
适配器、处理映射器等
-->
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/classes/spring/springmvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<!-- 1、.action访问以.action结尾的 由DispatcherServlet进行解析
2、/,所有访问都由DispatcherServlet进行解析
-->
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- 解决post乱码问题的过滤器 -->
<filter>
<filter-name>CharacterEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<welcome-file-list>
<welcome-file>welcome.jsp</welcome-file>
</welcome-file-list>
</web-app>

看到配置文件中多了两块内容,一个是error page是用来友好的处理错误的,可以使用错误代码来区别并跳转到相应的处理页面。这段配置代码最好放到最前面,在前端控制器拦截之前处理。
还有一块内容是一个解决post乱码问题的过滤器,拦截post请求并编码为utf8。
springmvc.xml的配置

视图解析器的配置:
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 使用前缀和后缀 -->
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>

在Controller中设置视图名的时候会自动加上前缀和后缀。
Controller的配置
自动扫描方式,扫描包下面所有的Controller,可以使用注解来指定访问路径。
<!-- 使用组件扫描的方式可以一次扫描多个Controller -->
<context:component-scan base-package="com.wxisme.ssm.controller">

也可以使用单个的配置方式,需要指定Controller的全限定名。
<bean name="/queryUser.action" class="com.wxisme.ssm.controller.Controller1"/>

配置注解的处理器适配器和处理器映射器:
<!-- 注解的处理器适配器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
<!-- 注解的处理器映射器 -->
<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>

也可以使用下面的简化配置:
<!-- 配置注解的处理器映射器和处理器适配器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>

配置拦截器,可以直接定义拦截所有请求,也可以自定义拦截路径。
<mvc:interceptors>
<!-- 直接定义拦截所有请求 -->
<bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
<!-- <mvc:interceptor>
拦截所有路径的请求 包括子路径
<mvc:mapping path="/**"/>
<bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
</mvc:interceptor> -->
</mvc:interceptors>

配置全局异常处理器
<!-- 定义全局异常处理器 -->
<!-- 只有一个全局异常处理器起作用 -->
<bean id="exceptionResolver" class="com.wxisme.ssm.exception.OverallExceptionResolver"></bean>

配置文件上传数据解析器,在上传文件时需要配置。
<!--配置上传文件数据解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>9242880</value>
</property>
</bean>

还可以配置一些自定义的参数类型,以日期类型绑定为例。
<!-- 自定义参数类型绑定 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 日期类型绑定 -->
<bean class="com.wxisme.ssm.controller.converter.DateConverter"/>
</list>
</property>
</bean>

上面提到过如果在配置前端控制器时拦截了所有的请求,不做特殊处理就会导致部分静态资源无法使用。如果是这种情况就可以使用下面的配置来访问静态资源文件。
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/imgdata/**" location="/imgdata/" />

也可以使用默认,但是需要在web.xml中配置。
<!-- 访问静态资源文件 -->
<!-- <mvc:default-servlet-handler/> 需要在web.xml中配置-->

完全可以不拦截所有路径,大可避免这个问题的发生。
完整的配置大概是这样的,需要注意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:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context.xsd
http://www.springframework.org/schema/mvc
http://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop.xsd">
<!-- 配置视图解析器 -->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!-- 使用前缀和后缀 -->
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
<!-- 使用组件扫描的方式可以一次扫描多个Controller -->
<context:component-scan base-package="com.wxisme.ssm.controller">
</context:component-scan>
<!-- 配置注解的处理器映射器和处理器适配器 -->
<mvc:annotation-driven conversion-service="conversionService"></mvc:annotation-driven>
<!-- 自定义参数类型绑定 -->
<bean id="conversionService" class="org.springframework.format.support.FormattingConversionServiceFactoryBean">
<property name="converters">
<list>
<!-- 日期类型绑定 -->
<bean class="com.wxisme.ssm.controller.converter.DateConverter"/>
</list>
</property>
</bean>
<!-- 访问静态资源文件 -->
<!-- <mvc:default-servlet-handler/> 需要在web.xml中配置-->
<mvc:resources mapping="/images/**" location="/images/" />
<mvc:resources mapping="/css/**" location="/css/" />
<mvc:resources mapping="/js/**" location="/js/" />
<mvc:resources mapping="/imgdata/**" location="/imgdata/" />
<!-- 定义拦截器 -->
<mvc:interceptors>
<!-- 直接定义拦截所有请求 -->
<bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
<!-- <mvc:interceptor>
拦截所有路径的请求 包括子路径
<mvc:mapping path="/**"/>
<bean class="com.wxisme.ssm.interceptor.IdentityInterceptor"></bean>
</mvc:interceptor> -->
</mvc:interceptors>
<!--配置上传文件数据解析器 -->
<bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize">
<value>9242880</value>
</property>
</bean>
<!-- 定义全局异常处理器 -->
<!-- 只有一个全局异常处理器起作用 -->
<bean id="exceptionResolver" class="com.wxisme.ssm.exception.OverallExceptionResolver"></bean>
</beans>

applicationContext-*.xml的配置
applicationContext-*.xml包括三个配置文件,分别对应数据层控制、业务逻辑service控制和事务的控制。
数据访问层的控制,applicationContext-dao.xml的配置:
配置加载数据连接资源文件的配置,把数据库连接数据抽取到一个properties资源文件中方便管理。

  • 1350的英雄哪个好s5

    如何下载3699exo冷血佳人小游戏?: 可以去橙光游戏上去看看,那上有好多exo小游戏 ...

    245条评论 1942人喜欢 4830次阅读 844人点赞
  • plus在哪个文件夹

    儿童食用的营养丰富而又易于消化的食物有什么: 幼儿期体格、智力发育都有赖于合理的营养供给,而幼儿期也是智力发育的关键时期,故保证其营养所需更为重要。幼儿乳牙渐出齐,咀嚼能力及消化能力增强,可以吃多种食物,但其消化咀嚼能力仍较大儿童为差,故其食品应切碎煮烂,一般生...

    323条评论 5926人喜欢 4467次阅读 315人点赞
  • 五环之歌说唱是谁

    DDP贸易条件下,货物通过DHL方式从国内寄到美国,到美国清关时需要准备哪些资料: 寄DHL的话,就不用准备其他什么资料了,只需打印三份发票,DHL会帮你清关的。跟DDP没很大关系,按DDP交易的话,买方风险最大。 ...

    643条评论 4021人喜欢 5502次阅读 202人点赞
  • d小调琶音是哪几个音

    B站的用户怎么申请?: 回答b站变态问题,答对超过一定数量就可以注册了,如果你的身边有人玩可以让他给你发邀请码,这样也可以注册,而且比上面那种方法简单,如果没有可以到淘宝上买一个邀请码,很便宜的。 ...

    629条评论 5513人喜欢 5072次阅读 698人点赞
  • 15天小狗睡多久

    求b站邀请码,问题好难啊,都是以前的动漫没补完怎么破,求私信。: 关闭购买了的说。。 ...

    696条评论 5797人喜欢 1220次阅读 917人点赞
  • dnf金币哪里买

    鼻旁 脸旁有几个地方起白皮,弄掉里面红红的,之后再长白皮,不痒不疼。几个月不见好,买过药,: 病情分析:脱皮可能和血热有关系的,指导意见:可能是缺乏维生素B的因素的,平时多吃点含维生素B的食物还有水果,有一定的帮助的。 ...

    281条评论 3664人喜欢 2140次阅读 860人点赞