ehcache memcache redis 三大缓存男高音[转]

---恢复内容开始---

  JSP可以认为是加上了Java代码块的HTML文件,常常和CSS,JS结合使用,下面是一个JSP的基本的例子。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="java.lang.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%-- meta是元数据,用于描述网页的信息 --%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%-- title中的信息用于显示网页的标题栏 --%>
<title>HTML示例</title>
<%-- css的内部样式表,p.mystyle1适用于段落标记p,.mystyle2可适用于多种标签--%>
<style type = "text/css">
p.mystyle1{font-size:40px;color:#dd44aa;text-algin:center}
.mystyle2{color:#ff44aa;text-algin:center}
</style>
<%-- css的外部样式表,要能找到m1.css文件 --%>
<link href = "m1.css" rel ="stylesheet" type = "text/css">
<%-- css样式表优先级,内嵌css>内部css>内嵌css --%>
</head>
<%-- body的可选属性有bgcolor="red" text ="yellow" backgroud ="aa.jpg" bgproperties = "fixe" 等--%>
<body>
<%--html对字母大小写是不敏感的 --%>
<%-- 一些基本的html标签 <p>段落标签,<br>换行 ,<hr>水平分割线,<pre>之间的段落会被原样的显示,用于段落结构复杂的情况,<sup>上标,<sub>下标,用于指数形式,font用于字体--%>
<%--下面是展示信息的标签实例,colspan跨几列,rowspan跨几行 --%>
<table border="1">
<tr>
<td>第一行第一列</td>
<td>第一行第二列</td>
</tr>
<tr>
<td>第二行第一列</td>
<td>第二行第二列</td>
</tr>
</table>
<br/>
<%--target的属性有_blank,_self,_parent,_top,用于窗体分割时,指定在哪个窗口显示 --%>
<a href="http://www.baidu.com" target="_blank">在新窗口打开百度</a><br/>
<%--超链接设置锚点,在页面间指定位置跳转,也可以跳到其他网页的指定位置,jdk文档 --%>
<a name = "p1">点击下面的超链接将跳转到这里</a>
<a href = "#p1">跳转到上面锚点的位置</a>
<br/>
<img alt="图片的替代文字,图片不能显示时使用" src="image/addSubgraph.gif" border ="1"/>

<%--图片的src也可以使用src="<%=request.getContextPath()%>\image\addSubgraph.gif",如果是IDE环境,WebContent目录是不需要加上的,否则反而会找不到文件 --%>

<%--下面是收集用户输入的标签实例 --%>
<%--form表单的提交方式由post和get 2种,get会将参数加到URL中,post则不会,更加安全,form是html中重要的标签 --%>
<form action="HtmlLabel.jsp" method="post" name="form" >
用户名:<input type="text" name="name" width="20"><br>
密码 :&emsp;<input type="password" name ="password" width="20"><br>
性别:<input type= "radio" name = "sex" value ="男">男
<input type= "radio" name = "sex" value ="女">女<br>
出生日期: <select name = "birth">
<option value="0">请选择</option>
<option value="1981">1981</option>
<option value="1982">1982</option>
<option value="1983">1983</option>
</select><br>
兴趣:<input type= "checkbox" name = "habit" value = "1">音乐
<input type= "checkbox" name = "habit" value = "2">动漫
<input type= "checkbox" name = "habit" value = "3">电影<br>
<%--input还有一种类型file,可用于上传文件,form要加上属性enctype ="multipart/form-data" --%>
<input type ="submit" value ="确定" onclick="test()">
<input type ="reset" value ="取消">
</form>
<%--解决form的乱码问题,采用post的提交方式,加上request.setCharacterEncoding("UTF-8");--%>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String birth = request.getParameter("birth");
String habit = request.getParameter("habit");
%>
<br><br>
你所输入的信息是:<br>
用户名:<%=name %><br>
密码:<%=password %><br>
性别:<%=sex %><br>
出生日期:<%=birth %><br>
兴趣:<%=habit %><br>
<%-- frameset可以在一个浏览器中显示多个html页面,结合标签a的target属性,在指定窗口显示,类似于swing的Jsplitpanel --%>
<%-- embed标签可以在浏览器中嵌入视频,音频文件,flash等多媒体文件,要求本机已经安装相应的程序 --%>

<!-- javascript简单实例,可以单写成.js的文件,使用src =""进行引用 -->
<!-- javascript中的内置对象包括:window,navigator,screen,histroy,location,document -->
<!-- window对象可用于打开新的窗口等操作 -->
<!-- navigator对象可用于读取浏览器的信息 -->
<!-- screen对象可用于读取屏幕的高,宽等 -->
<!-- histroy对象可用于控制浏览器的前进后退等 -->
<!-- location对象可用于控制页面的跳转 -->
<!-- document对象就是整个html对象 -->
<script language="javascript">
function test(){
var name = document.forms[0].name.value;
if(name.length>5){
alert("max length is 5");
}
}
</script>
<!-- window对象示例,window name不能有空格,否则无法显示 -->
<script language="javascript">
var win;
function openwin(){
win = window.open("http://www.baidu.com", "newwindow", "width=300,height=200");
}
</script>
<br><input type="button" name = "createwin" value ="创建窗口" onclick="openwin()">
<!-- window对象示例,用于显示对话框,alert,window.confirm,window.prompt -->
<script language="javascript">
function confrimDialog(){
if(window.confirm("确定提交吗?"))
alert("已提交");
else
alert("已取消");
}
</script>
<br><input type="button" name = "confrimDialog" value ="提交" onclick="confrimDialog()">
<!-- 利用window动态地创建网页 -->
<script language="javascript">
function createActiveHtml(){
var content = "<html><head><title>动态创建的网页</title></head>";
content += "<body>这个网页是动态生成的</body></html>";

var newwindow = window.open();
newwindow.document.write(content);
newwindow.document.close();
}
</script>
<br><input type="button" name = "createActiveHtml" value ="动态创建网页" onclick="createActiveHtml()">
<!-- location对象控制跳转 -->
<script language="javascript">
function location(){
window.location.href = "http://hao123.com";
}
</script>
<br><input type="button" name = "location" value ="跳转页面" onclick="location()">

<%--下面是css简单示例,级联样式表 --%>
<%-- css又分为内嵌样式表,内部样式表,外部样式表,下面都是内嵌样式表,用于标签内,style --%>
<%-- 使用css内部样式表 --%>
<p class = "mystyle1">该文本将使用内部样式表</p>
<%--div和span用于css的渲染,div是块级别渲染,默认会独占一行。span是行内渲染,可以和其他的元素同在一行 。这也不是绝对的,如下--%>
<%--<div style="display:inline">inline</div>可以和其他的元素同在一行 --%>
<%--<span style="display:block">block</span>会独占一行 --%>
<%--下面文字缩进2个字符还未实现 --%>
<div align="left">字体属性设置</div>
<span style="font-family:幼园;font-style:italic;font-weight:bold;font-size:10pt">幼园,斜体,黑体</span><br>
<div align="left">背景颜色设置</div>
<span style="color:red;background-color: yellow;text-align:left;text-ident =2em">字体红色,背景黄色,首行缩进2字符</span><br>
<%--设置鼠标的显示样式 --%>
<div style="font-family:宋体;font-size:10pt">
<span style="cursor: hand">手形状</span>
<span style="cursor: move">移动</span>
<span style="cursor: ne-resize">反方向</span>
<span style="cursor: wait;">等待</span>
<span style="cursor: help;">求助</span>
<span style="cursor: text;">文本</span>
<span style="cursor: crosshair;">十字</span>
<span style="cursor: s-resize;">箭头朝下</span>
</div>
<%--css的定位提供了除table之外的另一种定位方法.postion的属性有absolute,relative,static,应该如下的使用嵌套关系 --%>
<div style="background:#FFFFFF; position:relative; width:100px;height:30px;">
111
<div style="background:#FFFFFF;position:absolute;width:100px;height:20px;left:10px;">
222
</div>
</div>
<%--javscript+css实现下拉菜单 --%>
<script language="javascript">
function showmenu(m){
if(m == "menu1"){
document.getElementById("menu1").style.visibility="visible";
document.getElementById(‘menu2‘).style.visibility="hidden";
document.getElementById(‘menu3‘).style.visibility="hidden";
}else if(m == "menu2"){
document.getElementById("menu2").style.visibility="visible";
document.getElementById(‘menu1‘).style.visibility="hidden";
document.getElementById(‘menu3‘).style.visibility="hidden";
}else if(m == "menu3"){
document.getElementById("menu3").style.visibility="visible";
document.getElementById(‘menu1‘).style.visibility="hidden";
document.getElementById(‘menu2‘).style.visibility="hidden";
}
}
function hidemenu(){
document.getElementById(‘menu1‘).style.visibility="hidden";
document.getElementById(‘menu2‘).style.visibility="hidden";
document.getElementById(‘menu3‘).style.visibility="hidden";
}
</script>
<%--位置外侧使用relative,内侧用absolute,absolute是相对于外侧的方框而定的 --%>
<div style ="position:relative;width:220px;height:100px;">
<table onmouseout="hidemenu()">
<tr >
<td onmousemove="showmenu(‘menu1‘)" >菜单一&nbsp;&nbsp;</td>
<td onmousemove="showmenu(‘menu2‘)" >菜单二&nbsp;&nbsp;</td>
<td onmousemove="showmenu(‘menu3‘)" >菜单三&nbsp;&nbsp;</td>
</tr>
</table>
<div id ="menu1" onmousemove="showmenu(‘menu1‘)" onmouseout="hidemenu()" style ="position:absolute;width:100px;height:50px;left:0px;visibility:hidden">
<span>子菜单一</span><br>
<span>子菜单二</span><br>
<span>子菜单三</span><br>
</div>
<div id ="menu2" onmousemove="showmenu(‘menu2‘)" onmouseout="hidemenu()" style ="position:absolute;left:10;top:40;left:70px;visibility:hidden">
<span>子菜单一</span><br>
<span>子菜单二</span><br>
<span>子菜单三</span><br>
</div>
<div id ="menu3" onmousemove="showmenu(‘menu3‘)" onmouseout="hidemenu()" style ="position:absolute;left:20;top:40;left:140px;visibility:hidden">
<span>子菜单一</span><br>
<span>子菜单二</span><br>
<span>子菜单三</span><br>
</div>
</div>

<form action="forward.jsp" method="post">
用户名:<input type="text" name="username" width="20"><br>
密码 :&emsp;<input type="password" name ="userpassword" width="20"><br>
<input type="submit" value="提交">
</form>

<!-- jsp中的include用于引入,分为静态引入和动态引入,下面的方式为动态引入,也可以使用<%@include file ="text/textOutput.txt" %>是静态引入-->
<!-- 静态引入不会去检查引用页面的内容是否发生变化,动态引入则会去检查。静态引用在编译期执行,动态引用在执行期执行 -->
<jsp:include page="text/textOutput.txt" flush="true" ></jsp:include><br>
<jsp:include page="index.jsp" flush="true" ></jsp:include><br>
<!-- forward和redirect的区别。forward只是把请求转到新页面,URL中显示还是自身。redirect是把request和response都转到新的页面,URL中显示的是新页面 -->
<!-- request.getRequestDispatcher("resultJsp.jsp").forward(request, response); -->
<!-- response.sendRedirect("resultJsp.jsp"); -->
<!-- forward中可以加上param参数 -->
<!-- <jsp:forward page="index.jsp">
<jsp:param value="note" name="note"/>
</jsp:forward>-->

实现图片下载功能

<a href="downImage.jsp?fileName=haha.jpg&filePath=/image/addSubgraph.gif"><img src="image/addSubgraph.gif"/></a>
</body>
</html>

downImage.jsp的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="ISO-8859-1"%>
<!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">
<title>Insert title here</title>
</head>
<body>
	<%
	    String filePath =request.getParameter("filePath");
	    String fileName = request.getParameter("fileName");
	    if(fileName!=null&&filePath!=null){
	         response.setContentType("application/x-download");
	         response.addHeader("Content-Disposition","attachment;filename=" + java.net.URLEncoder.encode(fileName,"UTF-8"));
	         try{
	             out.clear();
	             out = pageContext.pushBody();
	         }catch(Throwable e){
	              e.printStackTrace();
	       }
	      try{
	         RequestDispatcher dis = application.getRequestDispatcher(filePath);
	         dis.forward(request,response);
	   }catch(Throwable e){
	    e.printStackTrace();
	     }finally{
	    response.flushBuffer();
	   }
	   }
	%>  

</body>
</html>

  

---恢复内容结束---

原文链接:http://blog.csdn.net/jationxiaozi/article/details/8509732

---恢复内容开始---

  JSP可以认为是加上了Java代码块的HTML文件,常常和CSS,JS结合使用,下面是一个JSP的基本的例子。

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ page import="java.util.*" %>
<%@ page import="java.lang.*" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<%-- meta是元数据,用于描述网页的信息 --%>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<%-- title中的信息用于显示网页的标题栏 --%>
<title>HTML示例</title>
<%-- css的内部样式表,p.mystyle1适用于段落标记p,.mystyle2可适用于多种标签--%>
<style type = "text/css">
p.mystyle1{font-size:40px;color:#dd44aa;text-algin:center}
.mystyle2{color:#ff44aa;text-algin:center}
</style>
<%-- css的外部样式表,要能找到m1.css文件 --%>
<link href = "m1.css" rel ="stylesheet" type = "text/css">
<%-- css样式表优先级,内嵌css>内部css>内嵌css --%>
</head>
<%-- body的可选属性有bgcolor="red" text ="yellow" backgroud ="aa.jpg" bgproperties = "fixe" 等--%>
<body>
<%--html对字母大小写是不敏感的 --%>
<%-- 一些基本的html标签 <p>段落标签,<br>换行 ,<hr>水平分割线,<pre>之间的段落会被原样的显示,用于段落结构复杂的情况,<sup>上标,<sub>下标,用于指数形式,font用于字体--%>
<%--下面是展示信息的标签实例,colspan跨几列,rowspan跨几行 --%>
<table border="1">
<tr>
<td>第一行第一列</td>
<td>第一行第二列</td>
</tr>
<tr>
<td>第二行第一列</td>
<td>第二行第二列</td>
</tr>
</table>
<br/>
<%--target的属性有_blank,_self,_parent,_top,用于窗体分割时,指定在哪个窗口显示 --%>
<a href="http://www.baidu.com" target="_blank">在新窗口打开百度</a><br/>
<%--超链接设置锚点,在页面间指定位置跳转,也可以跳到其他网页的指定位置,jdk文档 --%>
<a name = "p1">点击下面的超链接将跳转到这里</a>
<a href = "#p1">跳转到上面锚点的位置</a>
<br/>
<img alt="图片的替代文字,图片不能显示时使用" src="image/addSubgraph.gif" border ="1"/>

<%--图片的src也可以使用src="<%=request.getContextPath()%>\image\addSubgraph.gif",如果是IDE环境,WebContent目录是不需要加上的,否则反而会找不到文件 --%>

<%--下面是收集用户输入的标签实例 --%>
<%--form表单的提交方式由post和get 2种,get会将参数加到URL中,post则不会,更加安全,form是html中重要的标签 --%>
<form action="HtmlLabel.jsp" method="post" name="form" >
用户名:<input type="text" name="name" width="20"><br>
密码 :&emsp;<input type="password" name ="password" width="20"><br>
性别:<input type= "radio" name = "sex" value ="男">男
<input type= "radio" name = "sex" value ="女">女<br>
出生日期: <select name = "birth">
<option value="0">请选择</option>
<option value="1981">1981</option>
<option value="1982">1982</option>
<option value="1983">1983</option>
</select><br>
兴趣:<input type= "checkbox" name = "habit" value = "1">音乐
<input type= "checkbox" name = "habit" value = "2">动漫
<input type= "checkbox" name = "habit" value = "3">电影<br>
<%--input还有一种类型file,可用于上传文件,form要加上属性enctype ="multipart/form-data" --%>
<input type ="submit" value ="确定" onclick="test()">
<input type ="reset" value ="取消">
</form>
<%--解决form的乱码问题,采用post的提交方式,加上request.setCharacterEncoding("UTF-8");--%>
<%
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
String password = request.getParameter("password");
String sex = request.getParameter("sex");
String birth = request.getParameter("birth");
String habit = request.getParameter("habit");
%>
<br><br>
你所输入的信息是:<br>
用户名:<%=name %><br>
密码:<%=password %><br>
性别:<%=sex %><br>
出生日期:<%=birth %><br>
兴趣:<%=habit %><br>
<%-- frameset可以在一个浏览器中显示多个html页面,结合标签a的target属性,在指定窗口显示,类似于swing的Jsplitpanel --%>
<%-- embed标签可以在浏览器中嵌入视频,音频文件,flash等多媒体文件,要求本机已经安装相应的程序 --%>

<!-- javascript简单实例,可以单写成.js的文件,使用src =""进行引用 -->
<!-- javascript中的内置对象包括:window,navigator,screen,histroy,location,document -->
<!-- window对象可用于打开新的窗口等操作 -->
<!-- navigator对象可用于读取浏览器的信息 -->
<!-- screen对象可用于读取屏幕的高,宽等 -->
<!-- histroy对象可用于控制浏览器的前进后退等 -->
<!-- location对象可用于控制页面的跳转 -->
<!-- document对象就是整个html对象 -->
<script language="javascript">
function test(){
var name = document.forms[0].name.value;
if(name.length>5){
alert("max length is 5");
}
}
</script>
<!-- window对象示例,window name不能有空格,否则无法显示 -->
<script language="javascript">
var win;
function openwin(){
win = window.open("http://www.baidu.com", "newwindow", "width=300,height=200");
}
</script>
<br><input type="button" name = "createwin" value ="创建窗口" onclick="openwin()">
<!-- window对象示例,用于显示对话框,alert,window.confirm,window.prompt -->
<script language="javascript">
function confrimDialog(){
if(window.confirm("确定提交吗?"))
alert("已提交");
else
alert("已取消");
}
</script>
<br><input type="button" name = "confrimDialog" value ="提交" onclick="confrimDialog()">
<!-- 利用window动态地创建网页 -->
<script language="javascript">
function createActiveHtml(){
var content = "<html><head><title>动态创建的网页</title></head>";
content += "<body>这个网页是动态生成的</body></html>";

var newwindow = window.open();
newwindow.document.write(content);
newwindow.document.close();
}
</script>
<br><input type="button" name = "createActiveHtml" value ="动态创建网页" onclick="createActiveHtml()">
<!-- location对象控制跳转 -->
<script language="javascript">
function location(){
window.location.href = "http://hao123.com";
}
</script>
<br><input type="button" name = "location" value ="跳转页面" onclick="location()">

<%--下面是css简单示例,级联样式表 --%>
<%-- css又分为内嵌样式表,内部样式表,外部样式表,下面都是内嵌样式表,用于标签内,style --%>
<%-- 使用css内部样式表 --%>
<p class = "mystyle1">该文本将使用内部样式表</p>
<%--div和span用于css的渲染,div是块级别渲染,默认会独占一行。span是行内渲染,可以和其他的元素同在一行 。这也不是绝对的,如下--%>
<%--<div style="display:inline">inline</div>可以和其他的元素同在一行 --%>
<%--<span style="display:block">block</span>会独占一行 --%>
<%--下面文字缩进2个字符还未实现 --%>
<div align="left">字体属性设置</div>
<span style="font-family:幼园;font-style:italic;font-weight:bold;font-size:10pt">幼园,斜体,黑体</span><br>
<div align="left">背景颜色设置</div>
<span style="color:red;background-color: yellow;text-align:left;text-ident =2em">字体红色,背景黄色,首行缩进2字符</span><br>
<%--设置鼠标的显示样式 --%>
<div style="font-family:宋体;font-size:10pt">
<span style="cursor: hand">手形状</span>
<span style="cursor: move">移动</span>
<span style="cursor: ne-resize">反方向</span>
<span style="cursor: wait;">等待</span>
<span style="cursor: help;">求助</span>
<span style="cursor: text;">文本</span>
<span style="cursor: crosshair;">十字</span>
<span style="cursor: s-resize;">箭头朝下</span>
</div>
<%--css的定位提供了除table之外的另一种定位方法.postion的属性有absolute,relative,static,应该如下的使用嵌套关系 --%>
<div style="background:#FFFFFF; position:relative; width:100px;height:30px;">
111
<div style="background:#FFFFFF;position:absolute;width:100px;height:20px;left:10px;">
222
</div>
</div>
<%--javscript+css实现下拉菜单 --%>
<script language="javascript">
function showmenu(m){
if(m == "menu1"){
document.getElementById("menu1").style.visibility="visible";
document.getElementById(‘menu2‘).style.visibility="hidden";
document.getElementById(‘menu3‘).style.visibility="hidden";
}else if(m == "menu2"){
document.getElementById("menu2").style.visibility="visible";
document.getElementById(‘menu1‘).style.visibility="hidden";
document.getElementById(‘menu3‘).style.visibility="hidden";
}else if(m == "menu3"){
document.getElementById("menu3").style.visibility="visible";
document.getElementById(‘menu1‘).style.visibility="hidden";
document.getElementById(‘menu2‘).style.visibility="hidden";
}
}
function hidemenu(){
document.getElementById(‘menu1‘).style.visibility="hidden";
document.getElementById(‘menu2‘).style.visibility="hidden";
document.getElementById(‘menu3‘).style.visibility="hidden";
}
</script>
<%--位置外侧使用relative,内侧用absolute,absolute是相对于外侧的方框而定的 --%>
<div style ="position:relative;width:220px;height:100px;">
<table onmouseout="hidemenu()">
<tr >
<td onmousemove="showmenu(‘menu1‘)" >菜单一&nbsp;&nbsp;</td>
<td onmousemove="showmenu(‘menu2‘)" >菜单二&nbsp;&nbsp;</td>
<td onmousemove="showmenu(‘menu3‘)" >菜单三&nbsp;&nbsp;</td>
</tr>
</table>
<div id ="menu1" onmousemove="showmenu(‘menu1‘)" onmouseout="hidemenu()" style ="position:absolute;width:100px;height:50px;left:0px;visibility:hidden">
<span>子菜单一</span><br>
<span>子菜单二</span><br>
<span>子菜单三</span><br>
</div>
<div id ="menu2" onmousemove="showmenu(‘menu2‘)" onmouseout="hidemenu()" style ="position:absolute;left:10;top:40;left:70px;visibility:hidden">
<span>子菜单一</span><br>
<span>子菜单二</span><br>
<span>子菜单三</span><br>
</div>
<div id ="menu3" onmousemove="showmenu(‘menu3‘)" onmouseout="hidemenu()" style ="position:absolute;left:20;top:40;left:140px;visibility:hidden">
<span>子菜单一</span><br>
<span>子菜单二</span><br>
<span>子菜单三</span><br>
</div>
</div>

<form action="forward.jsp" method="post">
用户名:<input type="text" name="username" width="20"><br>
密码 :&emsp;<input type="password" name ="userpassword" width="20"><br>
<input type="submit" value="提交">
</form>

<!-- jsp中的include用于引入,分为静态引入和动态引入,下面的方式为动态引入,也可以使用<%@include file ="text/textOutput.txt" %>是静态引入-->
<!-- 静态引入不会去检查引用页面的内容是否发生变化,动态引入则会去检查。静态引用在编译期执行,动态引用在执行期执行 -->
<jsp:include page="text/textOutput.txt" flush="true" ></jsp:include><br>
<jsp:include page="index.jsp" flush="true" ></jsp:include><br>
<!-- forward和redirect的区别。forward只是把请求转到新页面,URL中显示还是自身。redirect是把request和response都转到新的页面,URL中显示的是新页面 -->
<!-- request.getRequestDispatcher("resultJsp.jsp").forward(request, response); -->
<!-- response.sendRedirect("resultJsp.jsp"); -->
<!-- forward中可以加上param参数 -->
<!-- <jsp:forward page="index.jsp">
<jsp:param value="note" name="note"/>
</jsp:forward>-->

实现图片下载功能

<a href="downImage.jsp?fileName=haha.jpg&filePath=/image/addSubgraph.gif"><img src="image/addSubgraph.gif"/></a>
</body>
</html>

downImage.jsp的代码如下:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="ISO-8859-1"%>
<!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">
<title>Insert title here</title>
</head>
<body>
	<%
	    String filePath =request.getParameter("filePath");
	    String fileName = request.getParameter("fileName");
	    if(fileName!=null&&filePath!=null){
	         response.setContentType("application/x-download");
	         response.addHeader("Content-Disposition","attachment;filename=" + java.net.URLEncoder.encode(fileName,"UTF-8"));
	         try{
	             out.clear();
	             out = pageContext.pushBody();
	         }catch(Throwable e){
	              e.printStackTrace();
	       }
	      try{
	         RequestDispatcher dis = application.getRequestDispatcher(filePath);
	         dis.forward(request,response);
	   }catch(Throwable e){
	    e.printStackTrace();
	     }finally{
	    response.flushBuffer();
	   }
	   }
	%>  

</body>
</html>

  

---恢复内容结束---

原文链接:http://blog.csdn.net/jationxiaozi/article/details/8509732

时间: 2024-11-05 22:04:34

ehcache memcache redis 三大缓存男高音[转]的相关文章

ehcache memcache redis 三大缓存男高音_转

ehcache memcache redis 三大缓存男高音 2013-01-16 15:43 10500人阅读 评论(2) 收藏 举报 最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!  Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍

ehcache memcache redis 三大缓存男高音

最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!  Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍后会详细介绍),所以被用于大型复杂分布式web application的各个节点中. 什么特色? 1.  够快 Ehcache的发行有一段

(Mark=转)ehcache memcache redis

Ehcache 在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍后会详细介绍),所以被用于大型复杂分布式web application的各个节点中. 什么特色? 1.  够快 Ehcache的发行有一段时长了,经过几年的努力和不计其数的性能测试,Ehcache终被设计于large, high concurrency

ehcache、memcache、redis三大缓存比较

最近项目组有用到这三个缓存,去各自的官方看了下,觉得还真的各有千秋!今天特意归纳下各个缓存的优缺点,仅供参考!  Ehcache 在Java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍后会详细介绍),所以被用于大型复杂分布式web application的各个节点中. 什么特色? 1.  够快 Ehcache的发行有一段

ehcache memcache redis 区别

之前用过redis 和 memcache ,没有ehcache 的开发经验,最近也查阅不少文档和博客,写一些总结,也有不少内容总结与诸多博客中的博主总结:  Ehcache EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider,所以被用于大型复杂分布式web application的各个节点中.Ehcache是一种广泛使用的开源Java分布式缓存.主要面向通用缓存,Java EE和轻量级容器.它具有内存和磁盘存储,缓存加载

ehcache memcache redis 差异&lt;转载&gt;

在java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍后会详细介绍),所以被用于大型复杂分布式web application的各个节点中. 什么特色? 1.  够快 Ehcache的发行有一段时长了,经过几年的努力和不计其数的性能测试,Ehcache终被设计于large, high concurrency systems

