Springmvc入门

博客目标

  • 1、Springmvc简介及配置
    • 什么是Springmvc?
    • Springmvc运作原理
    • 原理图
  • 2.Springmvc之helloword实现
    • 导入pom依赖
    • SSM整合的pom
    • 写配置文件
    • 修改配置文件web.xml
    • 测试是否搭建成功
      • 效果图
  • 3、SpringmvcCRUD
    • 提供工具类
      • PageTag.java
      • h.tld WEB-INF下
      • bookList.jsp
      • bookEdit.jsp
    • BookService.java
    • BookServiceImpl.java
    • BookController.java
  • 4.springmvc结果集处理
    • Springmvc-servlet.xml
    • 结果集处理的五种情况
    • Resultset.jsp web-inf下
    • b.jsp webapp下
  • 5、Springmvc静态资源处理
    • Springmvc-servlet.xml

1、Springmvc简介及配置

什么是Springmvc?

Spring Web MVC是一种基于Java的实现了MVC设计模式的、请求驱动类型的、轻量级Web框架。

Springmvc运作原理

1.浏览器请求:http://localhost:8080/say1
request对象去处理这个url,可以获取到除去ip+port+项目这一个固定的串,拿到/say1
2.在dispatcherservlet去寻找HandlerMapping
HandlerMapping:在整个spring上下文中寻找到了所有的被@requertMapping注解所标记的方法
如果@requertMapping这个注解里面的值有/say1,那么进行下一步
3.从前面以及能够获取到需要被调用的方法,那么dispatcherservlet就会寻找到handlerAdapt适配器来动态调用这个方法,然后会出一个结果
4.dispatcherservlet将结果封装成一个modelAndView对象,将其放回给ViewReslover进行解析
5.ViewReslover解析完毕后,会将对应的视图展示给用户	

原理图

Springmvc入门_第1张图片

2.Springmvc之helloword实现

导入pom依赖

 <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
 </dependency>

取代了之前的spring-context 依赖,spring-context的jar包是包含在了spring-webmvc中,所以只需要导入spring-webmvc既是导入了spring-context的jar包

  <!--自定义标签库-->
    <jstl.version>1.2</jstl.version>
    <standard.version>1.1.2</standard.version>
    <tomcat-jsp-api.version>8.0.47</tomcat-jsp-api.version>

  <!--自定义标签库-->
    <!-- 5.3、jstl、standard -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>${standard.version}</version>
    </dependency>
    <!-- 5.4、tomcat-jsp-api -->
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-jsp-api</artifactId>
      <version>${tomcat-jsp-api.version}        </version>
    </dependency>

