去掉JSP页面中的头部空行解决方案

在J2EE平台下开发JSP相对于freemarker真的功能太强大了,但是jsp tag却需要引入到你的项目中,就像是

<%@ page language=”java” pageEncoding=”utf-8″%>
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core”%>
<%@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt”%>
<%@ taglib prefix=”fn” uri=”http://java.sun.com/jsp/jstl/functions”%>

这些标签,当然还有更多的引用,好像我们看不出来有什么问题,但是从SEO同事反映,网站查看源码空行太多!

eg:

jsp

 

像这样的空行是你导入一个<%@ %>就会增加一个,好吧,让你看到我引入多少个标签库了-_-#

理论上来说搜索引擎应该不会那么嫌弃这个样子吧,再说从页面的展示也没有什么差异,无非查看源码的时候有些不爽,尤其对于强迫症的Coder来说就有点坐立不安了,正好这段事件折腾Freemaker,不用引入什么标签,页面没有那么多空行,多少有些爽,但是freemarker相比jsp原生来说,总觉得不那么爽快(这里不比较了,大家可以自己研究)。

我觉的JSP如果就这样的话,那强迫症都不要活了 ……

还好福音来了:) 哈哈哈,来点赞!

抽空研究了一下,其实很简单,解决起来也分不通级别,这里提供三种方法吧,聪明的coder很快就知道选哪种鸟 o(∩_∩)o

1、页面级别

在每个你需要处理的jsp页面同样引用

<%@ page trimDirectiveWhitespaces=”true” %>

jsp1

 

2、项目级别

在你的web.xml 下增加配置:

<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<trim-directive-whitespaces>true</trim-directive-whitespaces>
</jsp-property-group>
</jsp-config>

jsp2

 

3、容器级别

找到你tomcat 目录下 \conf\web.xml文件,在jsp servlet增加参数

<init-param>
<param-name>trimSpaces</param-name>
<param-value>true</param-value>
</init-param>

jsp3

 

然后重启你的容器在看看效果吧,

jspc

这下爽了吧,强迫症的福音啊,哈哈哈,如果你要说你的修改了没有变化,让我先凸^-^凸你一下,你有没有清理work 下面的缓存呢~

 

 

EL表达式中的fn函数

EL表达式省去了很多复杂的步骤,这里针对fn函数做个整理.

页面头部先做声明:
<%@ taglib prefix=”fn” uri=”http://java.sun.com/jsp/jstl/functions” %>
下面是JSTL中自带的方法列表以及其描述 :
fn:contains 判断字符串是否包含另外一个字符串

<c:if test=”${fn:contains(name, searchString)}”>
fn:containsIgnoreCase 判断字符串是否包含另外一个字符串(大小写无关)

<c:if test=”${fn:containsIgnoreCase(name, searchString)}”>
fn:endsWith 判断字符串是否以另外字符串结束

<c:if test=”${fn:endsWith(filename, “.txt”)}”>
fn:escapeXml 把一些字符转成XML表示,

例如 <字符应该转为&lt; ${fn:escapeXml(param:info)}
fn:indexOf 子字符串在母字符串中出现的位置

${fn:indexOf(name, “-“)}
fn:join 将数组中的数据联合成一个新字符串,并使用指定字符格开

${fn:join(array, “;”)}
fn:length 获取字符串的长度,或者数组的大小

${fn:length(shoppingCart.products)}
fn:replace 替换字符串中指定的字符

