springMVC 入门配置(方便我以后快速复习)

版权声明:本文为博主原创文章,分享是一种美德,转载请注明出处 https://blog.csdn.net/qq_35794278/article/details/80739525

1.0 springMVC 的作用

springMVC 在我看来是用spring的有点来实现MVC架构 这样可以整合许多优秀的框架中的功能
例如本篇重点介绍的spring同mybatis 的整合

2.0 环境配置

  • 开发工具 eclipse
  • jar包 spring-web spring-webmvc spring-mybatis jackson

3.0 步骤

3.1 编写web.xml

a. 使拦截器执行springmvc的拦截器

<--
	默认的拦截器在web.xml 中 配置,下面是把这个拦截功能交给spring的代码
	spring 中如果你没有指定用哪个配置文件去作为spring拦截的配置文件 会自动寻找文件名为
	xxxx-servlet.xml 的配置文件
-->
 <servlet>
      <servlet-name>springweb</servlet-name>
      <servlet-class>
         org.springframework.web.servlet.DispatcherServlet
      </servlet-class>
      <--  下面的代码是指定默认的配置文件 否则会默认寻找名为xxxx-servlet.xml 的配置文件
      <init-param>
	      <param-name>contextConfigLocation</param-name>  
		<param-value>/WEB-INF/springweb.xml</param-value> 
       <init-param>
       -->
      <load-on-startup>1</load-on-startup>
   </servlet>

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

b. 在web.xml 中加载spring上下文 也就是指定spring配置文件的位置

<--
	下面代码中<listener> 就是初始化的作用
-->
	<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  
  <--
  初始化文件的位置 具体怎么加载的spring已经为我们写好了  我们所可以改的就是
    <param-value>classpath:Resource/SpringConf.xml</param-value>
    还句话说 配置此处的目的就是告诉spring要加载的配置文件的路径
-->

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:Resource/SpringConf.xml</param-value>
  </context-param>

c. 在web.xml 中编写字符过滤器防止乱码

 <!-- 自定义编码拦截器 也是spring为我们写好的 -->
   <filter>
        <filter-name>setcharacter</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>setcharacter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.2 接下来我们配置springMVC 的配置文件springweb.xml 也就是spring的层次的拦截

a. 首先我们要配置的是视图解析 也就是配置前缀 后缀

<--
例如我有一个a.jsp 文件 位于WEB-INF 目录下  那么这个WEB-INF 就是前缀
这个jsp  就是后缀   这样我们在servlet中只需要返回a  就可以定位到a.jsp 这个文件了
-->
 <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/" />
      <property name="suffix" value=".jsp" />
   </bean>

b. 接着我们配置json转换器 也就是前后端传数据所需要的格式,这里我们需要jackson 包

<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->  
    <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean>  

    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->  
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJackson2HttpMessageConverter" /><!-- json转换器 -->  
            </list>  
        </property>  
    </bean> 
    

c. 我们spring一般会采用注解的方式去拦截请求 这些注解写在我们的代码中 这时候需要在配置文件中
注册,采用注解的方式扫描

<context:component-scan base-package="com.ccut.*" />

d. 对于一些静态资源 例如css 图片等文件 我们不希望用spring的拦截 所以我们要在springweb.xml 说明

<mvc:default-servlet-handler/>
	<mvc:annotation-driven />

除了在springweb.xml 中 说明 我们还要在web.xml 中设置处理的方式 这里实际使用中我注视掉了 但是仍然可以访问,我也不知道为什么,可能是我记忆有偏差

<servlet-mapping>    
    <servlet-name>default</servlet-name>    
    <url-pattern>*.js</url-pattern>  
</servlet-mapping>

这句话的意思是 对于所有的后缀为js 的spring都不拦截

3.3 完整的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" version="2.5">
   <!-- 自定义编码拦截器 -->
   <filter>
        <filter-name>setcharacter</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>setcharacter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>
    
<servlet-mapping>    
    <servlet-name>default</servlet-name>    
    <url-pattern>*.js</url-pattern>  
