目录结构:

contents structure [+]

SpringMVC是什么

MVC的全称是Model View Controller,通过实现MVC框架可以很好的数据、视图、业务逻辑进行分离。Spring MVC也是一种MVC框架,它是SpringFrameWork的后续产品,同样需要Spring的Jar包才能运行起来。

SpringMVC的设计原理

Spring MVC的设计是围绕着DispatcherServlet展开的,由DispatcherServlet将请求派发到特定的Controller。

下面是SpringMVC的一个简单流程图:

SpringMVC配置第一种方式

我的项目结构:

1,复制Jar包

将Spring的Jar包复制到lib目录下。

2,Web.xml文件

配置Web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <!--
this name matched project name
-->
<display-name>SpringMVC</display-name> <!--
transmit to dispacherServlet to deal with information that passed from table servlet-mapping
-->
<servlet>
<servlet-name>mySpring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>mySpring</servlet-name>
<url-pattern>*.ms</url-pattern>
</servlet-mapping> <!--
solve messy code
-->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>

3,mySpring-servlet.xml文件

在工程的WEB-INF下面创建dispatcherServlet配置文件[servlet-name]-servlet.xml。

文件名的格式必需为“[servlet-name]-servlet.xml”,比如笔者的web文件里servlet-name为mySpring,则文件名必须为mySpring-servlet.xml,如果放错的位置或是文件名称格式不对,那么通过web.xml文件是找不到dispatcherServlet文件的。也可以说,只要在Web.xml里配置好了DispatcherServlet,那么该DispatcherServlet的名称也就唯一确定了,一个web.xml文件可以映射出多个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:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xsi:schemaLocation="http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.3.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.3.xsd
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-4.3.xsd"> <!--
configure HandlerMapping
-->
<bean class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"></bean>
<!--
configure HandlerAdapter
-->
<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter"></bean> <!--
configure controller
-->
<bean name="/testSpring.ms" class="com.my.spring.TestSpring"></bean> <!--
configure viewResolver
-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.InternalResourceView</value>
</property>
<property name="prefix" value="/view/"></property>
<property name="suffix" value=".jsp"></property>
</bean>
</beans>

4,welcome.jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
<form action="testSpring.ms">
input your words:
<input type="text" name="words"/>
<input type="submit" value="提交">
</form>
</body>
</html>

5,result.jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
${myValue}
</body>
</html>

6,TestSpring.java文件

package com.my.spring;

import java.util.HashMap;
import java.util.Map; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController; public class TestSpring extends AbstractController { @Override
protected ModelAndView handleRequestInternal(HttpServletRequest request, HttpServletResponse response) throws Exception {
// TODO Auto-generated method stub
String value=request.getParameter("words"); //create model
Map<String,String>model=new HashMap<String,String>();
//set value
model.put("myValue", value); //create modelAndView
ModelAndView mav=new ModelAndView("result",model); return mav;
} }

这个文件必需要实现AbstrcactController抽象类,或是实现Controller接口。然后重写handlerRequestInternal方法。这里一定要选择servlet下的AbstractController或Controller,如果读者选择了portlet,恰好项目下又没有相应的包,那么就会报错。

错误

一,错误一:

错误代码:

The superclass "javax.servlet.http.HttpServlet" was not found on the Java Build Path

错误解决:

这是因为项目下没有该类,添加servlet-api.jar即可,详见Eclipse如何发布Web项目

二,错误二:

错误代码:

Server Tomcat v8.5 Server at localhost failed to start.

错误解决:

造成这个错误的原因有许多,这里建议读者检查一下自己的Web.xml文件中的语法是否正确。

三,错误三:

错误代码:

Multiple markers at this line
    - The type javax.portlet.ActionResponse cannot be resolved. It is indirectly
     referenced from required .class files
    - The type javax.portlet.RenderRequest cannot be resolved. It is indirectly
     referenced from required .class files
    - The type javax.portlet.RenderResponse cannot be resolved. It is indirectly
     referenced from required .class files
    - The type javax.portlet.ActionRequest cannot be resolved. It is indirectly
     referenced from required .class files
    - The type javax.portlet.PortletContext cannot be resolved. It is indirectly referenced
     from required .class files

