DW做旅游网站毕业设计,长沙百度快速排名,网站运营团队建设,郑州网站设目录 什么是MVC
SpringMVC概述
SpringMVC常见开发方式
SpringMVC执行流程
SpringMVC核心组件介绍
快速构建Spring MVC程序
SpringMVC参数绑定
SpringMVC跳转方式
SpringMVC处理json请求和响应
SpringMVC静态资源处理
SpringMVC操作session和cookie
SpringMVC拦截器 …目录 什么是MVC
SpringMVC概述
SpringMVC常见开发方式
SpringMVC执行流程
SpringMVC核心组件介绍
快速构建Spring MVC程序
SpringMVC参数绑定
SpringMVC跳转方式
SpringMVC处理json请求和响应
SpringMVC静态资源处理
SpringMVC操作session和cookie
SpringMVC拦截器
SpringMVC文件的上传
SpringMVC全局异常统一处理
SSM框架整合
1.引入pom依赖
2.设置配置文件
3.项目目录结构 什么是MVC
MVC 设计模式一般指 MVC 框架MModel指数据模型层业务模型层VView指视图层CController指控制层。使用 MVC 的目的是将 M 和 V 的实现代码分离使同一个程序可以有不同的表现形式。
MVC 属于架构模式的一种所谓架构就是如何设计一个程序的结构。MVC 将程序结构划分为三层每一层都对外提供了可供上层调用的接口既能维系三层之间的联系也能保持相对的独立性。
这种将业务逻辑、数据和界面分离的代码组织形式降低了模块间的耦合度有利于日后的维护与扩展。
SpringMVC概述
springmvc是基于spring Framwork衍生出来的一个mvc框架主要解决原有mvc架构中控制器Controller的问题常见的控制器有servletstruts2等控制器的核心功能是根据用户的请求调用对应业务功能然后依据业务处理的结果控制程序的运行流程。
servlet实现控制器存在的问题
1.接收客户端请求参数时存在代码的冗余
2.只能接收字符串类型的数据其它数据类型需要手动的转换
3.无法接收对象类型的参数
4.调用业务对象存在耦合 new
5.流程跳转存在耦合路径耦合视图耦合
SpringMVC常见开发方式
1.传统的开发方式
通过作用域(request,session)实现数据的传递
通过视图技术进行视图的渲染jsp thymleaf freeMarker
2.前后端分离开发方式
多种新的访问方式get 、post 、put、 delete
Restful风格的访问
SpringMVC执行流程
Spring MVC 框架是高度可配置的包含多种视图技术例如 JSP、FreeMarke和 POI。Spring MVC 框架并不关心使用的视图技术也不会强迫开发者只使用 JSP。
Spring MVC 执行流程如图 所示 SpringMVC 的执行流程如下: 用户点击某个请求路径发起一个 HTTP request 请求该请求会被提交到 DispatcherServlet前端控制器 由 DispatcherServlet 请求一个或多个 HandlerMapping处理器映射器并返回一个执行链HandlerExecutionChain。 DispatcherServlet 将执行链返回的 Handler 信息发送给 HandlerAdapter处理器适配器 HandlerAdapter 根据 Handler 信息找到并执行相应的 Handler常称为 Controller Handler 执行完毕后会返回给 HandlerAdapter 一个 ModelAndView 对象Spring MVC的底层对象包括 Model 数据模型和 View 视图信息 HandlerAdapter 接收到 ModelAndView 对象后将其返回给 DispatcherServlet DispatcherServlet 接收到 ModelAndView 对象后会请求 ViewResolver视图解析器对视图进行解析 ViewResolver 根据 View 信息匹配到相应的视图结果并返回给 DispatcherServlet DispatcherServlet 接收到具体的 View 视图后进行视图渲染将 Model 中的模型数据填充到 View 视图中的 request 域生成最终的 View视图 视图负责将结果显示到浏览器客户端
SpringMVC核心组件介绍
Spring MVC 涉及到的组件有 DispatcherServlet前端控制器、HandlerMapping处理器映射器、HandlerAdapter处理器适配器、Handler处理器、ViewResolver视图解析器和 View视图。下面对各个组件的功能说明如下。
1DispatcherServlet
DispatcherServlet 是前端控制器从图 1 可以看出Spring MVC 的所有请求都要经过 DispatcherServlet 来统一分发。DispatcherServlet 相当于一个转发器或中央处理器控制整个流程的执行对各个组件进行统一调度以降低组件之间的耦合性有利于组件之间的拓展。
2HandlerMapping
HandlerMapping 是处理器映射器其作用是根据请求的 URL 路径通过注解或者 XML 配置寻找匹配的处理器Handler信息。
3HandlerAdapter
HandlerAdapter 是处理器适配器其作用是根据映射器找到的处理器Handler信息按照特定规则执行相关的处理器Handler。
4Handler
Handler 是处理器和 Java Servlet 扮演的角色一致。其作用是执行相关的请求处理逻辑并返回相应的数据和视图信息将其封装至 ModelAndView 对象中。
5View Resolver
View Resolver 是视图解析器其作用是进行解析操作通过 ModelAndView 对象中的 View 信息将逻辑视图名解析成真正的视图 View如通过一个 JSP 路径返回一个真正的 JSP 页面
6View
View 是视图其本身是一个接口实现类支持不同的 View 类型JSP、FreeMarker、Excel 等。
以上组件中需要开发人员进行开发的是处理器Handler常称Controller和视图View。通俗的说要开发处理该请求的具体代码逻辑以及最终展示给用户的界面
快速构建Spring MVC程序
搭建步骤如下 创建 Web 应用并引入 JAR 包 spring-webmvc Spring MVC 配置在 web.xml 中配置 Servlet创建 Spring MVC 的配置文件 servletservlet-namespringmvc/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:springmvc-config.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-namespringmvc/servlet-nameurl-pattern//url-pattern/servlet-mapping springmvc配置文件 ?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instance xmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxsi:schemaLocationhttp://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd!--注解实现mvc--!-- 自动扫描包实现支持注解的IOC --context:component-scan base-packagecn.kgc.spring /!-- 支持mvc注解驱动 注册处理器映射器 注册处理器适配器 参数的类型转换 页面跳转 响应处理 --mvc:annotation-driven /!-- 视图解析器 --beanclassorg.springframework.web.servlet.view.InternalResourceViewResolveridinternalResourceViewResolver!-- 前缀 --property nameprefix value/view/ /!-- 后缀 --property namesuffix value.jsp //bean
/beans 创建 Controller处理请求的控制器 Controller
RequestMapping(/Hello)
public class HelloWorld {RequestMapping(/Say.do)public String SayHi(Model model) {return index;}
} 创建 View使用 JSP 作为视图 % page contentTypetext/html;charsetUTF-8 languagejava %
html
headtitleTitle/title
/head
bodyhello springmvc
/body
/html 部署运行
RequestMapping详解
1.一个方法匹配多个路径 RequestMapping(value{hello1.do,hello2.do})public String test01(){
System.out.println(hello);
//跳转路径 默认使用转发 会经过视图解析器return index;} 2.指定方法接收的请求方式 RequestMapping(value hello1.do,method RequestMethod.GET)public String test01(){
System.out.println(hello GET);
//跳转路径 默认使用转发 会经过视图解析器return index;} RequestMapping(value hello1.do,method RequestMethod.POST) public String test02(){ System.out.println(hello POST); //跳转路径 默认使用转发 会经过视图解析器 return index; } 3.一个方法指定多种类型的请求 RequestMapping(value hello1.do,method {RequestMethod.GET,RequestMethod.POST})public String test01(){
System.out.println(hello GET OR POST);
//跳转路径 默认使用转发 会经过视图解析器return index;} SpringMVC参数绑定
视图传参到控制器
1.基本数据类型绑定
形参的名字和传递参数的名字保持一致参数需要全部传递否则报500错误为了解决不传参报错可以给基本类型的参数设置默认值 /*** 设置基本参数类型的默认值 RequestParam(defaultValue xx)*如果通过url传递了参数则以传递的为最终的参数* param age* param score*/RequestMapping(/login2)public void login2(RequestParam(defaultValue 20) int age , RequestParam(defaultValue 24.7) double score){System.out.println(age);System.out.println(score);} 设置参数的别名 public void login3(RequestParam(defaultValue 20 ,name Age) int age , double score){System.out.println(age);System.out.println(score);} 2.包装数据类型的传递
使用包装类型可以解决基本类型不传递值出现500错误的问题但是还是要保持参数名字和形参保持一致 RequestMapping(/login4)public void login3(Integer age , Double score){System.out.println(age);System.out.println(score);} 3.字符串类型数据的绑定
参照包装类即可
4.数组类型 public void login3(String[] ids){for (int i 0; i ids.length; i) {System.out.println(ids[i]);}} 5.javaBean类型
参数名的字段和Javabean中的属性保持一致即可 public void login3(User user){System.out.println(user);}
url:http://localhost:8080/user/login6?age12usernamelisiheight1.7 返回数据到视图层 RequestMapping(path /res1)public ModelAndView test01(){ModelAndView modelAndView new ModelAndView();modelAndView.setViewName(hello);modelAndView.addObject(msg, ModelAndView);return modelAndView;}RequestMapping(path /res2)public String test02(Model model){model.addAttribute(msg, model);return hello;}RequestMapping(path /res3)public String test03(ModelMap map){map.addAttribute(msg, ModelMap);return hello;}SpringMVC跳转方式
Spring MVC默认采用服务器内部转发的形式展示页面信息同时也支持重定向页面
重定向302状态码给浏览器 Controller
public class HelloController3 {RequestMapping(/r1)public void test01(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {response.sendRedirect(redirect.jsp);}RequestMapping(/r2)public String test02(){return redirect:redirect.jsp;}RequestMapping(/f1)public void test03(HttpServletRequest request,HttpServletResponse response) throws ServletException, IOException {request.getRequestDispatcher(redirect.jsp).forward(request, response);}RequestMapping(/f2)public String test04(){return forward:redirect.jsp;}RequestMapping(/f3)public String test05(){return redirect;} SpringMVC处理json请求和响应
响应json格式的数据 public class JsonController {GetMapping(/login/{username}/{password})public void login(PathVariable String username, PathVariable String password, HttpServletResponse res) throws IOException {System.out.println(username::password);//响应json格式的字符串res.setContentType(application/json;charsetutf-8);JsonResult result JsonResult.builder().code(200).count(100L).data(null).msg(ok).build();res.getWriter().write(result.toJSONString());}GetMapping(/login2/{username}/{password})ResponseBodypublic Object login2(PathVariable String username, PathVariable String password, HttpServletResponse res) throws IOException {System.out.println(username::password);return JsonResult.builder().code(200).count(100L).data(null).msg(ok).build();}RequestMapping(/login3)ResponseBodypublic Object login3(User user) {System.out.println(user);return user;} 请求数据类型为JSON
/*** 接收json格式的参数* param user* return*/RequestMapping(/login4)ResponseBodypublic Object login4(RequestBody User user) {System.out.println(user);return user;}
}前台ajax请求
script typetext/javascript$(function () {$(#jsbutton).click(function () {$.ajax({url:/login3,type:post,data:{username:lisi,age:20,height:170,birth:new Date()},dataType:json,success:function (result) {console.log(result);},error:function () {console.log(请求失败!)}})})$(#jsbutton2).click(function () {var user {username:lisi,age:20,height:170,birth:1999-9-9}$.ajax({url:/login4,type:post,data:JSON.stringify(user),contentType:application/json;charsetutf-8,dataType:json,success:function (result) {console.log(result);},error:function () {console.log(请求失败!)}})})})/script
RestFul风格
一种软件架构风格、设计风格而不是标准只是提供了一组设计原则和约束条件。它主要用于客户端和服务器交互类的软件。基于这个风格设计的软件可以更简洁更有层次更易于实现缓存等机制
URL定义
资源互联网所有的事物都可以被抽象为资源 资源操作使用POST、DELETE、PUT、GET使用不同方法对资源进行操作。 分别对应 添加、 删除、修改、查询
传统方式操作资源 http://127.0.0.1/item/queryUser.action?id1 查询,GET
http://127.0.0.1/item/saveUser.action 新增,POST
http://127.0.0.1/item/updateUser.action 更新,POST
http://127.0.0.1/item/deleteUser.action?id1 删除,GET或POST RestFul请求方式 可以通过 GET、 POST、 PUT、 PATCH、 DELETE 等方式对服务端的资源进行操作。其中: GET 用于查询资源 POST 用于创建资源 PUT 用于更新服务端的资源的全部信息 DELETE 用于删除服务端的资源。
public class RestController {GetMapping(/rest)public void test01(){System.out.println(test01: );} PostMapping(/rest)public void test02(){System.out.println(test02: );}DeleteMapping(/rest)public void test03(){System.out.println(test03:);}PutMapping(/rest)public void test04(){System.out.println(test04: );}PatchMapping(/rest)public void test05(){System.out.println(test05: );}}
表单发送PUT请求设置方式 form actionrest/r methodpostinput typehidden name_method valuePUTpinput typetext placeholder请输入id nameid/ppinput typetext placeholder请输入姓名 nameusername/ppinput typedate placeholder请输入生日 namebirth/ppinput typesubmit/p/form 设置web.xml
filterfilter-nameHidden/filter-namefilter-classorg.springframework.web.filter.HiddenHttpMethodFilter/filter-class/filterfilter-mappingfilter-nameHidden/filter-nameurl-pattern/*/url-pattern
/filter-mapping
REST风格传参问题 GetMapping(/login/{username}/{password})public void login(PathVariable String username, PathVariable String password, HttpServletResponse res) throws IOException {System.out.println(username::password);//响应json格式的字符串res.setContentType(application/json;charsetutf-8);JsonResult result JsonResult.builder().code(200).count(100L).data(null).msg(ok).build();res.getWriter().write(result.toJSONString());}
数据提交中文乱码的处理
!--解决中文乱码--filterfilter-nameencoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueutf-8/param-value/init-param/filterfilter-mappingfilter-nameencoding/filter-nameurl-pattern/*/url-pattern/filter-mapping
SpringMVC静态资源处理
1.配置静态资源的路径
mvc:resources mapping/static/** location/static//
2.配置使用tomcat的servlet处理器
mvc:default-servlet-handler/
SpringMVC操作session和cookie
Controller
SessionAttributes({model1,model2})
public class SessionController {RequestMapping(/s1)public void test01(HttpSession session){session.setAttribute(msg, session attribute);}RequestMapping(/s2)public void test02(HttpSession session){System.out.println(session.getAttribute(msg));}/*** 将model放入session作用域* param model*/RequestMapping(/s3)public void test03(Model model){model.addAttribute(model1, model1 attribute);}/*** 获取通过注解设置的session域中的值* param session*/RequestMapping(/s5)public void test05(HttpSession session){System.out.println(msg: session.getAttribute(msg));System.out.println(model1 :session.getAttribute(model1));System.out.println(model2 :session.getAttribute(model2));}/*** 通过注解获取session域中的值* param*/RequestMapping(/s6)public void test05(SessionAttribute(name msg) String session){System.out.println(session);}操作cookiepublic class CookieController {RequestMapping(/c1)public void test01(HttpServletResponse response){Cookie ck new Cookie(cookie,cookieValue);ck.setPath(/);ck.setMaxAge(60*60*24*7);response.addCookie(ck);}/*** 获取cookie中值的方式1* param request*/RequestMapping(/c2)public void test02(HttpServletRequest request){Cookie[] cookies request.getCookies();for (int i 0; i cookies.length; i) {System.out.println(cookies[i].getName():cookies[i].getValue());}}/*** 获取cookie中值的方式2 注解方式* param cookie*/RequestMapping(/c3)public void test03(CookieValue(cookie) String cookie){System.out.println(cookie);}
}
SpringMVC拦截器
SpringMVC中的Interceptor拦截器也是相当重要和相当有用的它的主要作用是拦截用户的请求并进行相应的 处理。比如通过它来进行权限验证或者是来判断用户是否登录等操作。对于SpringMVC拦截器的定义方式有两 种 实现接口: org.springframework.web.servlet.Handlerlnterceptor 继承适配器: org.springframework.web.servethandler.HandlerInterceptorAdapter
1.实现Handlerlnterceptor接口
public class MyIntercepter01 implements HandlerInterceptor {/*** 目标方法执行前执行 返回false拦截 否则放行* param request* param response* param handler* return* throws Exception*/Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {System.out.println(MyIntercepter01 -目标方法前-执行preHandle01 );return true;}/**** 目标方法执行后执行* param request* param response* param handler* param modelAndView* throws Exception*/Overridepublic void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {System.out.println(MyIntercepter01 -目标方法执行后-执行postHandle01 );}/*** 视图响应完成后执行* param request* param response* param handler* param ex* throws Exception*/Overridepublic void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {System.out.println(MyIntercepter01 -视图渲染完成后-执行afterCompletion01 );}
2.继承HandlerInterceptorAdapter不建议使用public class MyInterceptor2 extends HandlerInterceptorAdapter {Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {return false;}
}
使用拦截器拦截非法请求/***用户操作模拟实现* 用户的登录(无需登录)* 用户的添加(登录)* 用户修改(登录)* 用户删除(登录)** author mosin* date 2021/8/22* version 1.0*/
Controller
RequestMapping(/user)
SessionAttributes(action)
public class UserInfoController {/*** 用户登录*/RequestMapping(/login)public ModelAndView login(HttpSession session){ModelAndView modelAndView new ModelAndView();modelAndView.setViewName(success);User user User.builder().password(123456).username(lisi).build();session.setAttribute(user, user);modelAndView.addObject(user, user);return modelAndView;}/*** 用户添加*/RequestMapping(/add)public String add(Model model){model.addAttribute(action, 用户添加成功);System.out.println(用户的添加方法);return success;}/*** 用户修改*/RequestMapping(/update)public String update(Model model){System.out.println(用户的更新方法);model.addAttribute(action, 用户更新成功);return success;}/*** 用户修改*/RequestMapping(/delete)public String delete(Model model){System.out.println(用户的删除方法);model.addAttribute(action, 用户删除成功);return success;}}
SpringMVC文件的上传 添加坐标依赖dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.4/version/dependency
配置解析器!-- 文件上传配置文件解析器--bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver
!-- 允许上传的最大文件 单位字节--property namemaxUploadSize value104857600/value/property
!-- 内存中的最大缓存超出写出临时文件到硬盘--property namemaxInMemorySize value4096/value/propertyproperty namedefaultEncodingvalueutf-8/value/property/bean
后台代码
Controller
RequestMapping(/upload)
public class UPloadController {RequestMapping(/file)public String upload(RequestParam(file) MultipartFile file, HttpServletRequest request){//获取项目的真实路径String realPath request.getSession().getServletContext().getRealPath(/);System.out.println(realPath);//创建文件上传的目录File dir new File(realPath, /upload);System.out.println(dir);//判定文件夹是否存在 不存在创建if(!dir.exists()){dir.mkdir();}if(!file.isEmpty()){//获取文件的名字String fileName file.getOriginalFilename();//截取文件的后缀 生成新的文件名 避免文件名字重复String suffix fileName.substring(fileName.lastIndexOf(.));//获取当前系统时间String fileLastName System.currentTimeMillis()suffix;System.out.println(fileLastName);//将文件写入目标文件夹try {file.transferTo(new File(dir,fileLastName));request.setAttribute(msg, 文件上传成功);} catch (IOException e) {e.printStackTrace();request.setAttribute(msg, 文件上传失败);}}else{request.setAttribute(msg, 未选择文件);}return success;}RequestMapping(/files)public String uploads(RequestParam(files) ListMultipartFile files, HttpServletRequest request){//遍历集合files.forEach(multipartFile - {FileUploadUtil.upload(multipartFile, request);});return success;}
}
SpringMVC全局异常统一处理
1.处理的方式1 使用 ExceptionHandler(Exception.class) 在类中定义一个异常的方法处理本类中的指定异常
RestController
RequestMapping(/exception)
public class ExceptionController01 {ExceptionHandler(Exception.class)public Object handlerException(Exception e){return JsonResult.builder().msg(出现异常).code(1).data(e.getMessage()).build();}RequestMapping(/e1)public Object ex1(){int a 1/0;return null;}RequestMapping(/e2)public Object ex2() throws FileNotFoundException {new FileInputStream(ab);return null;}
}
2.处理的方式2 全局处理模式 定义ExceptionAdvice类RestControllerAdvice
public class ExceptionAdvice {ExceptionHandler(value {Exception.class})public Object handlerException(Exception e){return JsonResult.builder().msg(出现异常).code(1).data(e.getMessage()).build();}
}
SSM框架整合
1.引入pom依赖
1.引入mybatis依赖
!-- mybatis依赖--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis/artifactIdversion3.5.7/version/dependency
!-- 分页pagehelper--dependencygroupIdcom.github.pagehelper/groupIdartifactIdpagehelper/artifactIdversion5.2.1/version/dependency
!-- mybatis-spring--dependencygroupIdorg.mybatis/groupIdartifactIdmybatis-spring/artifactIdversion2.0.5/version/dependency
2.引入spring依赖!-- spring-context--dependencygroupIdorg.springframework/groupIdartifactIdspring-context/artifactIdversion5.3.9/version/dependency
!-- spring-aspects--dependencygroupIdorg.springframework/groupIdartifactIdspring-aspects/artifactIdversion5.3.9/version/dependency
!-- spring-jdbc--dependencygroupIdorg.springframework/groupIdartifactIdspring-jdbc/artifactIdversion5.3.9/version/dependency
3.springmvc依赖!-- spring-webmvc--dependencygroupIdorg.springframework/groupIdartifactIdspring-webmvc/artifactIdversion5.3.9/version/dependency
!-- jackson-core--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-core/artifactIdversion2.11.3/version/dependency
!-- jackson-databind--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-databind/artifactIdversion2.11.3/version/dependency
!-- jackson-annotations--dependencygroupIdcom.fasterxml.jackson.core/groupIdartifactIdjackson-annotations/artifactIdversion2.11.3/version/dependency!-- 文件上传--dependencygroupIdcommons-fileupload/groupIdartifactIdcommons-fileupload/artifactIdversion1.4/version/dependency
4.log4j依赖dependencygroupIdlog4j/groupIdartifactIdlog4j/artifactIdversion1.2.17/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-api/artifactIdversion2.13.3/version/dependencydependencygroupIdorg.apache.logging.log4j/groupIdartifactIdlog4j-core/artifactIdversion2.13.1/version/dependency
5.数据库驱动和连接池!-- mysql-connector--dependencygroupIdmysql/groupIdartifactIdmysql-connector-java/artifactIdversion5.1.44/version/dependency!-- druid连接池--dependencygroupIdcom.alibaba/groupIdartifactIddruid/artifactIdversion1.1.10/version/dependency
6.servletjsp依赖!--servlet--dependencygroupIdjavax.servlet/groupIdartifactIdjavax.servlet-api/artifactIdversion4.0.1/version/dependency
!-- jsp--dependencygroupIdjavax.servlet.jsp/groupIdartifactIdjsp-api/artifactIdversion2.2/version/dependency
7.jstl依赖!--jstl--dependencygroupIdjavax.servlet/groupIdartifactIdjstl/artifactIdversion1.2/version/dependencydependencygroupIdtaglibs/groupIdartifactIdstandard/artifactIdversion1.1.2/version/dependency
8.其它依赖!-- lombok--dependencygroupIdorg.projectlombok/groupIdartifactIdlombok/artifactIdversion1.18.16/version/dependency
!-- junit--dependencygroupIdjunit/groupIdartifactIdjunit/artifactIdversion4.11/versionscopetest/scope/dependency
2.设置配置文件
1.db.properties
jdbc.drivercom.mysql.jdbc.Driver
jdbc.urljdbc:mysql:///mybatis?useSSLtrueserverTimezoneGMT%2B8
jdbc.usernameroot
jdbc.passwordroot#初始化时池中建立的连接数。
jdbc.initialSize2
#最大的可活跃的连接池数量
jdbc.maxActive300
#最大等待时间
jdbc.maxWait60000
2.log4j.properties
log4j.rootLoggerDEBUG,Console#Console
log4j.appender.Consoleorg.apache.log4j.ConsoleAppender
log4j.appender.console.TargetSystem.out
log4j.appender.Console.layoutorg.apache.log4j.PatternLayout
log4j.appender.Console.layout.ConversionPattern%d [%t] %-5p [%c] - %m%nlog4j.logger.org.apacheERROR
log4j.logger.org.mybatisERROR
log4j.logger.org.springframeworkERROR#这个需要
log4j.logger.log4jdbc.debugERROR
log4j.logger.com.gk.mapperERROR
log4j.logger.jdbc.auditERROR
log4j.logger.jdbc.resultsetERROR
#这个打印SQL语句非常重要
log4j.logger.jdbc.sqlonlyDEBUG
log4j.logger.jdbc.sqltimingERROR
log4j.logger.jdbc.connectionFATAL
3.spring核心配置文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxmlns:txhttp://www.springframework.org/schema/txxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd!-- 读取db.properties --context:property-placeholder locationclasspath:db.properties /!-- 配置数据源 --bean iddataSource classcom.alibaba.druid.pool.DruidDataSource!-- 数据库驱动 --property namedriverClassName value${jdbc.driver} /property nameurl value${jdbc.url} /property nameusername value${jdbc.username} /property namepassword value${jdbc.password} /property nameinitialSize value${jdbc.initialSize} /property namemaxActive value${jdbc.maxActive} /property namemaxWait value${jdbc.maxWait} //bean!-- 事务管理器依赖于数据源 --bean idtransactionManager classorg.springframework.jdbc.datasource.DataSourceTransactionManagerproperty namedataSource refdataSource //bean!-- 开启事务注解 --tx:annotation-driven transaction-managertransactionManager /!-- 配置MyBatis工厂 SqlSessionFactory --bean idsqlSessionFactory classorg.mybatis.spring.SqlSessionFactoryBean!-- 注入数据源 --property namedataSource refdataSource /!-- 指定Mybatis核心配置文件位置 --property nameconfigLocation valueclasspath:config/mybatis-config.xml /!-- 扫描模块配置文件:mapper需要的xml文件如果mapper.xml和接口在一个包下可以不配置 --property namemapperLocations valueclasspath:mapper/*.xml //bean!-- 配置mapper扫描器 --bean classorg.mybatis.spring.mapper.MapperScannerConfigurerproperty namebasePackage valuecn.kgc.ssm.dao //bean!-- 扫描包--context:component-scan base-packagecn.kgc.ssm /!-- 开启spring注解支持--context:annotation-config/
/beans
4.spring-mvc配置文件
?xml version1.0 encodingUTF-8?
beans xmlnshttp://www.springframework.org/schema/beansxmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexmlns:contexthttp://www.springframework.org/schema/contextxmlns:mvchttp://www.springframework.org/schema/mvcxmlns:txhttp://www.springframework.org/schema/txxsi:schemaLocationhttp://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsdhttp://www.springframework.org/schema/contexthttp://www.springframework.org/schema/context/spring-context.xsdhttp://www.springframework.org/schema/mvchttp://www.springframework.org/schema/mvc/spring-mvc.xsdhttp://www.springframework.org/schema/txhttp://www.springframework.org/schema/tx/spring-tx.xsd!-- 加载注解驱动 --mvc:annotation-driven /!-- 配置视图解析器 --bean classorg.springframework.web.servlet.view.InternalResourceViewResolverproperty nameprefix value/WEB-INF/pages/ /property namesuffix value.jsp //bean!--释放静态资源--mvc:default-servlet-handler/!-- 文件上传配置文件解析器--bean idmultipartResolver classorg.springframework.web.multipart.commons.CommonsMultipartResolver!-- 允许上传的最大文件--property namemaxUploadSize value104857600/value/property!-- 内存中的最大缓存超出写出临时文件到硬盘--property namemaxInMemorySize value4096/value/propertyproperty namedefaultEncodingvalueutf-8/value/property/bean
/beans
5.mybatis配置文件
?xml version1.0 encodingUTF-8 ?
!DOCTYPE configurationPUBLIC -//mybatis.org//DTD Config 3.0//ENhttp://mybatis.org/dtd/mybatis-3-config.dtd
configuration!-- mybatis运行时设置 --settings!-- 启用log4j日志 --setting namelogImpl valueLOG4J/settingsetting namemapUnderscoreToCamelCase valuetrue//settings!-- 别名定义 --typeAliasespackage namecn.kgc.ssm.entity //typeAliases!-- mybatis插件 --pluginsplugin interceptorcom.github.pagehelper.PageInterceptor!-- 配置mysql方言 --property namehelperDialect valuemysql /!-- 设置为true时如果pageSize0就会查询出全部的结果 --property namepageSizeZero valuetrue /!-- 3.3.0版本可用分页参数合理化默认false禁用 --!-- 启用合理化时如果pageNum1会查询第一页如果pageNumpages会查询最后一页 --!-- 禁用合理化时如果pageNum1或pageNumpages会返回空数据 --property namereasonable valuetrue //plugin/plugins
/configuration
6.web.xml
?xml version1.0 encodingUTF-8?
web-app xmlnshttp://xmlns.jcp.org/xml/ns/javaeexmlns:xsihttp://www.w3.org/2001/XMLSchema-instancexsi:schemaLocationhttp://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsdversion4.0
!-- 前端控制器--servletservlet-namessm/servlet-nameservlet-classorg.springframework.web.servlet.DispatcherServlet/servlet-classinit-paramparam-namecontextConfigLocation/param-nameparam-valueclasspath:config/spring-*.xml/param-value/init-paramload-on-startup1/load-on-startup/servletservlet-mappingservlet-namessm/servlet-nameurl-pattern*.do/url-pattern/servlet-mapping!-- 过滤器解决中文乱码--filterfilter-nameencoding/filter-namefilter-classorg.springframework.web.filter.CharacterEncodingFilter/filter-classinit-paramparam-nameencoding/param-nameparam-valueutf-8/param-value/init-param/filterfilter-mappingfilter-nameencoding/filter-nameurl-pattern//url-pattern/filter-mapping
/web-app
3.项目目录结构