</servlet-mapping>

  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:Resource/SpringConf.xml</param-value>
  </context-param>
  
  
    <servlet>
      	<servlet-name>springweb</servlet-name>
      	<servlet-class>
        		org.springframework.web.servlet.DispatcherServlet
      	</servlet-class>
	<init-param>  
		<param-name>contextConfigLocation</param-name>  
		<param-value>/WEB-INF/springweb.xml</param-value>  
	</init-param>  
      <load-on-startup>1</load-on-startup>
   </servlet>

   <servlet-mapping>
      <servlet-name>springweb</servlet-name>
      <url-pattern>/</url-pattern>
   </servlet-mapping>
</web-app>

3.4 完整的springweb.xml 中的内容

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
   xmlns:context="http://www.springframework.org/schema/context"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   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/mvc
   http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd">
   
	<mvc:default-servlet-handler/>
	<mvc:annotation-driven />
	
	
   <context:component-scan base-package="com.ccut.*" />
<!-- 避免IE执行AJAX时,返回JSON出现下载文件 -->  
    <bean id="mappingJackson2HttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">  
        <property name="supportedMediaTypes">  
            <list>  
                <value>text/html;charset=UTF-8</value>  
            </list>  
        </property>  
    </bean>  

    <!-- 启动Spring MVC的注解功能,完成请求和注解POJO的映射 -->  
    <bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">  
        <property name="messageConverters">  
            <list>  
                <ref bean="mappingJackson2HttpMessageConverter" /><!-- json转换器 -->  
            </list>  
        </property>  
    </bean> 
    
    
    
   <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
      <property name="prefix" value="/" />
      <property name="suffix" value=".jsp" />
   </bean>
   
    

</beans>

4.0 配置好上面的文件 我们就可以写servlet 了 首先我们写一个前台页面

a 页面 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>
<script type="text/javascript" src="./js/jquery.js"></script>
<script type="text/javascript" src="./js/t.js"></script>
<link rel="stylesheet" href="./css/a.css">
</head>
<body>
	欢迎!!!!!!!!!!<br/>
		
			姓名:<input  name="yourname" id = "name">
			
			<button id="sua">提交</button>
			<div id="divid">
				这里是div
			</div>
<!-- 		<form action="http://localhost:8080/spring_mybatis_mvc/t" method="get">
		name:<input type="text" name="yourname">
		<input type="submit" value="提交">
		</form> -->
		
</body>
        
</html>

b 执行请求的t.js

$(document).ready(function(){
	
	$("#sua").click(submit);
});

function submit() {
	var name = $("#name").val();
	
	$.ajax({
		url : "http://localhost:8080/spring_mybatis_mvc/t",
		type : "post",
		data : {
			"yourname":name
		},
		dataType:"json",
		success : function(flag){
			alert(flag)
		}
	});
}

css 文件 无关紧要 不贴了 就是测试一下静态拦截的问题

5.0 接下来是后台

mybatis-spring 是mybatis 与spring的完美整合 这里就直接顺路讲了

5.1 spring 配置文件

这个文件的主要作用就是整合spring与mybatis  同时 配置数据库数据源
这样我们就不需要写mybatis 的配置文件了  只需要写映射文件就ok了

a 文件springConfig.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:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xmlns:security="http://www.springframework.org/schema/security"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:cache="http://www.springframework.org/schema/cache"
	xsi:schemaLocation="  
        http://www.springframework.org/schema/aop   
        http://www.springframework.org/schema/aop/spring-aop-4.0.xsd  
        http://www.springframework.org/schema/security   
        http://www.springframework.org/schema/security/spring-security-3.2.xsd  
        http://www.springframework.org/schema/beans   
        http://www.springframework.org/schema/beans/spring-beans-4.0.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/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-3.1.xsd ;
        http://www.springframework.org/schema/cache ;
        http://www.springframework.org/schema/cache/spring-cache.xsd">
        <!-- 1.0自动扫描com.ccut下面的所有包  启用下面的标签就可以不用
        	<context:annotion-config/>
         -->
        <context:component-scan base-package="com.ccut.*"/>
        <!-- 2.0配置datasource数据源 -->
        <bean id = "DataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        	<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        	<property name="url" value="jdbc:mysql://localhost:3306/xyd"/>
        	<property name="username" value="root"/>
        	<property name="password" value="xuyandong"/>
        </bean>
        <!--3.0 用mybatis加载上述数据源,同时构建sqlsessionfatory 并且配置mybatis配置文件位置 -->
        <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        	<property name="dataSource" ref="DataSource"/>
        	<property name="mapperLocations">
        		<list>
        			<value>classpath:com/ccut/DAO/*.xml</value>
        		</list>
        	</property>
   	 
        </bean>
        
        <bean  class="org.mybatis.spring.mapper.MapperScannerConfigurer">
        	<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
        	<property name="basePackage" value="com.ccut.DAO"></property>
        </bean>
        
        
</beans>

b 然后我们建立数据库模型 也就是Model 层

package com.ccut.Model;
/*
 * 对应数据库中的表结构
 * */
