文档章节

JSP踩过的坑

suemi94
 suemi94
发布于 2016/06/20 14:04
字数 793
阅读 39
收藏 0

JSP的ContextPath

刚写JSP的小伙伴基本都会遇到一个问题,就是卧槽我的静态文件为毛找不到啊,因为你首先必须设定ContextPath啊,骚年,下面给出一个例子。

<% String path = request.getContextPath(); 
String title="hehe";
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path; %>

<!-- 在文件的开始处加上上述语句 -->

<link type="text/css" rel="stylesheet" href="<%=basePath %>/static/style/common.css">

JSP的模板继承

JSP2.0的自定义tag使得模板继承成为了可能,下面我们先给出一个例子。

首先模板文件。

<%@tag description="Instructipn Template" language="java" pageEncoding="UTF-8"%>
<%@attribute name="content" fragment="true" %>
<%@attribute name="title" fragment="true" %>
<% String path = request.getContextPath(); 
String title="hehe";
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path; %>
<html>
	<%@include file="/views/widgets/head.html" %> 
	<body>
		<%@include file="/views/widgets/topbar.html" %>
		<%@include file="/views/widgets/navbar.html" %>
		<div id="content">
			<jsp:invoke fragment="content" />
		</div>
		<%@include file="/views/widgets/footer.html" %>
	</body>
</html>

然后给出一个jsp文件继承该模板

<%@page contentType="text/html" language="java" pageEncoding="UTF-8" %>
<%@taglib prefix="t" tagdir="/WEB-INF/tags" %>
<t:instruction>
	<jsp:attribute name="content">
		<h1>呵呵</h1>
	</jsp:attribute>
	<jsp:attribute name="title">
		hehe
	</jsp:attribute>
</t:instruction>

这里面有几点要注意:

  • 使用这种方法做模板继承会导致某些css失效,主要是你的CSS 选择符不能被fragment截断,比如 .instruction .ctn .ctn_left这样的,instruction在模板文件里,而 ctn_left在fragment里,CSS就会失效
  • 在模板文件中必须先定义jsp:attribute之后,才能在具体位置里用jsp:invoke设定
  • 模板文件必须在/WEB-INF/tags目录下,不然会报错,有点奇怪,至今理解不能
  • include的路径可以是相对的,也可以是绝对的,绝对路径的根目录在web-app
  • 注意jsp:include 和 %include的区别,一个是先生成servlet转换为html后再拼接,而后者是先拼接再转换为html

由于静态引入的这个特性,我们还可以在引入文件里指定fragment,真是爽歪歪啊。。。 当你在被引入的文件里访问父文件的变量时,eclipse会善意的帮你打上红X,所以不妨把引入的静态文件使用HTML后缀。

JSP的中文乱码问题

中文乱码的问题确实是比较头疼的,难道JSP这帮人都不鸟中国开发者么?一般的解决方案是在jsp文件头部加上一句

<%@page contentType="text/html charset=UTF-8" language="java" pageEncoding="UTF-8" %>

这样做的话你引入的每个文件都得加上这样几句,实在太特么恶心了。。

所以你可以在你的WEB.XML文件里加上这么一句。

	<jsp-config>
		<jsp-property-group>
			<url-pattern>*.html</url-pattern>
			<page-encoding>UTF-8</page-encoding>
		</jsp-property-group>
		<jsp-property-group>
			<url-pattern>*.jsp</url-pattern>
			<page-encoding>UTF-8</page-encoding>
		</jsp-property-group>
	</jsp-config>

总结

说了这么多,JSP真是个大坑啊。。。话说我觉着前后端分离是历史的必然,jsp也无法重回巅峰了。。。突然有点伤感啊,毕竟毕业季了。。。

© 著作权归作者所有

共有 人打赏支持
suemi94
粉丝 16
博文 21
码字总数 57847
作品 0
海淀
程序员
web服务器中的容器以及工作流程

杂谈:项目到现在,已经有几个Phase过去了,杂乱的js,jsp,杂乱的action,代码已经是面目全非,更别提什么高内聚,低耦合这一说了。现在的工作状态是,要不就是绞尽脑汁地改以前留下来的巨坑...

王大叔爱编程
2014/09/25
0
0
Jsp 和 Servlet 有什么不同?

面试中被问到了 Jsp 和 Servlet 有什么不同?在这里总结分享下。 回答思路先分别进行基本介绍,然后分析说明两者相同点和不同点。 基本介绍 Servlet: Servlet 是一种服务器端的Java应用程序...

几个栗子
08/22
0
0
针对以JSP与Java的编译问题, 平时不会那么在意, 可这个问题很严重

针对于JSP页面编译问题. 好好总结一下今天下午和同事遇见的一个平时不是那么在意的问题,搞了个半天. 针对于JSP页面编译问题. 我们来看看JSP的编译问题:因为JSP在执行第一次后,会被编译成Ser...

陈袁at互联
2014/01/09
0
0
SpringFramework之学习javax.servlet.Servlet

注:在阅读下文前,建议先去查看JCP的Servlet规范。 1.先来看Servlet接口中定义的方法 图1 Servlet接口中定义的方法 Servlet life cycle:每个Servlet都会经历初始化、接收请求、终止服务,分...

汉斯-冯-拉特
07/26
0
0
解决一个新装Eclipse配置好Tomcat后无法启动的问题

如博文摘要,新下载的Eclipse,配置好Tomcat后,启动居然报错: 警告: Unable to load class [javax.xml.parsers.SecuritySupport12] to check against the @HandlesTypes annotation of one......

十月阳光
2014/02/28
0
0

没有更多内容

加载失败,请刷新页面

加载更多

TypeScript基础入门之JSX(二)

转发 TypeScript基础入门之JSX(二) 属性类型检查 键入检查属性的第一步是确定元素属性类型。 内在元素和基于价值的元素之间略有不同。 对于内部元素,它是JSX.IntrinsicElements上的属性类型...

durban
今天
1
0
AVA中CAS-ABA的问题解决方案AtomicStampedReference

了解CAS(Compare-And-Swap) CAS即对比交换,它在保证数据原子性的前提下尽可能的减少了锁的使用,很多编程语言或者系统实现上都大量的使用了CAS。 JAVA中CAS的实现 JAVA中的cas主要使用的是...

码代码的小司机
今天
2
0
Android JNI开发系列(十三) JNI异常处理

JNI 异常处理 JNI异常与JAVA处理异常的区别 JAVA 有异常处理机制,而JNI没有 如果JAVA中异常没有捕获,后面的代码不会执行,JNI会执行 JAVA编译时的异常,是在方法显示的声明了某一个异常,编...

蔡小鹏
今天
2
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

Linux就该这么学
今天
3
0
Qt那些事0.0.7

在帮助文档(Overview - QML and C++ Integration)中随缘遇到一张图,是关于C++对象与QML整合介绍的,值得标记下来,虽然大部分功能也有所涉猎,但是还是留个记号,万一哪天我失忆了还想写Q...

Ev4n
今天
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部