IDEA构建Spring In Action/Spring 实战 第5章 web项目

刚开始用idea构建spring mvc项目,代码没问题都是跟着书敲,但是配置真的是一言难尽,网上有些教程,但idea的比较少,对我这种菜鸟不友好,在自己遇到很多坑后,终于解决了,记录下。。

首先电脑上要装有tomcat来发布web项目,版本在7以上,为了兼容servelet3.0

从新建项目开始:

自己选择项目路径,等待下载库

接着按照书上的代码将各个类建好,我的目录结构是这样的

之后,将项目添加到tomcat中

修改完后点击ok,tomcat配置完毕,哈哈

尝试运行下tomcat,结果报错。。

我们添加jar包来解决这个问题。

找到tomcat安装目录lib下的,点击添加。添加完成后再次运行tomcat这个问题应该解决了。但是错误并未都解决,我们打开tomcat localhost log控制台,应该会有下面的错误。

再次尝试启动后又出现下面的问题,心好累。。

查了半天才发现,按照书上的方法是通过java类的方式来指定servelet容器,映射规则等,打开web.xml,就会发现里面的三条配置项和java类,就是SpittrWebApplicationInitializer,里是一一对应的。两种配置产生了冲突,选择注释web.xml

再次运行程序发现打开的是index.jsp,但始终还是打开了,所有控制台的日志都没报错就好哈哈。

接下来就是修改映射的问题。我不知道为什么代码里已经有将"/"的get请求映射到home.jsp下,但是就是找不到资源,心好累,希望知道的大佬评论区指点下,是不是tomcat那里的路径有问题,搞了好久。。继续说我是怎么解决的,我修改了类的映射,原来书中是这样的:

如果报http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar错,就下载对应的jar包就好,参考这里

http://www.runoob.com/jsp/jsp-jstl.html,把那两个jar拷到tomcat下应该就可以了

这时候我们重新启动程序,并在地址栏中输入home

我还是把代码贴一下吧,可以对比下:

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 {
}
package spittr.config;

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

public class SpitterWebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {

    /**
     * 将一个或多个路径映射到DispatcherServlet上
     */
    @Override
    protected String[] getServletMappings() {
        return new String[] { "/" };
    }

    @Override
    protected Class<?>[] getRootConfigClasses() {
        return new Class<?>[] { RootConfig.class };
    }

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

}
package spittr.config;

import org.springframework.context.annotation.Bean;
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  //启用Spring Mvc
@ComponentScan("spittr.web")
public class WebConfig extends WebMvcConfigurerAdapter {

    /**
     * 配置视图解析器,名为home的视图将被解析为/WEB-INF/views/home.jsp
     * @return
     */
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver resolver = new InternalResourceViewResolver();
        resolver.setPrefix("/WEB-INF/views/");
        resolver.setSuffix(".jsp");
        resolver.setExposeContextBeansAsAttributes(true);
        return resolver;
    }

    /**
     * 配置静态资源的处理
     * 此配置要求DispatcherServlet将对静态资源的请求转发到Servlet容器中默认的Servlet上,
     * 而非使用DispatcherServlet本身来处理此类请求
     */
    @Override
    public void configureDefaultServletHandling(
            DefaultServletHandlerConfigurer configurer) {
        // TODO Auto-generated method stub
        //super.configureDefaultServletHandling(configurer);
        configurer.enable();
    }

}
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="/home", method=RequestMethod.GET) //处理对"/"的GET请求
    public String home() {
        System.out.println("处理get请求");
        return "home";
    }
}

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值