项目生产环境下 log4j 和spring MVC视图解析viewResolvers的配置
博客专区 > EDIAGD 的博客 > 博客详情
项目生产环境下 log4j 和spring MVC视图解析viewResolvers的配置
EDIAGD 发表于5年前
项目生产环境下 log4j 和spring MVC视图解析viewResolvers的配置
  • 发表于 5年前
  • 阅读 4658
  • 收藏 57
  • 点赞 1
  • 评论 1

【腾讯云】新注册用户域名抢购1元起>>>   

首先log4j和视图解析viewResolvers在spring管理的项目中常用到,而且每次没有配置好log4j,IDE集成工具的控制台都不好看到输出日志。另外视图解析viewResolvers的运用可以帮我们过滤web项目访问的路径的前缀和后缀。所以,我想把这两个频繁的配置整理一下。

(1)先小结log4j的配置。这里是spring3.1.2环境项目下的配置,我们先在项目中导入log4j.jar包,在项目的web.xml配置中

我加入上下文的配置文件的映入:代码如下:

 

<context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>
            classpath*:applicationContext.xml
        </param-value>
    </context-param>

接着我们在applicationContext.xml的上下文配置文件中

 

加入log4j的属性文件:代码如下

 

<context:property-placeholder ignore-resource-not-found="true"
								  location="classpath*:application.properties,log4j.properties" />

这里你只要加入log4j.properties属性文件就可以了,application.properties是我的数据库配置文件,你不加

 

。其中log4j.properties属性文件:

 

log4j.rootLogger=INFO, A1
log4j.appender.A1=org.apache.log4j.ConsoleAppender
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%m%n

1: 其中,属性INFO是日志的输出的级别,一般发布的时候用INFO,开发用 DEBUG

 

等级可分为OFFFATALERRORWARNINFODEBUGALL,如果配置OFF则不打出任何信息,如果配置为INFO这样只显示INFO, WARN, ERRORlog信息,而DEBUG信息不会被显示

 

2: log4j.appender.A1=org.apache.log4j.ConsoleAppender

此句为定义名为A1的输出端是哪种类型,可以是

org.apache.log4j.ConsoleAppender(控制台),

org.apache.log4j.FileAppender(文件),

org.apache.log4j.DailyRollingFileAppender(每天产生一个日志文件),

org.apache.log4j.RollingFileAppender(文件大小到达指定尺寸的时候产生一个新的文件)

org.apache.log4j.WriterAppender(将日志信息以流格式发送到任意指定的地方)

3: 

 log4j.appender.A1.layout.ConversionPattern= [QC] %p [%t] %C.%M(%L) | %m%n

如果使用pattern布局就要指定的打印信息的具体格式ConversionPattern,打印参数如下:

%m 输出代码中指定的消息

%p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL

%r 输出自应用启动到输出该log信息耗费的毫秒数

%c 输出所属的类目,通常就是所在类的全名

%t 输出产生该日志事件的线程名

%n 输出一个回车换行符,Windows平台为“rn”,Unix平台为“n”

%d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如:%d{yyyy MMM dd HH:mm:ss,SSS},输出类似:2002年10月18日 22:10:28,921

%l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。

4:

 

 log4j.appender.A1.layout=org.apache.log4j.PatternLayout

此句为定义名为A1的输出端的layout是哪种类型,可以是

org.apache.log4j.HTMLLayout(以HTML表格形式布局),

org.apache.log4j.PatternLayout(可以灵活地指定布局模式),

org.apache.log4j.SimpleLayout(包含日志信息的级别和信息字符串),

org.apache.log4j.TTCCLayout(包含日志产生的时间、线程、类别等等信息)

 

这样你的log4j的生产环境就配置好了,之后运行你的项目中,tomcat和控制台可以看到日志的输入了。

(2)接着继续分析spring的视图的解析viewResolvers

1:首先我们还是在项目的web.xml配置文件中加入代码:

 

