springMVC工作原理和创建简单实例

springMVC工作原理和创建简单实例

一:原理:

springMVC工作原理和创建简单实例

上面的是springMVC的工作原理图:

1、客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServlet的请求映射路径(在web.xml中指定),web容器将请求转交给DispatcherServlet.

2、DipatcherServlet接收到这个请求之后将根据请求的信息(包括URL、Http方法、请求报文头和请求参数Cookie等)以及HandlerMapping的配置找到处理请求的处理器(Handler)。

3-4、DispatcherServlet根据HandlerMapping找到对应的Handler,将处理权交给Handler(Handler将具体的处理进行封装),再由具体的HandlerAdapter对Handler进行具体的调用。

5、Handler对数据处理完成以后将返回一个ModelAndView()对象给DispatcherServlet。

6、Handler返回的ModelAndView()只是一个逻辑视图并不是一个正式的视图,DispatcherSevlet通过ViewResolver将逻辑视图转化为真正的视图View。

7、Dispatcher通过model解析出ModelAndView()中的参数进行解析最终展现出完整的view并返回给客户端。

二:创建工程

工具:eclipse

jdk:1.5以上

tomcat6

  1,打开eclipse,右键新建工程,如下图所示,:

springMVC工作原理和创建简单实例

出现:springMVC工作原理和创建简单实例

下一步—》finish.即可!

工程的机构大概如下:

springMVC工作原理和创建简单实例

2,我们都知道当http访问web工程服务时,会首先找到web.xml里面的内容。因此我们也应该首先填写web.xml中的配置。建好工程后会在WebContent/WEB-INF/目录下有web.xml文件。

springMVC工作原理和创建简单实例

<welocme-file>标签顾名思义就是欢迎页面。对应的页面有index.xml等6个页面。不过这6个页面工程没有给我们创建,因此需要我们手动创建。右击WebContent:

springMVC工作原理和创建简单实例

 填写文件名–》next—》finish。新建一个index.jsp页面。

内容:

<%@ page language="java" contentType="text/html; charset=utf8"
    pageEncoding="utf8"%>
<!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>
<span style="color:red">初步搭建成功!!!!!!!!!</span>
</body>
</html>

3,至此工程初步搭建成功,启动tomcat。在浏览器上输入:localhost:8080/springMVC2/

出现:springMVC工作原理和创建简单实例

4,集成springMVC

首先还是配置web.xml文件,

4.1配置监听器

 <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

<listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>

4.2配置过滤器,解决post乱码

<filter>
    <filter-name>encoding</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>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

4.3配置springmvc分发器,拦截所有请求

<servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
         <param-name>namespace</param-name>
         <param-value>dispatcher-servlet</param-value>
     </init-param>
</servlet>

<servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>

4.4最后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" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>springMVC</display-name>
  <welcome-file-list>
    <welcome-file>/WEB-INF/index.jsp</welcome-file>
  </welcome-file-list>
  
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>

<listener>
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<filter>
    <filter-name>encoding</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>encoding</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

<servlet>
     <servlet-name>springmvc</servlet-name>
     <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
     <init-param>
         <param-name>namespace</param-name>
         <param-value>dispatcher-servlet</param-value>
     </init-param>
</servlet>

<servlet-mapping>
     <servlet-name>springmvc</servlet-name>
     <url-pattern>/</url-pattern>
 </servlet-mapping>

</web-app>

说明:这里我们规定dispatcherServlet分发器关联的xml文件名是dispatcher-servlet。因此我们要在和web.xml文件同级别目录下创建一个dispatcher-servlet.xml文件。

5:springMVC工作原理和创建简单实例

