emmmmm,讲道理,搭建springmvc的环境特别麻烦。特别是我看的视频用的是eclipse,我用的是idea的局面下。
这里贴上springmvc的学习视频。当然我学习的时候有自己的方法,我比较喜欢用自己曾经写过的系统,作为基础。然后,借新知识来重构自己的代码。虽然在才开始学的时候很难,因为代码不同,有的时候,设置出来的东西不一定对,所以还是需要掌握背后的原理才行。这样也能够更加容易理解。
环境搭建
我通过idea来创建maven工程,然后加入springmvc的相关包。相关创建方法:用idea创建springmvc项目。
对于教程里面创建环境需要注意的问题
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
在正式写项目核心之前我们需要大量的设置,真的挺烦的~~~~,那么有么有一款????
网友评论