《spring实战》里基于java配置的问题

吃不胖的茶叶蛋 2017-01-16 11:18:21
书上的启动代码,我跟着敲了一遍,最后在tomcat跑不起来~报404错。。。。想不出哪里出错了,求指导。。。。。tomcat 用的8.0.29,是servlet3.0+的

代码很简单,(注册DispatcherServlet,启动应用上下文)。。。。



(我估计是注册DispatcherServlet不成功,但是不知道为什么?)


目录如下:


然后贴代码:
SpitterWebInitializer.java (核心)

package spittr.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
* 扩展了AbstractAnnotationConfigDispatcherServletInitializer的类会自动配置DispatcherServlet和Spring应用上下文
* @author c00284934
*
*/
public class SpitterWebInitializer extends
AbstractAnnotationConfigDispatcherServletInitializer {

/**
* 返回带有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下文中的bean
* ContextLoaderListener加载的bean通常是驱动应用后端的中间层和数据层组件
*/
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{RootConfig.class};
}

/**
* 带有@Configuration注解的类会用来定义为DispatcherServlet应用上下文中的bean
*/
@Override
protected Class<?>[] getServletConfigClasses() {
/**
* 当DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件中所声明的bean
*/
return new Class<?>[]{WebConfig.class};//指定配置类
}

@Override
protected String[] getServletMappings() {
return new String[]{"/"};//将DispatcherServlet映射到“/”
}

}


WebConfig.java

package spittr.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc //启用SpringMVC
@ComponentScan("spittr.web") //启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter{

public ViewResolver viewResolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver(); //配置jsp视图解析器
resolver.setPrefix("/WEB-INF/views/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}

@Override
public void configureDefaultServletHandling(
DefaultServletHandlerConfigurer configurer) { //配置静态资源的处理
//我们要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,而不是使用DispatcherServlet本身来处理此类请求
configurer.enable();
}

}



RootConfig.java

package spittr.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;


@Configuration
@ComponentScan(basePackages={"spittr"},excludeFilters={@Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
public class RootConfig {

}


HomeController.java

package spittr.web;

import static org.springframework.web.bind.annotation.RequestMethod.*;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;

@Controller
@RequestMapping("/")
public class HomeController {

@RequestMapping(method = GET)
public String home(Model model) {
return "home";
}
}


home.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page session="false" %>
<html>
<head>
<title>Spitter</title>
<link rel="stylesheet"
type="text/css"
href="<c:url value="/resources/style.css" />" >
</head>
<body>
<h1>Welcome to Spitter</h1>

<a href="<c:url value="/spittles" />">Spittles</a> |
<a href="<c:url value="/spitter/register" />">Register</a>
</body>
</html>
...全文
1217 20 打赏 收藏 转发到动态 举报
写回复
用AI写文章
20 条回复
切换为时间正序
请发表友善的回复…
发表回复
_buonanotte 2019-05-25
  • 打赏
  • 举报
回复
https://blog.csdn.net/weixin_43690318/article/details/90214150这是我自己当时实现的,可以参考下
渔歌子Q 2018-11-03
  • 打赏
  • 举报
回复
我也遇到此坑, 书的确写的不对,有几个地方: 1、@ComponentScan("spittr.web") 不是spitter.web ,你上面的代码也对了 2、HomeController映射的地址是"/" 那么浏览器访问的就是localhost:8080即可, 不需要再加spittr 如果你输入localhost:8080还是404,并且你用的是IDEA,那么检查下Tomcat启动选项中有没有配置Deployment,如果没有配置也是404的。因为你的代码没有发布到tomcat。
qq_39704122 2018-03-19
  • 打赏
  • 举报
回复
一年前的贴0.0
Know_Infinity 2018-03-18
  • 打赏
  • 举报
回复
有答案吗?我也遇到了类似的问题,求问题出在哪里了。
kingbaron 2017-12-24
  • 打赏
  • 举报
回复
哈哈哈,楼主肯定是发布目录里面没有spring-framework的jar包。
hp961218 2017-12-21
  • 打赏
  • 举报
回复
这是springMVC写法????,换本书吧,这本书不适合你
xls丶 2017-12-21
  • 打赏
  • 举报
回复
我靠,有点古老的代码,别照书上敲,哪这么复杂
suzhouszc 2017-12-20
  • 打赏
  • 举报
回复
1.public ViewResolver viewResolver()这个方法应该有注解@Bean。 2.检查你的lib目录下是不是已经添加spring相关jar包。ps:不是添加在Libraries
顾小林 2017-03-20
  • 打赏
  • 举报
回复
直接用spring boot吧
RiseWind 2017-03-20
  • 打赏
  • 举报
回复
我也遇到同样的问题,楼主解决了吗??
黄复贵 2017-03-18
  • 打赏
  • 举报
回复
解决了吗?我也遇到这个问题啊。
装逼惯犯 2017-02-06
  • 打赏
  • 举报
回复
照着书上来 源代码跟书上好像是有点出入 我开始也有这样那样的问题 后来照着书上来就没问题.
西北灰狼 2017-02-04
  • 打赏
  • 举报
回复
是你配置文件的问题
DisLikeIt 2017-02-03
  • 打赏
  • 举报
回复
404是网址写的有问题
uhukhkjh 2017-01-20
  • 打赏
  • 举报
回复
RootConfig的basePackages={"spittr"}应该改成basePackages={"spittr.config"}
  • 打赏
  • 举报
回复
顶一下,大晚上的没人看
  • 打赏
  • 举报
回复
请忽略2楼,已经在一楼写好注解了
  • 打赏
  • 举报
回复
重新贴一遍代码,我有写注解: SpittrWebAppInitializer.java

package spittr.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

/**
 * 扩展了AbstractAnnotationConfigDispatcherServletInitializer的类会自动配置DispatcherServlet和Spring应用上下文
 * @author c00284934
 *
 */
public class SpittrWebAppInitializer extends
        AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 返回带有@Configuration注解的类将会用来配置ContextLoaderListener创建的应用上下文中的bean
     * ContextLoaderListener加载的bean通常是驱动应用后端的中间层和数据层组件
     */
    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[]{RootConfig.class};
    }

    /**
     * 带有@Configuration注解的类会用来定义为DispatcherServlet应用上下文中的bean
     */
    @Override
    protected Class<?>[] getServletConfigClasses() {
        /**
         * 当DispatcherServlet启动的时候,它会创建Spring应用上下文,并加载配置文件中所声明的bean
         */
        return new Class<?>[]{WebConfig.class};//指定配置类
    }

    @Override
    protected String[] getServletMappings() {
        return new String[]{"/"};//将DispatcherServlet映射到“/”
    }

}
WebConfig.java

package spittr.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc    //启用SpringMVC
@ComponentScan("spittr.web")   //启用组件扫描
public class WebConfig extends WebMvcConfigurerAdapter{

    public ViewResolver viewResolver(){
        InternalResourceViewResolver resolver = new InternalResourceViewResolver(); //配置jsp视图解析器
        resolver.setPrefix("/WEB-INF/view/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) { //配置静态资源的处理
        //我们要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,而不是使用DispatcherServlet本身来处理此类请求
        configurer.enable();
    }

}
RootConfig.java

package spittr.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;

@Configuration
@ComponentScan(basePackages={"spittr"},excludeFilters={@Filter(type=FilterType.ANNOTATION,value=EnableWebMvc.class)})
public class RootConfig {

}
HomeController.java

package spittr.web;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

@Controller
public class HomeController {
    @RequestMapping(value="/",method=RequestMethod.GET)
    public String home(){
        return "home";
    }
}

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