<servlet>
        <servlet-name>springMVC</servlet-name>
        <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
        <init-param>
            <param-name>contextConfigLocation</param-name>
            <param-value>
                classpath*:/mvc/applicationContext-mvc.xml
            </param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

servlet初始化好Spring MVC的上下文applicationContext-mvc.xml配置文件

applicationContext-mvc.xml文件中,我们加入代码:

 

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver">
		<!-- 设置为true以忽略对Accept Header的支持(浏览器不同有可能不同)-->
		<property name="ignoreAcceptHeader" value="true"/>

		<!-- 在没有扩展名时即: "/user/1" 时的默认展现形式 -->
		<property name="defaultContentType" value="text/html"/>

		<!-- 扩展名至mimeType的映射,即 /user.json => application/json -->
		<property name="mediaTypes">
			<map>
				<entry key="json" value="application/json"/>
				<!-- <entry key="xml" value="application/xml" /> -->
				<entry key="htm" value="text/html"/>
				<entry key="do" value="text/html"/>
				<entry key="qd" value="text/html"/>
			</map>
		</property>

		<property name="viewResolvers">
			<list>
				<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
					<property name="prefix" value="/pages/"/>
					<property name="suffix" value=".jsp"></property>
				</bean>

			</list>
		</property>

		<property name="defaultViews">
			<list>
				<bean class="org.springframework.web.servlet.view.json.MappingJacksonJsonView" />
				<!--<bean class="com.daguu.base.view.MappingFastJsonView"/>-->
			</list>
		</property>

	</bean>

解释一下配置文件:

在Spring MVC中,因为ViewResolver是使用bean来配置的,所以扩展起来非常的容易,可以根据自己的需要定制ViewResolver,其中属性prefix是视图的前缀,suffix是视图的后缀,这里以我的路径来解释:

看我的这个项目路径,这里我逻辑路径是/pages/index.jsp经过滤和配置中

<entry key="htm" value="text/html"/>

类型转换后,最后我们的逻辑路径是index.htm

  ViewResolver接口是在DispatcherServlet中进行调用的,当DispatcherServlet调用完Controller后,会得到一个ModelAndView对象,然后DispatcherServlet会调用render方法进行视图渲染。

这句话很重要,我们之前在web.xml中已经初始化了servlet了,接着我写出我的Controller控制类,通过它去转到jsp页面:

Controller类:

@Controller
@RequestMapping("/")
public class AuthController extends BaseControllerSupport{

    @Resource
    private BlogsService blogsService;

    @RequestMapping("/index")
    public String index(Model model, Page<Blog> page) {    
        blogsService.getBlogsList(page);      
        model.addAttribute("page", page);
        return "index";
    }

这里你只要关注
RequestMapping("/index")和return “index”即可,

在webapps的根目录下:

在index.jsp中写上基本路径和重定向的路径:

<%@ page language="java" pageEncoding="UTF-8"%>
<%
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + 
request.getServerPort() + path + "/";
    response.sendRedirect(basePath+"index.htm");
%>

这样我们访问/pages/index.jsp的流程就是这样的,启动tomcat之后,先在web.xml中初始化

servlet和配置文件→appicationContext-mvc.xml过滤之后→Contrller类中return到webapps根目

录下的index.jsp中→重定向sendRedirect到index.htm(如果你是本地服务器的话,地址会是
http://localhost:8080/index.htm)

这就是我理解的spring MVC的视图解析ViewResolver


以上是我对log4j和ViewResolver两种常见配置自己的理解。

后续有很多开发填坑的文章发布,如果对你有帮助,请支持和加关注一下

http://e22a.com/h.05ApkG?cv=AAKHZXVo&sm=339944

https://shop119727980.taobao.com/?spm=0.0.0.0 

  • 打赏
  • 点赞
  • 收藏
  • 分享
共有 人打赏支持
粉丝 48
博文 147
码字总数 58327
评论 (1)
qqli
不错,支持一个
×
EDIAGD
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: