仅供参考-接上文

springmvc 

1.设置Log4jConfigListener日志监听(可以为开发调试、发布后运行的意外调试、等)

  在src/main/resources目录下新建log4j.properties文件(可以在别的目录),这些配置内容网上有很多,

# This is the configuring for logging displayed in the Application Server
log4j.rootCategory=error, stdout, logfile
#log4j.rootCategory=debug, stdout, logfile
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %5p (%F:%L) - %m%n
log4j.logger.org.springframework=WARN
log4j.logger.org.mybatis.SQL=DEBUG
log4j.logger.org.springframework.transaction=WARN
log4j.logger.org.springframework.orm=WARN
log4j.logger.com.google.code.yanf4j=WARN
log4j.logger.net.rubyeye.xmemcached=WARN
log4j.logger.org.mybatis.spring=WARN
log4j.logger.org.apache.activemq=WARN
log4j.logger.providers.XmlConfigurationProvider=WARN
#log4j.logger.org.springframework.web.servlet.DispatcherServlet=WARN
#log4j.logger.org.acegisecurity=INFO
#log4j.logger.org.springframework.web.servlet.handler=INFO
#### First appender writes to console
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout log4j.appender.stdout.layout.ConversionPattern=%-4p,%t,%d{MM-dd HH:mm:ss.SSS},%c{2}.%M:%L - %m%n log4j.appender.logfile=org.apache.log4j.RollingFileAppender
log4j.appender.logfile.File=${catalina.base}/logs/ecms.log
log4j.appender.logfile.MaxFileSize=1024KB
# Keep 9 backup files.
log4j.appender.logfile.MaxBackupIndex=9
# Pattern to output: date priority [category] - message
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d %t %p [%c] - %m%n log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout

  在web.xml文件中配置一下

<!-- 日志  -->
<listener>
<listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>
</listener>
<context-param>
<param-name>log4jConfigLocation</param-name>
<!-- 这里对应的配置文件目录 -->
<param-value>classpath:log4j.properties</param-value>
</context-param>
<context-param>
<param-name>webAppRootKey</param-name>
<param-value>webName.root</param-value>
</context-param>
<!-- 开一条watchdog线程每6秒扫描一下配置文件的变化 -->
<context-param>
<param-name>log4jRefreshInterval</param-name>
<param-value>60000</param-value>
</context-param>

  这样配置好了,可以启动一下工程登入,看看控制台是否输出sql等

2.过滤器filter(设置路径,方便前台获取)在com.springmvc.util.action包下新建SetCharacterEncodingFilter类实现Filter

package com.springmvc.util.action;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse; /**
* 过滤器
* @author
*
*/
public class SetCharacterEncodingFilter implements Filter{ @Override
public void destroy() { }
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
FilterChain arg2) throws IOException, ServletException {
String path = arg0.getServletContext().getContextPath();
String basePath = arg0.getScheme()+"://"+arg0.getServerName()+":"+arg0.getServerPort()+path+"/";
arg0.setAttribute("basePath", basePath);//设置url路径
arg2.doFilter(arg0, arg1);//通过
} @Override
public void init(FilterConfig arg0) throws ServletException {
} }

SetCharacterEncodingFilter

  可以在实现方法中设置很多内容,例如:日志、权限、安全等内容,在doFilter方法中,获取工程路径,设置一下在页面方便获取

  在web.xml设置,之前搭建项目是使用过filter,定义编码

<!--配置过滤器-->
<filter>
<!--过滤器名称,随便定义-->
<filter-name>UrlFilter</filter-name>
<!--filter-class指向自定义的过滤器,完整的包名+类名-->
<filter-class>
com.springmvc.util.action.SetCharacterEncodingFilter
</filter-class>
<!--过滤器中的默认参数,默认的字符编码是UTF-8-->
<init-param>
<param-name>defaultEncoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!--filter和filter-mapping是成对出现的-->
<filter-mapping>
<!--过滤器名称,一定要和上面的一样,-->
<filter-name>UrlFilter</filter-name>
<!--表示拦截所有的请求-->
<url-pattern>/*</url-pattern>
</filter-mapping>

  这样可以在页面获取绝对路径了

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!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">
<jsp:include page="/WEB-INF/util/bootstrap.jsp"></jsp:include>
<script type="text/javascript" src="${basePath }static/view/js/login.js"> </script>
<title>登入</title>
<style type="text/css">
.tab-content{
position:absolute;
height:200px;
width:300px;
margin-top:180px;
margin-left:50%;
left:-150px;
}
.login-input{
margin :20px 0px;
width : 300px;
}
</style>
</head>
<body>
<div class="tab-content">
<ul class="nav nav-tabs">
<li class="active"><a href="#login" aria-controls="login" role="tab" data-toggle="tab" aria-controls="login">登录</a></li>
<li><a href="#register" aria-controls="register" role="tab" data-toggle="tab" aria-controls="register">注册</a></li>
</ul>
<!-- Tab Log in -->
<form class="tab-pane fade in active" id="login" onsubmit="return false;">
<c:if test="${!empty error }">
<c:out value="${error }"/>
</c:if>
<input id="login-email" name="email" class="form-control login-input" placeholder="邮箱">
<input type="password" name="password" id="login-password" class="form-control login-input" placeholder="密码">
<div class="checkbox">
<label class="f-white" style="color:white;">
<input type="checkbox" id="login-remember"> 记住我
</label>
<a class="pull-right" href="javascript:void(0);" style="color:#33B74B;">忘记密码</a>
</div>
<button class="btn btn-lg btn-primary btn-block" onclick="loginFunction.loginSubmit();">登录</button>
</form>
<!-- Tab Register -->
<form class="tab-pane fade" id="register" onsubmit="return false;">
<input id="login-email" class="form-control login-input" placeholder="邮箱">
<input type="password" class="form-control login-input" placeholder="密码">
<button class="btn btn-lg btn-primary btn-block">注册</button>
</form>
</div>
<div id="banner" style="background-image:url(${basePath }static/images/banner-image.jpg);height:575px;width:100%;">
</div>
</body>
</html>

页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%-- <%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> --%>
<!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">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1"> <link href="${basePath }static/bootstrap/css/bootstrap.min.css" rel="stylesheet"> <script type="text/javascript" src="${basePath }static/js/jquery.min.js"></script>
<script type="text/javascript" src="${basePath }static/bootstrap/js/bootstrap.min.js"></script>
<script type="text/javascript">
var basePath = "${basePath}";
</script>
</head>

页面

var loginFunction={
//登入
loginSubmit : function(){
var email = $("#login-email").val();//邮箱
var password = $("#login-password").val();//密码
if(email =="") {
alert("请输入邮箱");
return;
}
if(password =="") {
alert("请输入密码");
return;
}
//$("#login").attr("action",basePath+"index.htm");
//$("#login").submit();
$.ajax({
url: basePath+"101/loginCheck.htm",
type:"post",
data:{email : email,password:password},//密码得加密
dataType:"json",
success: function(data){
if(data.status == "success"){
window.location.href = basePath+"101/index.htm";
}else{
alert("用户名或密码错误");
}
},
error : function(data) { }
}); }
};
$(function(){
});

js

  可以在公共页面这样设置,在引用js中可以使用

<script type="text/javascript">
var basePath = "${basePath}";
</script>

3.根据项目需求,设置一些公共类,可以设置一些类继承,这样相对来说就规范和方便一些

  在com.springmvc.util.model包下简单设置两个类HttpStatus.java、Response.java

package com.springmvc.util.model;

public class HttpStatus {

    public final static String HTTP_SUCCESS = "success"; // 操作成功
public final static String HTTP_ERROR = "error"; // 操作失败
public final static String HTTP_500 = "500"; // 服务器内部错误
}

HttpStatus.java

package com.springmvc.util.model;

import java.util.HashMap;
import java.util.Map; public class Response {
private String status;
private String message;
private Map<String, Object> parameter; public void addAttribute(String key, Object value) {
if (parameter == null) {
parameter = new HashMap<String, Object>();
}
parameter.put(key, value);
} public void setStatusAndMessage(String status, String message) {
this.status = status;
this.message = message;
} public void setSuccess(String message) {
this.status = HttpStatus.HTTP_SUCCESS;
this.message = message;
} public String getStatus() {
return status;
} public void setStatus(String status) {
this.status = status;
} public String getMessage() {
return message;
} public void setMessage(String message) {
this.message = message;
} public Map<String, Object> getParameter() {
return parameter;
} public void setParameter(Map<String, Object> parameter) {
this.parameter = parameter;
} }

Response.java

  在com.springmvc.util.action包中新建BaseAction.java类,所有action都可以继承BaseAction.java,在这里设置request、response、session等

  在这个类中使用@ModelAttribute注解

package com.springmvc.util.action;

import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession; import org.apache.commons.collections.CollectionUtils;
import org.springframework.util.StringUtils;
import org.springframework.web.bind.annotation.ModelAttribute; import com.springmvc.util.model.Response; public class BaseAction{ public Response responseUtil;
private HttpServletRequest request;
private HttpServletResponse response;
private HttpSession session;
/**
* 验证一个值是否为空值
*
* @param str
* @return
*/
public boolean isEmpty(Object str) {
return StringUtils.isEmpty(str);
} public boolean isEmpty(List<?> list) {
if (list == null)
return true;
if (CollectionUtils.isEmpty(list))
return true;
return false;
} @ModelAttribute
public void setReqAndRes(HttpServletRequest request, HttpServletResponse response){
this.request = request;
this.response = response;
this.session = request.getSession();
}
public HttpServletRequest getRequest() {
return this.request;
}
public HttpServletResponse getResponse() {
return this.response;
} public HttpSession getSession() {
return this.session;
}
}
package com.springmvc.action;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.ResponseBody; import com.springmvc.model.User;
import com.springmvc.service.UserService;
import com.springmvc.util.action.BaseAction;
import com.springmvc.util.model.HttpStatus;
import com.springmvc.util.model.Response; @Controller
@RequestMapping(value = "/101")
public class IndexAction extends BaseAction { @Autowired
private UserService userService; /**
* 首页
*
* @return
*/
@RequestMapping(value = "/index.htm")
public String index() {
return "index";
} /**
* 登入页面
*
* @return
*/
@RequestMapping(value = "/login.htm")
public String login() {
return "login";
} /**
* 登入验证
*
* @return
*/
@RequestMapping(value = "/loginCheck.htm", method = RequestMethod.POST)
@ResponseBody
public Response loginCheck(User user) {
responseUtil = new Response();
List<User> list = userService.getUser(user);
if (list != null && list.size() > 0) {
responseUtil.setStatusAndMessage(HttpStatus.HTTP_SUCCESS, "验证成功");
}
return responseUtil;
} }

