美文网首页
SpringMVC系列(一)helloworld程序

SpringMVC系列(一)helloworld程序

作者: 探索的影子 | 来源:发表于2018-08-15 23:48 被阅读0次

emmmmm,讲道理,搭建springmvc的环境特别麻烦。特别是我看的视频用的是eclipse,我用的是idea的局面下。
这里贴上springmvc的学习视频。当然我学习的时候有自己的方法,我比较喜欢用自己曾经写过的系统,作为基础。然后,借新知识来重构自己的代码。虽然在才开始学的时候很难,因为代码不同,有的时候,设置出来的东西不一定对,所以还是需要掌握背后的原理才行。这样也能够更加容易理解。


环境搭建

我通过idea来创建maven工程,然后加入springmvc的相关包。相关创建方法:用idea创建springmvc项目

创建的包结果.png

对于教程里面创建环境需要注意的问题
1 有些创建出来的没有resource和java文件夹,当然普通的文件夹也是没有用的。
解决方法:创建普通的文件夹,然后右键


image.png

从上往下分别是:

  • 源码根目录
  • 测试代码根目录
  • 资源文件根目录

如果你不设置的话,你的classpath是会报错的,或者找不到文件。

创建springmvc配置文件

名字无所谓,但是需要在里面设置很多参数,在这里创建也是为了下一步设置前端控制器的初始化参数。
创建方法就是创建spring配置文件一致,配置如下:

<?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"
       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">
 

</beans>

设置dispatcherServlet(前端控制器)

配置如下:

<!DOCTYPE web-app PUBLIC
 "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
 "http://java.sun.com/dtd/web-app_2_3.dtd" >

<web-app>
  <display-name>Archetype Created Web Application</display-name>
  <!-- 配置前端控制器-->
  <servlet>
    <servlet-name>springmvc</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!-- contextConfigLocation配置springmvc加载的配置文件(配置处理器,映射器,适配器等等) -->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>classpath:springmvc.xml</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
      <servlet-name>springmvc</servlet-name>
      <!--
      1.*.action,只对动态资源进行拦截
      2./,对所有资源进行拦截,包括静态资源。我们需要自己排除。
      -->
      <url-pattern>*.action</url-pattern>
  </servlet-mapping>
</web-app>

注意点:
1 springmvc的配置路径一定要正确~~,不设置的话会有一个默认的配置文件。
2 设置拦截:有两种,根据自己的需求来选择。

创建处理器

这里有注解的和非注解的。

创建基于非注解的处理器映射器和适配器

处理器和处理器适配的创建

1)第一种方法
handler需要实现Controller接口,重写handleRequest方法,返回ModelandView。

public class FacultyController implements Controller {
    @Override
    public ModelAndView handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("/index.jsp");
        return modelAndView;
    }
}

对应的适配器配置

<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"/>

2)第二种方法
实现HttpRequestHandler接口,重写handleRequest方法
这种方法可以返回设置相应上下文,返回json,就用这种方法。


public class StudentController implements HttpRequestHandler {

    @Override
    public void handleRequest(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws ServletException, IOException {
        httpServletResponse.sendRedirect("/index.jsp");
    }
}

对应的适配器

 <bean class="org.springframework.web.servlet.mvc.HttpRequestHandlerAdapter"/>

注入


    <!--设置handler-->
    <bean id="facultyController" name="/faculty.action" class="com.pesystem.controller.FacultyController"/>
    <bean id="studentController" name="/Student.action" class="com.pesystem.controller.StudentController"/>
处理器映射器

实现
两种方法
1)第一种

    <!--处理器映射器,单个的配置-->
    <bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>

2)第二种

    <!--批量映射,可以给一个控制器设置多个url路径,多个映射器可以共存-->
    <bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
        <property name="mappings">
            <props>
                <prop key="/faculty.action">facultyController</prop>
                <prop key="/facultyP1.action">facultyController</prop>
                <prop key="/facultyP2.action">facultyController</prop>
            </props>
        </property>
    </bean>

创建基于注解的处理器映射器和适配器

<!--3.1之后适配器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"/>
    <!--3.1之后,映射器-->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
    

这样处理器适配器和映射器就设置好了,但是我们需要使用到Handler里面去

处理器需要@Controller修饰,方法用@RequestMapping,在@RequestMapping里面设置URL

package com.pesystem.controller;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;
@Controller
public class MajorController{
    @RequestMapping("/major.action")
    public ModelAndView getIndex(){
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.setViewName("index2");
        return modelAndView;
    }
}

组件扫描

如果不组件扫描的话,就需要一个一个注入,十分麻烦。
我们就需要启动组件扫描配置如下:

    <!--组件扫描-->
    <context:component-scan base-package="com.pesystem.controller"/>

注意@Controller的包

设置视图加载器

注意里面设置了前缀和后缀,如/index.jsp。那么我们设置viewName就只需要些index2.

    <!--视图解析器-->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

容易出现下面的错误:


image.png

如果适配器错误,会出现下面的错误;


image.png

在正式写项目核心之前我们需要大量的设置,真的挺烦的~~~~,那么有么有一款????

相关文章

网友评论

      本文标题:SpringMVC系列(一)helloworld程序

      本文链接:https://www.haomeiwen.com/subject/cdywbftx.html