SSM整合的pom

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>com.zking</groupId>
  <artifactId>ssm</artifactId>
  <version>1.0-SNAPSHOT</version>
  <packaging>war</packaging>

  <name>ssm Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
    <maven.compiler.plugin.version>3.7.0</maven.compiler.plugin.version>

    <!--添加jar包依赖-->
    <!--1.spring 5.0.2.RELEASE相关-->
    <spring.version>5.0.2.RELEASE</spring.version>
    <!--2.mybatis相关-->
    <mybatis.version>3.4.5</mybatis.version>
    <!--mysql-->
    <mysql.version>5.1.44</mysql.version>
    <!--pagehelper分页jar依赖-->
    <pagehelper.version>5.1.2</pagehelper.version>
    <!--mybatis与spring集成jar依赖-->
    <mybatis.spring.version>1.3.1</mybatis.spring.version>
    <!--3.dbcp2连接池相关 druid-->
    <commons.dbcp2.version>2.1.1</commons.dbcp2.version>
    <commons.pool2.version>2.4.3</commons.pool2.version>
    <!-- log4j2日志配置相关依赖 -->
    <log4j2.version>2.9.1</log4j2.version>
    <log4j2.disruptor.version>3.2.0</log4j2.disruptor.version>
    <slf4j.version>1.7.13</slf4j.version>
    <!--5.其他-->
    <junit.version>4.12</junit.version>
    <servlet.version>4.0.0</servlet.version>
    <lombok.version>1.18.2</lombok.version>
    <!-- redis与spring的整合依赖 -->
    <redis.version>2.9.0</redis.version>
    <redis.spring.version>1.7.1.RELEASE</redis.spring.version>
    <!-- jackson -->
    <jackson.version>2.9.3</jackson.version>
    <!--自定义标签库-->
    <jstl.version>1.2</jstl.version>
    <standard.version>1.1.2</standard.version>
    <tomcat-jsp-api.version>8.0.47</tomcat-jsp-api.version>
  </properties>

  <dependencies>
    <!--1.spring相关-->
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-orm</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-tx</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-aspects</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--2.mybatis相关-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis</artifactId>
      <version>${mybatis.version}</version>
    </dependency>
    <!--mysql-->
    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>${mysql.version}</version>
    </dependency>
    <!--pagehelper分页插件jar包依赖-->
    <dependency>
      <groupId>com.github.pagehelper</groupId>
      <artifactId>pagehelper</artifactId>
      <version>${pagehelper.version}</version>
    </dependency>
    <!--mybatis与spring集成jar包依赖-->
    <dependency>
      <groupId>org.mybatis</groupId>
      <artifactId>mybatis-spring</artifactId>
      <version>${mybatis.spring.version}</version>
    </dependency>
      <!--3.dbcp2连接池相关-->
      <dependency>
          <groupId>org.apache.commons</groupId>
          <artifactId>commons-dbcp2</artifactId>
          <version>${commons.dbcp2.version}</version>
      </dependency>
    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-pool2</artifactId>
      <version>${commons.pool2.version}</version>
    </dependency>
    <!-- log4j2日志相关依赖 -->
    <!-- log配置:Log4j2 + Slf4j -->
    <!-- slf4j核心包-->
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-api</artifactId>
      <version>${slf4j.version}</version>
    </dependency>
    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>jcl-over-slf4j</artifactId>
      <version>${slf4j.version}</version>
      <scope>runtime</scope>
    </dependency>
    <!--核心log4j2jar包-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-api</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-core</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <!--用于与slf4j保持桥接-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-slf4j-impl</artifactId>
      <version>${log4j2.version}</version>
    </dependency>
    <!--web工程需要包含log4j-web,非web工程不需要-->
    <dependency>
      <groupId>org.apache.logging.log4j</groupId>
      <artifactId>log4j-web</artifactId>
      <version>${log4j2.version}</version>
      <scope>runtime</scope>
    </dependency>
    <!--需要使用log4j2的AsyncLogger需要包含disruptor-->
    <dependency>
      <groupId>com.lmax</groupId>
      <artifactId>disruptor</artifactId>
      <version>${log4j2.disruptor.version}</version>
    </dependency>
    <!--5.其他-->
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>${junit.version}</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>${servlet.version}</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <version>${lombok.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-context-support</artifactId>
      <version>${spring.version}</version>
    </dependency>
    <!--mybatis与ehcache整合-->
    <dependency>
      <groupId>org.mybatis.caches</groupId>
      <artifactId>mybatis-ehcache</artifactId>
      <version>1.1.0</version>
    </dependency>
    <!--ehcache依赖-->
    <dependency>
      <groupId>net.sf.ehcache</groupId>
      <artifactId>ehcache</artifactId>
      <version>2.10.0</version>
    </dependency>
   <!--redis-->
    <dependency>
      <groupId>redis.clients</groupId>
      <artifactId>jedis</artifactId>
      <version>${redis.version}</version>
    </dependency>
    <dependency>
      <groupId>org.springframework.data</groupId>
      <artifactId>spring-data-redis</artifactId>
      <version>${redis.spring.version}</version>
    </dependency>
    <!-- jackson -->
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-core</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-annotations</artifactId>
      <version>${jackson.version}</version>
    </dependency>
    <!--自定义标签库-->
    <!-- 5.3、jstl、standard -->
    <dependency>
      <groupId>jstl</groupId>
      <artifactId>jstl</artifactId>
      <version>${jstl.version}</version>
    </dependency>
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>${standard.version}</version>
    </dependency>
    <!-- 5.4、tomcat-jsp-api -->
    <dependency>
      <groupId>org.apache.tomcat</groupId>
      <artifactId>tomcat-jsp-api</artifactId>
      <version>${tomcat-jsp-api.version}</version>
    </dependency>
  </dependencies>

  <build>
    <finalName>ssm</finalName>
    <resources>
      <!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
      <resource>
        <directory>src/main/java</directory>
        <includes>
          <include>**/*.xml
        
      
      
      
        src/main/resources
        
          jdbc.properties
          *.xml
        
      
    
    
      
        
          maven-clean-plugin
          3.1.0
        
        
        
          maven-resources-plugin
          3.0.2
        
        
          maven-compiler-plugin
          3.8.0
        
        
          maven-surefire-plugin
          2.22.1
        
        
          maven-war-plugin
          3.2.2
        
        
          maven-install-plugin
          2.5.2
        
        
          maven-deploy-plugin
          2.8.2
        
        
          org.apache.maven.plugins
          maven-compiler-plugin
          ${maven.compiler.plugin.version}
          
            ${maven.compiler.source}
            ${maven.compiler.target}
            ${project.build.sourceEncoding}
          
        
        
          org.mybatis.generator
          mybatis-generator-maven-plugin
          1.3.2
          
            
            
              mysql
              mysql-connector-java
              ${mysql.version}
            
          
          
            true
          
        
      
    
  

写配置文件

在WEB-INF下添加springmvc-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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
       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-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 通过context:component-scan元素扫描指定包下的控制器-->
    <!--1) 扫描com.onlyK.zf及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <aop:aspectj-autoproxy/>
    <context:component-scan base-package="com.onlyK.ssm"/>

    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <!--两个bean,这两个bean是spring MVC为@Controllers分发请求所必须的。并提供了数据绑定支持,-->
    <!--@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--3) ViewResolver视图解析器,不用写映射文件了 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--4) 单独处理图片、样式、js等资源 -->
    <!--<mvc:resources location="/css/" mapping="/css/**"/>-->
   <!-- <mvc:resources location="/images/" mapping="/images/**"/>-->
    <!--<mvc:resources location="/js/" mapping="/js/**"/>-->
</beans>

修改配置文件web.xml

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
         version="3.1">
  <display-name>Archetype Created Web Application</display-name>
  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:applicationContext.xml</param-value>
  </context-param>
  <!-- 读取Spring上下文的监听器 -->
  <listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
  </listener>

  <!-- Spring MVC servlet -->
  <servlet>
    <servlet-name>SpringMVC</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <!--此参数可以不配置,默认值为:/WEB-INF/springmvc-servlet.xml-->
    <init-param>
      <param-name>contextConfigLocation</param-name>
      <param-value>/WEB-INF/springmvc-servlet.xml</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
    <!--web.xml 3.0的新特性,是否支持异步-->
    <async-supported>true</async-supported>
  </servlet>
  <servlet-mapping>
    <servlet-name>SpringMVC</servlet-name>
    <url-pattern>/</url-pattern>
  </servlet-mapping>
  <!-- 3、添加过滤器 解决中文乱码问题 -->
  <filter>
    <filter-name>encodingFilter</filter-name>
    <filter-class>
      org.springframework.web.filter.CharacterEncodingFilter
    </filter-class>
    <async-supported>true</async-supported>
    <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>/*
  



到这里SSM整合完毕

测试是否搭建成功

写controller层 HelloController

package com.onlyK.ssm.controller;

import org.springframework.stereotype.Controller;
import org.springframework.stereotype.Service;
import org.springframework.web.bind.annotation.RequestMapping;

/**
 * @author only老K
 * @create  2019-11-24 15:22
 */
@Controller  //给spring进行管理
public class HelloController {
    @RequestMapping("say1")
    public String say1(){
        return "hello";
    }
}

在webapp下写一个hello.jsp页面

<%--
  Created by IntelliJ IDEA.
  User: 86135
  Date: 2019/11/24
  Time: 15:24
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
onlyK
</body>
</html>

运行tomcat测试即可

效果图

Springmvc入门_第2张图片

3、SpringmvcCRUD

提供工具类

PageTag.java

package com.onlyK.ssm.tag;

import com.onlyK.ssm.utils.PageBean;

import javax.servlet.jsp.JspException;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyTagSupport;
import java.io.IOException;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;


public class PageTag extends BodyTagSupport {

    private static final long serialVersionUID = 383258790166308355L;

    private PageBean pageBean;

    public int doStartTag() throws JspException {
        JspWriter out = pageContext.getOut();
        try {
            out.print(toHTML());
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SKIP_BODY;
    }

    private String toHTML() {
        StringBuilder sb = new StringBuilder();
//     拼接下一次分页请求搜提交的分页表单
        sb.append("
"); sb.append(" "); Map<String, String[]> paMap = pageBean.getPaMap(); if(paMap != null && paMap.size()>0) { Set<Entry<String, String[]>> entrySet = paMap.entrySet(); for (Entry<String, String[]> entry : entrySet) { for(String value :entry.getValue() ) { if(!"page".equals(entry.getKey())) { sb.append(""); } } } } sb.append(""
); // 拼接分页条 sb.append("
"); sb.append(" 每页"+pageBean.getRows()+"条,共"+pageBean.getTotal()+"条,第"+pageBean.getPage()+"页,共"+pageBean.getMaxPage()+"页  "); sb.append(" 首页  "); sb.append(" 上一页  "); sb.append(" 下一页  "); sb.append(" 尾页  "); sb.append("   "); sb.append(" Go"); sb.append("
"
); // 拼接分页的javascript 代码 sb.append(" "); return sb.toString(); } public PageBean getPageBean() { return pageBean; } public void setPageBean(PageBean pageBean) { this.pageBean = pageBean; } }

h.tld WEB-INF下

<?xml version="1.0" encoding="UTF-8" ?>
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
	version="2.0">
	<description>hyf 1.1 core library</description>
	<display-name>hyf core</display-name>
	<tlib-version>1.1</tlib-version>
	<short-name>c</short-name>
	<uri>/hyf</uri>


	<tag>
		<!--填写的是标签库中的标签名-->
		<name>page</name>
		<!--标签对应后台助手类-->
		<tag-class>com.onlyK.ssm.tag.PageTag</tag-class>
		<!--标签类别-->
		<body-content>JSP</body-content>
		<attribute>
			<!--自定义标签中属性-->
			<name>pageBean</name>
			<!--属性值是否必填-->
			<required>true</required>
			<!--是否支持表达式EL表达式/ognl表达式-->
			<rtexprvalue>true</rtexprvalue>
		</attribute>
	</tag>
</taglib>

bookList.jsp

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="/hyf"  prefix="h"%>
<!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>书籍</title>
</head>
<body>
<h2>书籍</h2>
	<br>
	<form action="${pageContext.request.contextPath}/book/list" method="post">
		<!--用户设置查询 一页20条记录  -->
	 <!-- 	<input type="hidden" name="rows" value="20"/> -->
		<!--用户设置不分页  -->
	 	<!-- <input type="hidden" name="pagination" value="false"/> -->
		书名:<input type="text" name="bname"> <input type="submit"
			value="确定">
	</form>
	<a href="${pageContext.request.contextPath}/book/preSave">增加</a>
	<table border="1" width="100%">
		<tr>
			<td>编号</td>
			<td>名称</td>
			<td>价格</td>
			<td>操作</td>
		</tr>
		 <c:forEach items="${bookList}" var="b">
			 <tr>
				<td>${b.bid }</td>
				<td>${b.bname }</td>
				<td>${b.price }</td>
				<td>
						<a href="${pageContext.request.contextPath}/book/preSave?bid=${b.bid}">修改</a>
				        <a href="${pageContext.request.contextPath}/book/del/${b.bid}">删除</a>
				</td>
			</tr> 
		</c:forEach> 
	</table>
 	<h:page pageBean="${pagebean}"></h:page> 
</body>
</html>

bookEdit.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>编辑页面</title>
</head>
<body>
<form action="${pageContext.request.contextPath}${b.bname == null ?'/book/add' : '/book/edit'}" method="post">
 bid:  <input type="text" value="${b.bid}" name="bid"/><br>
 bname:<input type="text" value="${b.bname}" name="bname"/><br>
 price:<input type="text" value="${b.price}" name="price"/><br>
 <button type="submit">确认</button>
</form>
</body>
</html>

BookService.java

package com.onlyK.ssm.service;

import com.onlyK.ssm.model.Book;
import com.onlyK.ssm.utils.PageBean;

import java.util.List;
import java.util.Map;

/**
 * @author only老K
 * @create  2019-11-24 8:24
 */
public interface BookService {
    int deleteByPrimaryKey(Integer bid);

    int insert(Book record);

    int insertSelective(Book record);

    Book selectByPrimaryKey(Integer bid);

    int updateByPrimaryKeySelective(Book record);

    int updateByPrimaryKey(Book record);

    List<Map> listPager(Map map, PageBean pageBean);

    List<Map> listPager(Book book, PageBean pageBean);
}

BookServiceImpl.java

package com.onlyK.ssm.service.impl;

import com.onlyK.ssm.mapper.BookMapper;
import com.onlyK.ssm.model.Book;
import com.onlyK.ssm.service.BookService;
import com.onlyK.ssm.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author only老K
 * @create  2019-11-24 8:27
 */
@Service
public class BookServiceImpl implements BookService {
    @Autowired
    private BookMapper bookMapper;
    @Override
    public int deleteByPrimaryKey(Integer bid) {
        return bookMapper.deleteByPrimaryKey(bid);
    }

    @Override
    public int insert(Book record) {
        return bookMapper.insert(record);
    }

    @Override
    public int insertSelective(Book record) {
        return bookMapper.insertSelective(record);
    }

    @Override
    public Book selectByPrimaryKey(Integer bid) {
        return bookMapper.selectByPrimaryKey(bid);
    }

    @Override
    public int updateByPrimaryKeySelective(Book record) {
        return bookMapper.updateByPrimaryKeySelective(record);
    }

    @Override
    public int updateByPrimaryKey(Book record) {
        return bookMapper.updateByPrimaryKey(record);
    }

    @Override
    public List<Map> listPager(Map map, PageBean pageBean) {

        return bookMapper.listPager(map);
    }

    @Override
    public List<Map> listPager(Book book, PageBean pageBean) {
        Map map=new HashMap();
        map.put("bname",book.getBname());
        return bookMapper.listPager(map);
    }
}

BookController.java

package com.onlyK.ssm.controller;

import com.onlyK.ssm.model.Book;
import com.onlyK.ssm.service.BookService;
import com.onlyK.ssm.utils.PageBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
 * @author only老K
 * @create  2019-11-24 16:01
 */
@Controller
@RequestMapping("/book")
public class BookController {
    @Autowired
    private BookService bookService;
    @RequestMapping("/list")
    public String list(Book book, HttpServletRequest req){
        PageBean pageBean=new PageBean();
        pageBean.setRequest(req);
        List<Map> list = bookService.listPager(book,pageBean);
        req.setAttribute("bookList",list);
        req.setAttribute("pagebean",pageBean);
        return "bookList";
    }
    @RequestMapping("/preSave")
    public String preSave(Book book, HttpServletRequest req){
        if(book ==null || book.getBid() ==null || book.getBid()==0){
           return "bookEdit";
        }
        Map map = bookService.listPager(book, null).get(0);
        req.setAttribute("b",map);
        return "bookList";
    }
    @RequestMapping("/add")
    public String add(Book book){
        bookService.insertSelective(book);
        return "redirect:/book/list";
    }
    @RequestMapping("/del/{bid}")
    public String del(@PathVariable("bid") Integer bid){
        bookService.deleteByPrimaryKey(bid);
        return "redirect:/book/list";
    }
    @RequestMapping("/edit")
    public String edit(Book book){
        bookService.updateByPrimaryKeySelective(book);
        return "redirect:/book/list";
    }
}

在这里插入图片描述
Springmvc入门_第3张图片

4.springmvc结果集处理

springmvc中五种返回值处理情况
转发3种
转发到安全目录web-inf下
转发到根目录
转发到requestMapping

重定向2种
重定向到根目录
重定向到requestMapping 

Springmvc-servlet.xml

  <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/"/>//这里更改到了web-inf路径下
        <property name="suffix" value=".jsp"/>
    </bean>

结果集处理的五种情况

package com.onlyK.ssm.controller;

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

/**
 * @author only老K
 * @create  2019-11-24 15:22
 */
@Controller  //给spring进行管理
public class HelloController {
    @RequestMapping("say1")
    public String say1() {
        return "hello";
    }
    @RequestMapping("say2")
    public ModelAndView say2(){
       ModelAndView mv=new ModelAndView();
       mv.setViewName("/hello");
       mv.addObject("msg","换个花样");
       return mv;
    }
    //转发到安全目录下
    @RequestMapping("/req1")
    public String req1(){
        System.out.println("转发到安全目录下..");
        return "Resultset";
    }
    //转发到根目录下
    @RequestMapping("/req2")
    public String req2(){
        System.out.println("转发到根目录下..");
        return "forward:/b.jsp";
    }
    //转发到requestMapping
    @RequestMapping("/req3")
    public String req3(){
        System.out.println("转发到requestMapping..");
        return "forward:/req2";
    }
//根目录下
    @RequestMapping("/red1")
    public String red1(){
        System.out.println("重定向到根目录下..red1");
        return "redirect:/b.jsp";
    }
    //
    @RequestMapping("/red2")
    public String red2(){
        System.out.println("重定向到根目录下..");
        return "redirect:/req2";
    }
}

Resultset.jsp web-inf下

<%--
  Created by IntelliJ IDEA.
  User: 86135
  Date: 2019/11/24
  Time: 16:57
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>结果集知识点</title>
</head>
<body>
结果集知识点介绍
</body>
</html>

b.jsp webapp下

<%--
  Created by IntelliJ IDEA.
  User: 86135
  Date: 2019/11/24
  Time: 17:04
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
转发到根目录...
</body>
</html>

5、Springmvc静态资源处理

Springmvc-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:context="http://www.springframework.org/schema/context"
       xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop"
       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-4.3.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop.xsd">
    <!-- 通过context:component-scan元素扫描指定包下的控制器-->
    <!--1) 扫描com.onlyK.zf及子子孙孙包下的控制器(扫描范围过大,耗时)-->
    <aop:aspectj-autoproxy/>
    <context:component-scan base-package="com.onlyK.ssm"/>

    <!--2) 此标签默认注册DefaultAnnotationHandlerMapping和AnnotationMethodHandlerAdapter -->
    <!--两个bean,这两个bean是spring MVC为@Controllers分发请求所必须的。并提供了数据绑定支持,-->
    <!--@NumberFormatannotation支持,@DateTimeFormat支持,@Valid支持,读写XML的支持(JAXB),读写JSON的支持(Jackson)-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--3) ViewResolver视图解析器,不用写映射文件了 -->
    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <!-- viewClass需要在pom中引入两个包:standard.jar and jstl.jar -->
        <property name="viewClass"
                  value="org.springframework.web.servlet.view.JstlView"></property>
        <property name="prefix" value="/WEB-INF/"/>
        <property name="suffix" value=".jsp"/>
    </bean>

    <!--4) 单独处理图片、样式、js等资源 -->
    <!--<mvc:resources location="/css/" mapping="/css/**"/>-->
    <mvc:resources location="/static/" mapping="/static/**"/>
    <!--<mvc:resources location="/js/" mapping="/js/**"/>-->

</beans>

测试即可

你可能感兴趣的:(框架,Springmvc入门,SpringMVC原理图)