dispather-servlet,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:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:util="http://www.springframework.org/schema/util" 
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xsi:schemaLocation="http://www.springframework.org/schema/beans
       http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
       http://www.springframework.org/schema/context 
       http://www.springframework.org/schema/context/spring-context-3.0.xsd
       http://www.springframework.org/schema/util 
       http://www.springframework.org/schema/util/spring-util-3.0.xsd 
       http://www.springframework.org/schema/mvc 
       http://www.springframework.org/schema/mvc/spring-mvc.xsd
      ">

         <!-- 开启注解模式驱动 -->    
         <mvc:annotation-driven></mvc:annotation-driven>
         <!-- 扫包 -->
         <context:component-scan base-package="com.springmvc.*"></context:component-scan>
         <!-- 静态资源过滤 -->
         <mvc:resources location="/resources/" mapping="/resources/**"/>


         <!-- 视图渲染 jsp/freemaker/velocity-->
         <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
               <!-- 制定页面存放的路径 -->
               <property name="prefix" value="/WEB-INF/pages/"></property>
               <!-- 文件的后缀 -->
               <property name="suffix" value=".jsp"></property>
         </bean> 

</beans>

说明:当前端http请求经web.xml进入到dispathcer-servlet.xml后,开始读取此文件的配置,由上而下:

(1)扫描com.springmvc下面所有包的注解,如:@controller ,@Service ,@Autowired。会将这些注解携带的信息放到spring的bean工厂中。

(2)加载静态资源,比如,图片,css样式 ,js

(3)所有的视图界面,如以.jsp  .html  比如刚才我们建的index.jsp文件。这里统一放在了/WEB-INF/pages/目录下   (下面建pages文件夹)

到此,也需要我们自己创建这些包和文件夹,com.springmvc下的包有controller,dao,service,三个包。

建好后的样子如下:

springMVC工作原理和创建简单实例

6,springmvc的bean工程配置:

右键WEB-INF创建applicationContext.xml文件:

springMVC工作原理和创建简单实例

文件内容如下:

<?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:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util" xmlns:p="http://www.springframework.org/schema/p"
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
  http://www.springframework.org/schema/beans/spring-beans.xsd  
  http://www.springframework.org/schema/aop   
  http://www.springframework.org/schema/aop/spring-aop-4.0.xsd
  http://www.springframework.org/schema/tx   
  http://www.springframework.org/schema/tx/spring-tx-4.0.xsd
  http://www.springframework.org/schema/context   
  http://www.springframework.org/schema/context/spring-context-4.0.xsd
  http://www.springframework.org/schema/util   
  http://www.springframework.org/schema/util/spring-util-4.0.xsd
  ">

</beans>

7,下面就要导入jar包了。jar包

jar包小包会房子百度网盘或后面会将工程上传到网上,jar结构大概如下。放在WEB-INF/lib文件夹下:

springMVC工作原理和创建简单实例

jar包复制到lib下后,再选中所有jar包,build path一下。

8,在com.springmvc.controller包下建个ViewController类springMVC工作原理和创建简单实例

内容如下:

package com.springmvc.controller;

import javax.servlet.http.HttpServletRequest;

import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

@Controller
public class ViewController {

    @RequestMapping("/view")
    public ModelAndView view(HttpServletRequest request){
        ModelAndView mav = new ModelAndView();       
        String contextPath=request.getContextPath();
        mav.addObject("context",contextPath);
        mav.setViewName("index");
        return mav;
    }
}

说明:request.getContextPath()是获取工程根目录,通过modelAndView将根目录传到”index”页面(可以自己定义页面,在WEB-INF/pages/目录下)。

9,index.jsp页面

<%@ page language="java" contentType="text/html; 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>

<a href="http://blog.csdn.net/csdnliuxin123524"><span style="color:red">小编空间url</span></a>
<br/>
<!-- 第一种显示图片的方式,直接获取工程根目录 -->
<img alt="小编" src="<%=request.getContextPath() %>/resources/img/csdn2.png">
<!-- 第二种显示图片的方式:从control层传来的工程根目录,加上图片的目录也可以显示 -->
<img alt="小编" src="${context}/resources/img/csdn2.png">
</body>
</html>

${context}就是从后台传来的数据。

