博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【SpringMVC】SpringMVC基础-SpringMVC项目快速搭建、日志框架为logback
阅读量:6438 次
发布时间:2019-06-23

本文共 8345 字,大约阅读时间需要 27 分钟。

转载请注明出处:

本文源自【】

分析

Spring MVC提供了一个DispatcherServlet来开发Web应用。

在Servlet 2.5 及以下的时候只要在web.xml下配置<servlet>元素即可。

在下面的示例中,使用的是Servlet3.0+无web.xml的配置方式,在Spring MVC里实现WebApplicationInitialzer接口实现等同于web.xml的配置。

下面实例在IDEA中基于Maven搭建零配置的Spring MVC原型项目。

示例

构建Maven项目

pom.xml内容:

4.0.0
cn.chenhaoxiang
highlight_springmvc4
1.0-SNAPSHOT
war
1.7
UTF-8
UTF-8
2.2
1.2
3.1.0
4.2.3.RELEASE
1.0.13
1.7.7
1.2.17
javax
javaee-web-api
7.0
provided
org.springframework
spring-webmvc
${spring-framework.version}
javax.servlet
jstl
${jstl.version}
javax.servlet
javax.servlet-api
${servlet.version}
javax.servlet.jsp
jsp-api
${jsp.version}
provided
org.springframework
spring-tx
${spring-framework.version}
org.slf4j
slf4j-api
${slf4j.version}
log4j
log4j
${log4j.version}
org.slf4j
jcl-over-slf4j
${slf4j.version}
ch.qos.logback
logback-classic
${logback.version}
ch.qos.logback
logback-core
${logback.version}
ch.qos.logback
logback-access
${logback.version}
org.apache.maven.plugins
maven-compiler-plugin
2.3.2
${java.version}
${java.version}
org.apache.maven.plugins
maven-war-plugin
2.3
false

日志配置

在src/main/resources目录下,新建logback.xml用来配置日志,内容如下:

true
logbak: %d{HH:mm:ss.SSS} %logger{36} - %msg%n

将org.springframwork.web包下的类的日志级别设置为DEBUG,我们开发Spring MVC经常出现和参数类型相关的4XX错误,设置此项我们会看到更详细的错误信息。

演示页面

在这里有一个注意的地方,页面的创建位置。

在src/main/resources下建立views目录,并在此目录下新建index.jsp。
内容如下:

<%--  Created by IntelliJ IDEA.  User: 陈浩翔  Date: 2016/12/18  Time: 下午 12:45  To change this template use File | Settings | File Templates.--%><%@ page contentType="text/html;charset=UTF-8" language="java" %>    MVC Title    
Welcome to Spring MVC
欢迎!

这里的页面不放在Maven标准的src/main/webapp/WEB-INF下,在这里这么放的原因是,Spring Boot的页面是放置在src/main/resources下。

Spring MVC配置类

这个就是一个简单的Spring配置类。

在这里配置了一个JSP的ViewResolver,用来映射路径和实际页面的位置,其中,@EnableWebMvc注解会开启一些默认配置,如一些ViewResolver或者MessageConverter等