public class T {
	private int id;
	private String name;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
	
}
前台参数的封装类 Name.java 

package com.ccut.Model;

public class Name {

private String yourname;

public String getYourname() {
	return yourname;
}

public void setYourname(String yourname) {
	this.yourname = yourname;
}

}

package com.ccut.Model;

public class Name {
	
	private String yourname;

	public String getYourname() {
		return yourname;
	}

	public void setYourname(String yourname) {
		this.yourname = yourname;
	}

	
	

}

c 接下来就是操作数据库的DAO 层 userMapper.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">

<mapper namespace="com.ccut.DAO.UserMapper">
    <!-- 按id查询 -->
    <select id="selectAll" resultType="com.ccut.Model.T">
        select * from t
    </select>

</mapper>

d 然后是这个映射文件对应的操作接口UserMapper.java

package com.ccut.DAO;

import com.ccut.Model.T;

public interface UserMapper {
	public T selectAll();
}

e 有了数据库的模型和操作 我们接下来写业务层services
业务层引用DAO 层 注意是引用不应该包含具体的对象,所以代码如下

接口SelectFromT.java(对没错 和UserMapper .java 一样)

package com.ccut.services;

import com.ccut.Model.T;

public interface SelectFromT {
	public T selectInformation();
}

f 上面接口的实现类SelectFromTimp.java(这里就是引用 引用DAO层的接口 注意DAO层的接口 不需要我们实现,你按照mybatis的标准写,mybatis 就已经帮你实现了)

package com.ccut.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.stereotype.Service;

import com.ccut.DAO.UserMapper;
import com.ccut.Model.T;

@Service
public class SelectFromTimp implements SelectFromT {
	@Autowired
	UserMapper mapper;
	@Override
	public T selectInformation() {
		return mapper.selectAll();
	}

}

g 后台逻辑写好了 我们下一步写啥呢?就是 Action 层 也就是servlet
SpringServlet.java 内容如下

package com.ccut.Action;

import java.io.IOException;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.HttpRequest;
import org.springframework.stereotype.Controller;
import org.springframework.ui.ModelMap;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody;

import com.ccut.Model.Name;
import com.ccut.services.SelectFromT;
import com.ccut.services.SelectFromTimp;

@Controller
@RequestMapping("/t")
public class SpringServlet {
	@Resource
	SelectFromT fromT;
	//这里的name 类是我封装好的javaBean类 为了匹配前台的参数 例如前台的参数名是username userpassword
	//那么username userpassword就是name类的属性  
	@RequestMapping(method=RequestMethod.POST)
	@ResponseBody
	public boolean servetGet(Name name,HttpServletRequest req,HttpServletResponse resp) {
		System.out.println("反正我执行了");
		String namString = fromT.selectInformation().getName();
		System.out.println(namString);
		if(namString.equals(name.getYourname()))
		{
			System.out.println("你猜");
			return true;
		}
		else {
			return false;
		}
		
	}
	@RequestMapping(method=RequestMethod.POST,value="/redirect")
	public String name() {
		return "hello";
		
	}
}

全部ok

项目结构如图:
这里写图片描述

6.0 好了我们全部写完了 开始运行我们用Tomcat7

前台页面
这里写图片描述

输入1 后 后台打印
这里写图片描述

前台返回
这里写图片描述

说明前后台 交互完成

展开阅读全文

没有更多推荐了,返回首页