个人笔记

java springmvc Log4j filter等(稍微完善一下项目)的更多相关文章

  1. Java中log4j的使用

    前言 距离上一篇文章又过去好长时间了,这段时间一直忙于工作,已经从net彻底转向Java了.工作也慢慢的步入正轨了,自己独自完成了一个小项目,不过工作中遇到了一些问题,还是得到了同学和同事的帮助.本来 ...

  2. 【Java】-NO.11.Java.1.Log4j.1.001-【Log4j Manual】-

    1.0.0 Summary Tittle:[Java]-NO.11.Java.1.Log4j.1.001-[Log4j2 Manual]- Style:Java Series:Log4j Since: ...

  3. SpringMVC 过滤器Filter使用解析

    SpringMVC框架是一个成熟的优秀java web开发框架,学习研究框架设计有助于我们更好的理解和掌握spring MVC,设计和写出更符合的结构和代码. 本节主要是研读SpringMVC框架中的 ...

  4. Java安全之Filter权限绕过

    Java安全之Filter权限绕过 0x00 前言 在一些需要挖掘一些无条件RCE中,大部分类似于一些系统大部分地方都做了权限控制的,而这时候想要利用权限绕过就显得格外重要.在此来学习一波权限绕过的思 ...

  5. Java 中的 Filter 过滤器详解

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  6. Java Web之Filter

    Filter被称为过滤器或者拦截器,基本功能就是对调用servler过程的拦截,在servlet进行响应和处理前后实现一些特殊功能.其实,Filter过滤器就是一个实现了javax.servlet.F ...

  7. Java中的Filter过滤器

    Filter简介 Filter也称之为过滤器,它是Servlet技术中最实用的技术,Web开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件 ...

  8. Scala Java Error: value filter is not a member of *

    有时在Scala中调用Java的库,Java库会返回某些Java的集合或类型,必须经过一些转换才能正常使用. 否则有可能在编译的过程遇到这个错误. 错误字符串 下面是错误的主要信息. Scala Ja ...

  9. java之log4j的配置

    java之log4j的配置 log4j有很多的优点,用起来很方便,就是配置起来有些麻烦,下面我介绍一下log4j的配置方法. log4j是用来记录日志的. 软件的运行过程离不开日志.日志主要用来记录系 ...