package cn.hncu.springmvc;import org.springframework.context.annotation.Bean;import org.springframework.context.annotation.ComponentScan;import org.springframework.context.annotation.Configuration;import org.springframework.web.servlet.config.annotation.EnableWebMvc;import org.springframework.web.servlet.view.InternalResourceViewResolver;import org.springframework.web.servlet.view.JstlView;/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/19. * Time: 下午 3:39. * Explain:配置类 */@Configuration@EnableWebMvc@ComponentScan("cn.hncu.springmvc")public class MyMvcConfig {    @Bean    public InternalResourceViewResolver viewResolver(){        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();        viewResolver.setPrefix("/WEB-INF/classes/views/");//映射路径-运行时代码会将我们的页面自动编译到/WEB-INF/classes/views/下        viewResolver.setSuffix(".jsp");//实际页面后缀        viewResolver.setViewClass(JstlView.class);        return viewResolver;    }}

Spring MVC的ViewResolver,这个是Spring MVC视图(JSP下就是html)渲染的核心机制;Spring MVC里有一个接口叫做ViewResolver(我们的ViewResolver都实现该接口),实现这个接口要重写resolverViewName(),这个方法的返回值是接口View,而View的职责就是使用model、request、response对象,并将渲染的视图(不一定是html,可能是json、xml、pdf)返回给浏览器。

可能会对映射路径前缀配置为/WEB-INF/classes/views/有点奇怪,这不是我们放页面的路径啊。

这是因为看到的页面效果是运行时而不是开发时的代码,运行时代码会将我们的页面自动编译到/WEB-INF/classes/views/下、
如图:
这个是编译后的路径!

Web配置类

这个类就是为了代替web.xml的位置的。

package cn.hncu.springmvc;import org.springframework.web.WebApplicationInitializer;import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;import org.springframework.web.servlet.DispatcherServlet;import javax.servlet.ServletContext;import javax.servlet.ServletException;import javax.servlet.ServletRegistration;/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/19. * Time: 下午 3:44. * Explain:Web配置 */public class WebInitializer implements WebApplicationInitializer {
//WebApplicationInitializer是spring提供用来配置Servlet3.0+配置的接口,从而实现了替代web.xml的位置。 //实现此接口将会自动被SpringServletContainerInitializer(用来启动Servlet3.0容器)获取到 @Override public void onStartup(ServletContext servletContext) throws ServletException { AnnotationConfigWebApplicationContext context = new AnnotationConfigWebApplicationContext(); context.register(MyMvcConfig.class); context.setServletContext(servletContext);//新建WebApplicationContext,注册配置类,并将其和当前servletContext关联 ServletRegistration.Dynamic servlet = servletContext.addServlet("dispatcher",new DispatcherServlet(context)); //注册Spring MVC的DispatcherServlet servlet.addMapping("/"); servlet.setLoadOnStartup(1); }}

简单的控制器

package cn.hncu.springmvc;import org.springframework.stereotype.Controller;import org.springframework.web.bind.annotation.RequestMapping;/** * Created with IntelliJ IDEA. * User: 陈浩翔. * Date: 2016/12/19. * Time: 下午 3:55. * Explain:简单控制器 */@Controller //利用@Controller注解声明是一个控制器public class HelloController {
@RequestMapping("/index")//利用@RequestMapping配置URL和方法之间的映射 public String hello(){ return "index";//通过上面ViewResolver的Bean配置,返回值为index,说明我们的页面放置的路径是:/WEB-INF/classes/views/index.jsp }}

在这里,我们通过@RequestMapping配置URL和方法之间的映射,来访问实际的页面!

运行结果

最后,将程序部署到Tomcat中,启动Tomcat,访问:

本篇博客涉及到的源码链接:

【】

本文章由编写, 所有权利保留。

欢迎转载,分享是进步的源泉。

转载请注明出处:

本文源自【】

你可能感兴趣的文章
Effective C++ 45-48
查看>>
maven setting.xml 配置(有效)
查看>>
DDos攻击,使用深度学习中 栈式自编码的算法
查看>>
Android 中View的绘制机制源代码分析 一
查看>>
排序算法(一)——冒泡排序及改进
查看>>
mysql存储过程命令行批量插入N条数据命令
查看>>
linux远程开启不挂起的服务
查看>>
angularjs 1.x lazyloading
查看>>
关于gitblit成功启动,但在阿里云外网地址无法访问的问题
查看>>
【R】函数-概率函数
查看>>
Oracle一条SQL语句时快时慢
查看>>
TensorFlow环境 人脸识别 FaceNet 应用(一)验证测试集
查看>>
php html_entity_decode使用总结
查看>>
ubuntu下进行ssh
查看>>
Django+xadmin打造在线教育平台(三)
查看>>
A real example of vioplot in R (sample data and code attached)
查看>>
[转]微擎目录结构介绍
查看>>
Win7+Qt5.6.0(64位)+msvc2015编译器 环境配置
查看>>
Intel Fortran 调用Delphi编制的DLL
查看>>
golang包time用法详解
查看>>