使用spring-servlet.xml文件配置Spring DispatcherServlet ,该文件是:
<?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:p="http://www.springframework.org/schema/p"
xmlns:context="http://www.springframework.org/schema/context"
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">
<context:component-scan base-package="net.viralpatel.spring3.controller" />
<bean id="viewResolver"
class="org.springframework.web.servlet.view.UrlBasedViewResolver">
<property name="viewClass"
value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/WEB-INF/jsp/" />
<property name="suffix" value=".jsp" />
</bean>
在此文件中,我使用context:component-scan标记表示Spring必须扫描我的文件以搜索注释,例如,当控制器类发现方法由@RequestMapping(“ / hello”)注释进行注释时,知道此方法可以处理以“ / hello”结尾的URL的HTTP请求。这很简单…
现在我的疑问与我可以在STS \ Eclipse中自动构建的Spring MVC模板项目有关。
当我在STS中创建一个新的Spring MVC项目时,我发现DispatcherServlet由名为servlet-context.xml的文件配置,该文件包含与先前示例文件类似的某些配置。
在此文件中,我仍然具有组件扫描标签:
<context:component-scan base-package="com.mycompany.maventestwebapp" />
但是我还有另一个标签(看起来有类似的任务),这个标签是:
<annotation-driven />
这两个标签有什么区别?
另一个“奇怪”的事情是,前面的示例(不使用注释驱动的标签)与使用Spring MVC Template项目的STS创建的项目非常相似,但是如果我从其配置中删除了注释驱动的标签,文件,该项目无法运行,并给我以下错误:HTTP状态404-
在stacktrace中,我有:
警告:org.springframework.web.servlet.PageNotFound-
在DispatcherServlet
中,名称为“ appServlet”
的URI [/ maventestwebapp /]
没有找到HTTP请求的映射
但为什么?前面的示例在没有注释驱动标签的情况下效果很好,并且此控制器类非常相似。实际上,只有一种方法可以处理针对“ /”路径的HTTP请求
这是我的控制器类的代码:
package com.mycompany.maventestwebapp;
import java.text.DateFormat;
import java.util.Date;
import java.util.Locale;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
/**
* Handles requests for the application home page.
*/
@Controller
public class HomeController {
private static final Logger logger = LoggerFactory.getLogger(HomeController.class);
/**
* Simply selects the home view to render by returning its name.
*/
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
logger.info("Welcome home! The client locale is {}.", locale);
Date date = new Date();
DateFormat dateFormat = DateFormat.getDateTimeInstance(DateFormat.LONG, DateFormat.LONG, locale);
String formattedDate = dateFormat.format(date);
model.addAttribute("serverTime", formattedDate );
return "home";
}
有人可以帮助我了解这件事吗?
<mvc:annotation-driven />
意味着你可以定义spring Bean依赖项,而无需实际在XML中指定一堆元素或实现接口或扩展基类。例如@Repository
,告诉spring一个类是Dao,而无需扩展JpaDaoSupport或DaoSupport的其他子类。类似地@Controller
告诉spring,指定的类包含将处理Http请求的方法,而无需实现Controller接口或扩展实现Controller的子类。
当spring启动时,它会读取其XML配置文件,并<bean
在其中看到类似<bean class="com.example.Foo" />Foo
的标记,并且在其中查找元素,@Controller
并知道该类是控制器并将其视为此类。默认情况下,Spring假定应管理的所有类均在beans.XML文件中明确定义。
使用组件扫描<context:component-scan base-package="com.mycompany.maventestwebapp" />
告诉Spring,它应该在com.mycompany.maventestweapp
下的所有类中搜索类路径,并查看每个类是否具有@Controller
,或@Repository
,或@Service
,@Component
如果存在,则Spring将使用该类注册该类。 Bean工厂,就像你输入
在典型的spring MVC应用程序中,你会发现有两个spring配置文件,一个配置应用程序上下文的文件通常从Spring上下文侦听器开始。
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
而且,Spring MVC配置文件通常从Spring调度程序Servlet开始。例如。
<servlet>
<servlet-name>main</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>main</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
Spring支持分层bean工厂,因此对于Spring MVC,调度程序servlet上下文是主要应用程序上下文的子级。如果在Servlet上下文中请求一个名为“ abc”的bean,它将首先在servlet上下文中查找,如果在servlet上下文中找不到它,它将在父上下文(即应用程序上下文)中查找。
通用bean(例如数据源,JPA配置,业务服务)在应用程序上下文中定义,而MVC特定的配置不与servlet关联的配置文件。
希望这可以帮助。
问题内容: Group.java 这是我的方法。 我认为还可以,但是有一些例外: HTTP状态500 –内部服务器错误h1 {font-family:Tahoma,Arial,sans-serif; color:white; background-color:#525D76; font-size:22px;} h2 {font-family:Tahoma,Arial,sans- 衬线;颜色:白色;
问题内容: 我正在尝试建立 Spring MVC + Hibernate 项目,但是这让我发疯了。我还将考虑建议订购xml配置文件的建议。 我有以下文件: 我收到此stacktrace错误: 另外,如果有人可以给我一些提示以帮助我组织xml配置文件,我将非常高兴。我是.NET开发人员,所有这些Maven + xml配置对我来说都是新的东西。 谢谢 问题答案: 我的解决方案是将Datasource中
问题内容: 我在同一个主题上看过几个qts。但是我没有发现此错误的任何线索。 我正在研究POC,并点击下面的链接。 http://spring.io/guides/gs/uploading- files/ 如以上教程中所述,在独立模式下(春季嵌入式Tomcat),它可以正常工作。但是我想将其部署为Web应用程序。因此,我创建了一个单独的SpringMVC项目并添加了以下控制器。 控制器文件 我已经
问题内容: 如果我将spring应用程序映射为处理所有传入请求(),则对静态内容的请求将返回404。例如,即使当Spring拦截请求时资源存在,对“ myhost.com/css/global.css”的请求也将返回404。 替代方法是将SpringMVC映射到子目录(例如’/ home / ‘),但是在这种情况下,必须在应用程序内的所有链接中传递此目录。有没有一种方法可以将SpringMVC映射
本文向大家介绍SpringMVC的简单传值(实现代码),包括了SpringMVC的简单传值(实现代码)的使用技巧和注意事项,需要的朋友参考一下 之前学习SpringMVC时感觉他的传值很神奇:简便,快捷,高效。 今天写几个简单的传值与大家分享,希望能对大家有帮助。 一、 从后往前传: (1) 把想要传递的东西放在addObject(String,Object)里,值是Object类型,什么都可以放
本文向大家介绍springMvc请求的跳转和传值的方法,包括了springMvc请求的跳转和传值的方法的使用技巧和注意事项,需要的朋友参考一下 forword跳转页面的三种方式: 1.使用serlvet 2.使用Model对象 3.使用ModelAndView 当然也可以通过new 一个ModelAndView对象来实现 forword跳转到Controller中的方法: 跳转到相同类中的方法 跳
本文向大家介绍使用注解开发SpringMVC详细配置教程,包括了使用注解开发SpringMVC详细配置教程的使用技巧和注意事项,需要的朋友参考一下 1、使用注解开发SpringMVC 1、新建一个普通的maven项目,添加web支持 2、在pom.xml中导入相关依赖 SpringMVC相关 Servlet jsp 为了防止资源导出失败,我们加入以下代码 3、配置web.xml 注意web.xml
本文向大家介绍SpringMVC请求的路径变量里面写正则表达式的方法,包括了SpringMVC请求的路径变量里面写正则表达式的方法的使用技巧和注意事项,需要的朋友参考一下 Whitelabel Error Page This application has no explicit mapping for /error, so you are seeing this as a fallbac