问题解决:

这是因为读者的项目下面没有,portlet包导致的,portlet包的下载

除了引入相应的Portlet包外,这里读者也可以将

import org.springframework.web.portlet.ModelAndView;
import org.springframework.web.portlet.mvc.AbstractController;

改为:

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

四,错误四:

错误代码:

Handler processing failed; nested exception is java.lang.NoClassDefFoundError: javax/servlet/jsp/jstl/core/Config

错误解决:

导入一个jstl标签库即可,下载一个标签标准文档库下载页面

SpringMVC配置的第二种方式

这种方式和上面的方式都是非注解的方式,两者的区别就是使用的类不同。

下面的配置方式和上面的配置方式是想通的:

来一张目录结构:

applicationContext.xml文件

<?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"
xmlns:jdbc="http://www.springframework.org/schema/jdbc"
xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-4.1.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-4.1.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-4.1.xsd"> <bean id="helloController" class="cn.xdl.controller.HelloController"></bean> <bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<!--
key: 请求的url地址
value: 自己编写的控制器(Controller实现类)在容器中对象的id 起到的作用, 将一个url地址, 绑定一个控制器 ,当匹配这个url的请求发生时, 入口Servlet自动调用这个控制器对象, 并将请求对象与响应对象转递过来
-->
<prop key="/hello.do">helloController</prop>
</props>
</property> </bean> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<!--
解析modelAndView的工具 例如我们返回了一个ModelAndView ., 封装了一个视图name为: hello 解析完毕后: perfix+hello+suffix
转发至:/hello.jsp -->
<property name="prefix" value="/"></property>
<property name="suffix" value=".jsp"></property>
</bean> </beans>

applicationContext.xml

web.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" version="3.0">
<display-name>day04_WebMvc</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<!--
如果不需要使用 ini-param 对web配置文件指明SpringMVC的配置文件的地址,那么SpringMVC的配置文件必须放到WEB-INFO目录下,并且命名为[Servlet-name]-servlet.xml。
-->
<servlet>
<servlet-name>dispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>dispatcherServlet</servlet-name>
<url-pattern>*.do</url-pattern> </servlet-mapping> </web-app>

web.xml

HelloController.java文件

package cn.xdl.controller;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller; public class HelloController implements Controller {
@Override
public ModelAndView handleRequest(HttpServletRequest request, HttpServletResponse response) throws Exception {
System.out.println("控制器正在执行");
System.out.println("调用响应的Dao进行操作");
System.out.println("根据结果, 返回不同的视图封装");
//modelandView 最少要传递一个View
ModelAndView mav = new ModelAndView();
mav.setViewName("hello");
//mav.getModel().put(key, value)
return mav;
} }

HelloController

除了实现Controller接口,也可以继承AbstractController 类。

hello.jsp文件

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
哈哈哈哈哈哈哈哈哈
</body>
</html>

hello.jsp

当然关于上面这两种方式,不一定经常用,关于使用注解比较多。使用注解的配置可以参加“SpringMVC之基于注解的实现SpringMVC+MySQL”

参考文章

【Spring】SpringMVC非注解配置的两种方式的更多相关文章

  1. springmvc+druid+dataSource配置的两种方式

    一.一般的配置方式 数据库连接配置在jdbc.properties文件中,这种方式有一个最大的缺点,数据库的配置信息对开发人员是完全可见的,十分方便程序员删库跑路.spring配置具体如下: 1.jd ...

  2. Spring Boot 中实现定时任务的两种方式

    在 Spring + SpringMVC 环境中,一般来说,要实现定时任务,我们有两中方案,一种是使用 Spring 自带的定时任务处理器 @Scheduled 注解,另一种就是使用第三方框架 Qua ...

  3. Spring加载properties文件的两种方式

    在项目中如果有些参数经常需要修改,或者后期可能需要修改,那我们最好把这些参数放到properties文件中,源代码中读取properties里面的配置,这样后期只需要改动properties文件即可, ...

  4. Spring Boot定义系统启动任务的两种方式

    Spring Boot定义系统启动任务的两种方式 概述 如果涉及到系统任务,例如在项目启动阶段要做一些数据初始化操作,这些操作有一个共同的特点,只在项目启动时进行,以后都不再执行,这里,容易想到web ...

  5. Spring容器自动调用方法的两种方式

    先看一个Spring中Bean的实例化过程: 1.配置文件中指定Bean的init-method参数 <bean class="com.jts.service.UserService& ...

  6. java之spring mvc之Controller配置的几种方式

    这篇主要讲解 controller配置的几种方式. 1. URL对应 Bean 如果要使用此类配置方式,需要在XML中做如下样式配置 <!-- 配置handlerMapping --> & ...

  7. Spring MVC请求到处理方法注解配置的几种方式

    @RequestMapping 这个是最常用的注解,可以配置在类上,也可以配置在方法上,两个一起作用组成方法能够响应的请求路径,举例如下 package org.zln.myWeb.controlle ...

  8. Spring系列之AOP实现的两种方式

    AOP常用的实现方式有两种,一种是采用声明的方式来实现(基于XML),一种是采用注解的方式来实现(基于AspectJ). 首先复习下AOP中一些比较重要的概念: Joinpoint(连接点):程序执行 ...

  9. spring的面向切面实现的两种方式

    面向切面:主要应用在日志记录方面.实现业务与日志记录分离开发. spring面向切面有两种实现方式:1.注解 2.xml配置. 1.注解实现如下: (1)配置如下: <?xml version= ...

随机推荐

  1. vim的查找与替换

    http://harttle.land/2016/08/08/vim-search-in-file.html

  2. Python编译exe

    有几种办法,选择py2exe,从pip安装,还不行,下载看起来都比较老,还是在csdn上下载了一个64位版本for2.7的 http://download.csdn.net/download/henu ...

  3. JqueryValidate表单相同Name不校验问题解决

    在使用Jquery validate中遇到一个问题,当表单元素有name相同字段时,validate只校验表单元素name第一个值是否通过校验,比如 <input type="text ...

  4. [Algorithm] Print 2-D array in spiral order

    The idea to solve the problem is set five variable, first direction, we need to switch direction aft ...

  5. Visual Studio 开始支持编写 Android 程序并自带 Android 模拟器【转载】

    原文地址 本文内容 为什么需要一个 Android 模拟器 针对 Visual Studio Android 模拟器的调试 Visual Studio Android 模拟器的传感器模拟和其他功能 A ...

  6. IOCCC(The International Obfuscated C Code Contest)

    国际 C 语言混乱代码大赛(IOCCC, The International Obfuscated C Code Contest)是一项国际编程赛事,从 1984 年开始,每年举办一次(1997年.1 ...

  7. iOS开发 - Content hugging priority & Content compression resistance priority

    1. 什么是Content hugging priority 你可以把它想象成一根放在视图上的橡皮筋. 这根橡皮筋会组织视图超过它本身的固有大小(intrinsic content size). 它存 ...

  8. ASP.NET匿名对象与集合的使用

    一.关于匿名类型的特性 1.匿名类型 定义:匿名对象 var vobj = new { id = "编号", title = "标题", content = & ...

  9. zeroclipboard实现多浏览器复制到粘贴板功能

    zeroclipboard实现多浏览器复制到粘贴板功能(单个复制按钮和多个复制按钮) 为了更好的用户体验,现在很多网站中文本框的内容只需要点击复制按钮这样就能把内容复制到粘贴板了:出于兼容性的考虑,基 ...

  10. windows快捷键补充?

      win + + 放大镜 win + r osk 虚拟键盘 win + r psr 自带屏幕录制   文章来源:刘俊涛的博客 欢迎关注,有问题一起学习欢迎留言.评论