SpringMVC系列(1)之经典helloworld实现

最近在学习SpringMVC的相关内容,所以记录自己的学习过程,一切从简,先从helloworld做起

开发环境

  • 系统:window7
  • eclipse: Mars.2 Release (4.5.2)
  • Tocat7.0
  • jdk1.8
  • Spring4.3.4
  • SpringMVC4.3.4(注意:Spring3运行会出错,原因:jdk版本问题,可以改用jdk1.7)
  • 项目最终结构图:
    项目结构

创建项目,添加jar包

  • 创建dynamic web project
  • 添加spring所需jar包

日志:commons-logging-1.1.3.jar;
JSTL支持:jakarta-taglibs-standard-1.1.2中的jstl.jar和standard.jar;
spring-framework-4.3.4.RELEASE/libs中的jar包(我加了全部);

将jar全部添加到WebContent/WEB-INF/lib目录下

添加配置文件

  • /WEB-INF下添加web.xml(我这里是3.0版本),内容如下:
<?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_3_0.xsd" 
	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">
  <display-name>SpringMVC</display-name>
 <!-- 防止中文参数乱码 放在前面 -->  
      <filter>  
          <filter-name>SetCharacterEncoding</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>  
          <init-param>  
               <param-name>forceEncoding</param-name>  
               <param-value>true</param-value>  
               <!-- 强制进行转码 -->  
          </init-param>  
     </filter>  
     <filter-mapping>  
          <filter-name>SetCharacterEncoding</filter-name>  
          <url-pattern>/*</url-pattern>  
     </filter-mapping>      
    <servlet>
        <servlet-name>SpringMVCDispatcherServlet</servlet-name> 
        
        <!-- 入口是前端控制器 -->
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>classpath:/resources/springservlet-config.xml</param-value>
            <!-- 这里可以根据自己配置文件的位置修改 -->
        </init-param>
        <load-on-startup>1</load-on-startup><!-- load-on-startup必须放在最后,启动顺序,让这个Servlet随Servletp容器一起启动 -->
    </servlet>
    <!-- Spring MVC配置文件结束 -->
    
    <servlet-mapping>
        <servlet-name>SpringMVCDispatcherServlet</servlet-name>
        <url-pattern>/</url-pattern>
    </servlet-mapping>
</web-app>
  • 配置文件解释
    • 先是配置放置乱码的过滤器
    • 再配置DispatcherServlet,DispatcherServlet主要就是拦截请求,然后调用对应的Controller和Action,解析和渲染指定的视图并返回响应
    • classpath:springservlet-config.xml 指定具体的配置文件为springservlet-config.xml。
  • src目录下新建resources包,用于存放配置文件,添加springservlet-config.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.xsd
  http://www.springframework.org/schema/util
  http://www.springframework.org/schema/util/spring-util.xsd
  http://www.springframework.org/schema/context 
  http://www.springframework.org/schema/context/spring-context.xsd
  http://www.springframework.org/schema/mvc
  http://www.springframework.org/schema/mvc/spring-mvc.xsd" >
	
	<!-- 默认的注解映射的支持 -->  
    <mvc:annotation-driven/>
      
    <!-- 如果当前请求为“/”时,则转发到“/helloworld/index" -->
    <mvc:view-controller path="/" view-name="forward:/helloworld/index"/> 
    <!-- 静态资源映射 -->
    <mvc:resources mapping="/js/**" location="/WEB-INF/js/" />
    <mvc:resources mapping="/css/**" location="/WEB-INF/css/" />
    <mvc:resources mapping="/fonts/**" location="/WEB-INF/fonts/" />
    <mvc:resources mapping="/plugins/**" location="/WEB-INF/plugins/" />
    <mvc:resources mapping="images/**" location="/WEB-INF/images/" />
    <!-- 当上面要访问的静态资源不包括在上面的配置中时,则根据此配置来访问 -->
    <mvc:default-servlet-handler/>

	<!-- 开启controller注解支持 -->
    <!-- use-default-filters="false" 只扫描指定的注解 -->
    <context:component-scan base-package="com.controller" use-default-filters="false">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
	    <!-- <context:exclude-filter 表示不扫描的注解 -->
    </context:component-scan>
    
	
    <!-- 视图解析器 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
       <property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
       <property name="contentType" value="text/html"/>        
       <property name="prefix" value="/WEB-INF/views/"/>
       <property name="suffix" value=".jsp"/>
    </bean>
    
</beans>

如果想知道xmlns、xsi这些的作用,这里有
我们在web.xml文件里面配置的是拦截所有的请求到该servlet,所以我们在这里要对静态资源文件映射作一下配置,否则请求这些资源文件会返回404

创建helloworld的Controller

  • 在src下创建com.controller包,再新建HelloWorldController类,如下:
package com.controller;

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

@Controller
@RequestMapping(value = "/hello")
public class HelloWorldController {
	
	@RequestMapping(value="/index", method = {RequestMethod.GET})
    public ModelAndView index(){
		
		ModelAndView modelAndView = new ModelAndView();  
		modelAndView.addObject("hello", "Hello World!");  
		modelAndView.setViewName("index");  
        return modelAndView;
    }
}
  • 相应注解解释
    • @Controller指把当前class指定为controller
    • controller 上的@RequestMapping(value = “/hello”) 注解的 value值指定该controller所映射的请求
    • 方法上的@RequestMapping 注解指定该方法为一个action,value 值指定该action所映射的请求,method 中的RequestMethod.GET指定该action接受的是get请求。
    • modelAndView指定视图的名称,解析视图时会在springservlet-config.xml文件指定的视图文件夹中寻找对应的视图。

添加视图,即jsp文件,在WEN_INF下新建/views包,在views下新建index.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>
	${hello}
</body>
</html>

运行项目,由于配置了

 <!-- 如果当前请求为“/”时,则转发到“/helloworld/index" -->
    <mvc:view-controller path="/" view-name="forward:/helloworld/index"/> 

所以,可以访问了
这里写图片描述
到此,经典helloworld成功实现。项目下载https://github.com/kkxiaojun/SSH

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值