Ehcache Memcache Redis 初步(二)

Ehcache 在Java项目广泛的使用.它是一个开源的.设计于提高在数据从RDBMS中取出来的高花费.高延迟采取的一种缓存方案.正因为Ehcache具有健壮性(基于java开发).被认证(具有apache 2.0  license).充满特色(稍后会详细介绍),所以被用于大型复杂分布式web application的各个节点中. 什么特色? 1.  够快 Ehcache的发行有一段时长了,经过几年的努力和不计其数的性能测试,Ehcache终被设计于large, high concurrency

(转)Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析 数据库表数据量极大(千万条),要求让服务器更加快速地响应用户的需求. 二.解决方案: 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 (这里仅从数据缓存方面考虑,当然,后期可以采用Hadoop+HBase+Hive等分布式存储分析平台) 三.主流解Cache和数据库对比: 上述技术基本上代表了当今在数据存储方面所有的实现方案,其中主要涉及到了普通关系型数据库(MySQL/PostgreSQL),NoSQL数据

Memcache,Redis,MongoDB(数据缓存系统)方案对比与分析

mongodb和memcached不是一个范畴内的东西.mongodb是文档型的非关系型数据库,其优势在于查询功能比较强大,能存储海量数据.mongodb和memcached不存在谁替换谁的问题. 和memcached更为接近的是redis.它们都是内存型数据库,数据保存在内存中,通过tcp直接存取,优势是速度快,并发高,缺点是数据类型有限,查询功能不强,一般用作缓存.在我们团队的项目中,一开始用的是memcached,后来用redis替代. 相比memcached: 1.redis具有持久化机