随机推荐

  1. [MEAN Stack] First API -- 3. Select by ID with Mongoose and Express

    Mongoose allows you to easily select resources by ID from your MongoDB. This is an important aspect ...

  2. iOS 2D绘图详解(Quartz 2D)之Bitmap

    什么是Bitmap? Bitmap叫做位图,每一个像素点由1-32bit组成.每个像素点包括多个颜色组件和一个Alpha组件(例如:RGBA). iOS中指出如下格式的图片 JPEG, GIF, PN ...

  3. iOS开发——多线程OC篇&多线程总结

    多线程总结 //1.NSThread /** 优点:NSThread 比其他两个轻量级. 缺点:需要自己管理线程的生命周期,线程同步,线程同步时对数据的加锁会有一定的系统开销. cocoa给我提供了两 ...

  4. 表ADT

    表一般不用简单数组来实现,通常将其实现为链表.在链表中要不要使用表头则属于个人兴趣问题.在下面的例程中我们都使用表头. 按照C的约定,作为类型的List(表)和Position(位置)以及函数的原型都 ...

  5. C++类设计2(Class with pointer members)

    二 Class with pointer members(Class String) 1. 测试代码(使用效果) int main() { String s1(), String s2("h ...

  6. ubuntu14.04编译mono源码(有坑...)

     从github上下载了mono的源码,然后打算编译了.百度了一下教程,我去...居然没有教程.换bing搜索一下,我去...还是没有.关键字换一下:how to build mono on linu ...

  7. Aggressive cows 二分不仅仅是查找

    Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 7083   Accepted: 3522 Description Farme ...

  8. Java Map接口

    Map接口映射唯一键的值.一个关键是,要使用在日后检索值对象. 给定一个键和一个值,可以在一个Map对象存储的值.后的值被存储时,可以使用它的键检索. 抛出一个NoSuchElementExcepti ...

  9. Oracle基础 shutdown和startup

    一.shutdown命令:SHUTDOWN有四个参数:NORMAL.TRANSACTIONAL.IMMEDIATE.ABORT.缺省不带任何参数时表示是NORMAL. SHUTDOWN NORMAL: ...

  10. 转: 视频相关的协议族介绍(rtsp, hls, rtmp)

    转自: http://www.zhihu.com/question/20621558   作者:杨华链接:http://www.zhihu.com/question/20621558/answer/1 ...