10,至此所有准备都做好了,下面可以启动tomcat了

浏览器网址输入:http://localhost:8080/springMVC2/view/

会显示以下页面:

springMVC工作原理和创建简单实例

到此,springMVC页面部署完成。

工程下载地址(包含jar包):百度网盘地址:链接:https://pan.baidu.com/s/1gfOV7Jd 密码:40v4

   csdn下载地址:http://download.csdn.net/download/csdnliuxin123524/10001431

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/106302.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • CriticalSection_alternative question是什么意思

    CriticalSection_alternative question是什么意思线程锁,即在多线程中可以控制线程的执行顺序,防止使用中全局变量在两个线程中同时使用,变量发生改变的错误。示例:https://blog.csdn.net/ninedays/article/details/5381123线程锁的概念函数EnterCriticalSection和LeaveCriticalSection的用法注:使用结构CRITICAL_SECTION需加入头文件#in…

    2022年9月20日
    3
  • TLSF算法分析「建议收藏」

    TLSF算法分析「建议收藏」注:本文的大部分内容摘录自论文《TLSF:aNewDynamicMemoryAllocatorforReal-TimeSystems》,可以通过“科学上网”访问如下链接阅读原文:http://www.gii.upv.es/tlsf/files/ecrts04_tlsf.pdf。什么是TLSFTLSF是TwoLevelSegregatedFitmemoryal

    2022年6月30日
    54
  • 集群分为几种,用的软件分别是什么?[通俗易懂]

    集群分为几种,用的软件分别是什么?[通俗易懂]集群分为几种,用的软件分别是什么?补充:涉及的组件1.1、apache跨平台的网页服务器,主要使用它做静态资源服务器,也可以做代理服务器转发请求1.2、ngnix高性能的HTTP和反向代理服务器,ngnix处理能力相当于apache的10倍。1.3、lvsLinux虚拟服务器,可以实现LINUX平台下的简单负载均衡1.4、HAProxy提供高可用性、负载均衡以及基于TCP和HT…

    2022年10月10日
    2
  • Java Double转Bigdecimal丢失精度原因学习

    Java Double转Bigdecimal丢失精度原因学习记录学习Double转Bigdecimal丢失精度的原因注意事项:不能直接使用Bigdecimal的构造函数传double进行转换,部分数值会丢失精度,因为计算机是二进制的Double无法精确的储存一些小数位,0.1的double数据存储的值实际上并不真的等于0.1如该方式将0.1转换为Bigdecimal得到的结果是0.1000000000000000055511151231257827021181583404541015625这是为什么呢,以往只是知道结论知道不能这么用,也大概知道是因为do

    2022年6月4日
    34
  • 2021年最好用&完全免费的图片压缩网站、软件推荐(包括GIF)

    2021年最好用&完全免费的图片压缩网站、软件推荐(包括GIF)最近我有遇到一个很奇怪的问题因为我不是转用AppleMusic本地化听歌了????所以很多歌的歌曲信息都是我自己补充的,当然也包括封面但我在用iTunes把歌传到iPhone上来听的时候,有首歌的封面怎么都同步不过来我来回同步了几遍,还重新连接了几次,甚至换回了有线来同步,这个封面始终都还是同步不上…我就一直奇了怪了直到我想重新编辑一下封面,重新添加,我才发现…好家伙,一张封面竟然有18M!?比我MP3本身都要大了,难怪我添加不上呢完全被它小小的外表给欺骗了我后来把图片

    2022年6月18日
    25
  • resnet网络结构示意图_resnet50网络结构详解

    resnet网络结构示意图_resnet50网络结构详解代码importtorchfromtorchimportnnimporttorchvisiondevice=torch.device(“cuda”iftorch.cuda.is_available()else”cpu”)resnet=torchvision.models.resnet101(pretrained=True)#pretrainedImageNetResNet-101print(resnet)输出:ResNet((conv1):Con

    2022年10月7日
    3

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号