${fn:replace(text, “-“, “&#149;”)}
fn:split 把字符串按照指定字符切分

${fn:split(customerNames, “;”)}
fn:startsWith 判断字符串是否以某个子串开始

<c:if test=”${fn:startsWith(product.id, “100-“)}”>
fn:substring 获取子串

${fn:substring(zip, 6, -1)}
fn:substringAfter 获取从某个字符所在位置开始的子串
${fn:substringAfter(zip, “-“)}
fn:substringBefore 获取从开始到某个字符所在位置的子串

${fn:substringBefore(zip, “-“)}
fn:toLowerCase 转为小写

${fn.toLowerCase(product.name)}
fn:toUpperCase 转为大写字符

${fn.UpperCase(product.name)}
fn:trim 去除字符串前后的空格

${fn.trim(name)}

描述

fn:contains(string, substring)
如果参数string中包含参数substring,返回true

fn:containsIgnoreCase(string, substring)
如果参数string中包含参数substring(忽略大小写),返回true

fn:endsWith(string, suffix)
如果参数 string 以参数suffix结尾,返回true

fn:escapeXml(string)
将有特殊意义的XML (和HTML)转换为对应的XML character entity code,并返回

fn:indexOf(string, substring)
返回参数substring在参数string中第一次出现的位置

fn:join(array, separator)
将一个给定的数组array用给定的间隔符separator串在一起,组成一个新的字符串并返回。

fn:length(item)
返回参数item中包含元素的数量。参数Item类型是数组、collection或者String。如果是String类型,返回值是String中的字符数。

fn:replace(string, before, after)
返回一个String对象。用参数after字符串替换参数string中所有出现参数before字符串的地方,并返回替换后的结果

fn:split(string, separator)
返回一个数组,以参数separator 为分割符分割参数string,分割后的每一部分就是数组的一个元素

fn:startsWith(string, prefix)
如果参数string以参数prefix开头,返回true

fn:substring(string, begin, end)
返回参数string部分字符串, 从参数begin开始到参数end位置,包括end位置的字符

fn:substringAfter(string, substring)
返回参数substring在参数string中后面的那一部分字符串

fn:substringBefore(string, substring)
返回参数substring在参数string中前面的那一部分字符串

fn:toLowerCase(string)
将参数string所有的字符变为小写,并将其返回

fn:toUpperCase(string)
将参数string所有的字符变为大写,并将其返回

fn:trim(string)
去除参数string 首尾的空格,并将其返回

jsp filter过滤编码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package com.tmsp.cms.filter;
/**
 * 字符编码器
 */
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;
 
public class CharacterEncoding implements Filter {
 
	/**
	 * Constructor of the object.
	 */
	public CharacterEncoding() {
		super();
	}
 
	/**
	 * Initialization of the servlet. <br />
	 * 
	 * @throws ServletException
	 *             if an error occurs
	 */
	public void init() throws ServletException {
		// Put your code here
	}
 
	public void doFilter(ServletRequest arg0, ServletResponse arg1,
			FilterChain arg2) throws IOException, ServletException {
		// TODO Auto-generated method stub
		arg0.setCharacterEncoding("utf-8");
		arg2.doFilter(arg0, arg1);
	}
 
	public void init(FilterConfig arg0) throws ServletException {
		// TODO Auto-generated method stub
 
	}
 
	public void destroy() {
		// TODO Auto-generated method stub
	}
 
}

web.xml 配置

1
2
3
4
5
6
7
<filter>
		</filter><filter -name>CharacterEncoding</filter>
		<filter -class>com.tmsp.cms.filter.CharacterEncoding</filter>
 
	<filter -mapping>
		</filter><filter -name>CharacterEncoding</filter>
		<url -pattern>/*</url>

使用JSTL标签格式化时间与货币形式

习惯了Struts标签给我们带来的便捷,然而往往越是简单的操作越是让人产生依赖,在我们使用JSP的时候往往无所是从。
今天在JSP下需要格式化我的Timestamp,利用JSP的标签。
引入标签FMT

< %@ taglib prefix=”fmt” uri=”http://java.sun.com/jsp/jstl/fmt” %>

在你需要格式化的地方使用即可

<fmt:formatNumber value=”<%=stype.getPrice()%>” pattern=”##.##” minFractionDigits=”2″/>
<fmt:formatDate value=”<%=user.getC_reg_time() %>” pattern=”yyyy-MM-dd HH:mm:ss”/>