jsp&servlet学习笔记
1、路径引用问题
一个css、jsp、html、或者javascript文件从从一个工程复制到另一工程,如果引用的时候使用的时相对路径,看似没有错误,但是却一直引用不进来,这时候要使用绝对路径,这样才能将原来的工程名改成现在的工程;
2.el处理form表单数据问题
我们常用: |
<meta http-equiv="Content-Type" content="text/html; charset=GB2312"> </head>
<body>
<form name="Example" method="post" action="Form.jsp">
<p> 姓名:<input type="text" name="Name" size="15" maxlength="15"></p>
<p> 密码:<input type="password" name="Password" size="15" maxlength="15"></p>
<p> 性别:<input type="radio" name="Sex" value="Male" checked>男
<input type="radio" name="Sex" value="Female">女</p>
<p> 年龄:
<select name="Old">
<option value="10">10 ~ 20</option>
<option value="20" selected>21 ~ 30</option>
<option value="30">31 ~ 40</option>
<option value="40">41 ~ 65</option>
</select>
</p>
<p> 兴趣:
<input type="checkbox" name="Habit" value="Read">
看书
<input type="checkbox" name="Habit" value="Game">
电玩
<input type="checkbox" name="Habit" value="Travel">
旅游
<input type="checkbox" name="Habit" value="Music">
听音乐
<input type="checkbox" name="Habit" value="Tv">
看电视</p>
<p>
<input type="submit" value="提交">
<input type="reset" value="清除">
</p>
</form>
</body>
</html>
二、处理表单的JSP文件
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<html>
<head>
<title>CH9 - Form.jsp</title>
</head>
<body>
<h2>使用 EL、JSTL 处理表单数据</h2>
<fmt:requestEncoding value="GB2312" />
姓名:<c:out value="${param.Name}" default="Nothing" /> <br>
密码:<c:out value=" ${param.Password} " default="Nothing" /><br>
性别:<c:if test="${param.Sex == 'Male'}">男<br></c:if>
<c:if test="${param.Sex == 'Female'}">女<br></c:if>
年龄:<c:choose>
<c:when test="${param.Old == 10}">10 ~ 20<br></c:when>
<c:when test="${param.Old == 20}">21 ~ 30<br></c:when>
<c:when test="${param.Old == 30}">31 ~ 40<br></c:when>
<c:otherwise>41 ~ 65<br></c:otherwise>
</c:choose>
兴趣:<c:forEach items="${paramValues.Habit}" var="habit">
<c:choose>
<c:when test="${habit == 'Read'}"><li>看书1</li></c:when>
<c:when test="${habit == 'Game'}"><li>电玩</li></c:when>
<c:when test="${habit == 'Travel'}"><li>旅游</li></c:when>
<c:when test="${habit == 'Music'}"><li>听音乐</li></c:when>
<c:when test="${habit == 'Tv'}"><li>看电视</li></c:when>
</c:choose>
</c:forEach>
</body>
</html>
2、乱码问题:
Get:要设置好request 和 response的setCharacterEncoding(“utf-8”);
除此之外,还要在server.xml 的 connector标签添加一行 URIEncoding = “utf-8”;
3、String->JsonObject
package package_1;
import java.lang.StringBuffer;
import java.awt.Window.Type;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.BufferedReader;
import java.net.URL;
import net.sf.json.JSONObject;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
import com.google.gson.JsonParser;
import com.google.gson.JsonElement;
public class ChinaWeatherAPI {
public static void main(String[] args){
String jsonString = "{\"field1\":\"value1\",\"field2\":\"value2\"}";
JsonParser parser = new JsonParser();
JsonObject jo = (JsonObject)parser.parse(jsonString);
JsonElement ele = jo.get("field1");
String value1 = ele.getAsString();
}
}
4、html标签到后台的形式
4.1 Select : 选中的option的text , 如果被选中的option的value属性有值,那么就是value
4.2 checkbox : 获取方式必须是getParameterValues , 得出是一个数组,装载着所有打勾的checkbox
5.JSP学习笔记
将 一些常用的JSP动作标记写下来,虽然自己大致都知道如何使用,但对于其中的一些细节可能并非清楚!
<jsp:param>
jsp:param操作被用来以“名-值”对的形式为其他标签提供附加信息。写一般与<jsp:forward>,<jsp:include>,<jsp:plug>,一起使用。
它的使用方式如下:
<jsp:param name="paramName" value="paramValue"/>
<jsp:include>
该操作允许在请求的时间内在现成的JSP页面里面包含静态或动态的资源。被访问的对象对JSP write对象的访问权,并且它不能设置头或者Cookie.如果页面输出是缓冲的,那么缓冲区的刷新要俦于包含的刷新。因此它在运行效率上比<%@ include file="include.html"%>要低,但它可以动态增加内容,使用例子如下:
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<html>
<body>
<%@ include file="static.html" %>
<%--只是把文件包含进来--%>
<a href="two.jsp">goto two--></a><br>
this examples show include works
<jsp:include page="two.jsp" flush="true">
<jsp:param name="a1" value="<%=request.getParameter("name")%>" />
<jsp:param name="a2" value="<%=request.getParameter("password")%>" />
</jsp:include>
</body>
</html>
<html>
<body>
<form method=post action="jsp_include.jsp">
<table>
<tr><td>please input your name:</td></tr>
<tr><td><input type=text name=name></td></tr>
<tr><td>input you password:</td></tr>
<tr><td><input type=text name=password></td></tr>
<tr><td><input type=submit value=login></td></tr>
</table>
</body>
</html>
<%@ page contentType="text/html; charset=gb2312" language="java" %>
<%-- 上面一行声明需要加上 虽然在主页面已经加入,若不加则会是乱码--%>
举例说明include的工作原理:
<br>
this is a1=<%=request.getParameter("a1")%>
<br>
this is a2=<%=request.getParameter("a2")%>
<br>
<% out.println("hello from two.jsp");%>
<jsp:forword>
该操作允许将请求转发到另一个JSP,Servlet或者静态资源文件。一旦遇上此标记即会停止执行当前的JSP,转而执行被转发的资源。
使用示例如下:
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<body>
<form method=get action=checklogin.jsp>
<table>
<tr><td>输入用户名:</td>
<td><input type=text name=name value=<%=request.getParameter("name")%>></td>
</tr>
<tr><td>输入密码:</td>
<td><input type=password name=password></td>
</tr>
<tr colspan=2><td><input type=submit value=login></td></tr>
</table>
</body>
</html>
<%@ page contentType="text/html; charset=gb2312" %>
<html>
<body>
<%--进行登陆检查--%>
<%
String name=request.getParameter("name");
// String password=request.getParameter("password");
// if验证通过,forward-->sucess.jsp
//else forward-->login.jsp
if(name.equals("hellking"))
{
%>
<jsp:forward page="sucess.jsp">
<jsp:param name="user" value="<%=name%>"/>
</jsp:forward>
<%
}//if
else
{
%>
<jsp:forward page="login.jsp">
<jsp:param name="user" value="<%=name%>"/>
</jsp:forward>
<%}%>
</body>
</html>
<%@ page contentType="text/html; charset=gb2312" %>
登录成功
<BR>
欢迎你,
<%=request.getParameter("name") %>
<jsp:setProperty>
此操作与useBean协作,用来设置Bean的简单属性和索引属性。<jsp:setProperty>标签使用Bean的setXXX()方法。利用它设置属性多种方法。
Bean的自省(introspection)用来发现出现的是哪些属性和它们的名字是什么,这些属性是简单的还是索引的,它们有什么类型等,用以下方法使用setProperty:
<jsp:setProperty name="beanName" property="*"/>
或
<jsp:setProperty name="beanName" property="propertyName" param="parameterName"/>
或
<jsp:setProperty name="beanName" property="propertyName"/>
或
<jsp:setProperty name="beanName" property="propertyName" value="propertyValue"/>
name="beanName"这是个必须属性,其值为Bean的名字,是在这之前用<jsp:useBean>的引入名称。
在所有使用没有 value属性的方式时要特别注意value的引用属性名一定要与Bean中定义的属性名严格一致!否则可能达不到预期效果!
另外从客户端传到器上的参数字符串型,这些字符串为了能够在Bean中匹配就需要罪魁成对应的类型。下面列出转换方法:
boolean java.lang.Boolean.valueOf(String).booleanValue()
Boolean java.lang.Boolean.valueOf(String)
byte java.lang.Byte.valueOf(String).byteValue();
Byte java.lang.Byte.valueOf(String)
char java.lang.Character.valueOf(String).charValue();
Character java.lang.Character.valueOf(String)
double java.lang.Double.valueOf(String).doubleValue()
Double java.lang.Double.valueOf(String)
int java.lang.Integer.valueOf(String).intValue()
Integer java.lang.Integer.valueOf(String)
float java.lang.Float.valueOf(String).floatValue()
Float java.lang.Float.valueOf(String)
long java.lang.Long.valueOf(String).longValue()
Long java.lang.Long.valueOf(String)
<jsp:getProperty>
此操作是对<jsp:setProperty>操作的补充,它用来访问一个Bean的属性。它访问的属性值将它转化成一个String,然后发送到输出流中。如果属性是一个对象,将调用toString()方法,它的使用如下:
<jsp:getProperty name="beanName" property="propertyName">
它也同样与jsp:useBean一起使用。,同时它也有一些限制,如:不能使用它来检索一个已经被索引了的属性。
<jsp:useBean>
此标签用于在JSP页面中创建一个Bean实例,并指定它的名字及作用范围。它保证对象在标签指定的范围内可以使用。
它的使用例子如下:
<jsp:useBean id="shopcar" scope="session" class="sessopn.Carts"/>
<jsp:setProperty name="shopcart" property="*"/>
<jsp:useBean id="checking" scope="session" class="bank.Checking">
<jsp:setProperty name="checking" property="balance" value="0.0"/>
</jsp:useBean>
scope的取值可以是page/request/session/application 范围依次递增!
可以分别使用
//page 中直接使用checking即可!
request.getAttribute("checking")
session.getValue("checking")
application.getAttribute("checking")
另外除了以上属性useBean还有以下属性
class="className"
这是Bean的类路径和类名。这个class不能是抽象的,必须有一个公用的,无参数的构造器。
BeanName="beanName" type="typeName"
使用instantiate方法从一个class中实例化一个Bean,同时还可以指定 Bean的类型
type="typeName"
type可以是一个类本身,也可以是一个类的父类,或者是一个类的接口。如果没有使用class和BeanName指定type,Bean将不会被 实例化
另外不能同时使用 class和BeanName。BeanName的是Bean的名字,它的形式为"a.b.c"。
下面是一个具体的程序示例:
用户信息JavaBean TestBean.java
用户注册界面中的表单register.html
信息注册代码register.jsp
<jsp:plugin>
此操作是用来产生客户端浏览器的特别标签(Object或者embed),可以使用它来插入Applet或者JavaBean。
一般来说<jsp:plugin>元素指定的对象是Applet还是Bean,同样也会指定class的名字,另外还会指定将从哪里下载这个Java插件。
<jsp:plugin type=applet code="efly.testMyApplet.class" codebase=".">
<jsp:params>
<jsp:param name="aParameterName" value="aParameterNameValue"/>
</jsp:params>
<jsp:fallback>
<p>Unable to load applet.</p>
</jsp:fallback>
</jsp:plugin>
解释:
1:type="bean/applet"
2:code="classFileName" 插件执行JAVA类文件的名称。在名称中必须加上扩展名,且此文件必须放在用 codebase属性的目录下。
3:codebase="classFileDirectoryName"这包含插件将运行的JAVA类的目录或指向这个目录的路径。默认为JSP文件的当前路径。
4:name="instanceName" 这是Bean或Applet的实例的名称。使得被同一个JSP文件调用的Bean或Applet之间的通讯成为可能。
5:archive="URIToArchive,……"这是以逗号分隔的路径名列表,是那些用于codebase指定的目录下的类装载器预装载的存档文件所在的路径名。
6:align="botton/top/middle/left/right"图形,对象,Applet的排列方式。
7:height="displayPixels" width="displayPixels" 显示的高宽
8:hspace="leftRightPixels" vspace="topBottomPixels" 左右 上下留下空间大小
9:jreversion="JREVersionNumber | 1.1" 这是Applet或Bean运行时所需的JRE版本
10:nspluginurl="URLToPlugin" 这是Netscape Navigator用户能够使用的JRE下载地址
11:iepluginurl="URLToPlugin" 这是Internet Explorer用户能够使用的JRE下载地址
12:<jsp:params>表示需要向Applet或Bean传送的参数或值
13:<jsp:fallback>回滚,下载失败则显示里面的内容,此标记只能在<jsp:plugin>内部使用
下面做一个具体的例子来结束这篇笔记!
package eflylab;
import javax.swing.*;
import java.awt.*;
/**
* @author fengyan
* @date 2007-01-15 23:36
*/
public class MyApplet extends JApplet {
String img;
public void paint(Graphics g)
{
Image image=getImage(getCodeBase(),img);
g.drawImage(image,0,0,400,400,this);//绘制一张图片
g.setColor(Color.blue);
g.setFont(new Font("宋体",2,24));
g.drawString("使用JSP:PLUGIN在JSP中添加applet",40,170);//绘制一个字符串
g.setFont(new Font("NewsRoman",2,10));
g.setColor(Color.pink);
g.drawString(new java.util.Date().toString() ,10,190);//绘制一个字符串
}
public void init()
{
img=getParameter("image");
}
}
<html>
<head><title>jsp:plugin 演示</title></head>
<body>
<hr><br>
<jsp:plugin type="applet" code="eflylab.MyApplet"
codebase="." align="center" width="400" height="400">
<jsp:params>
<jsp:param name="image" value="pic.jpg"/>
</jsp:params>
<jsp:fallback>在插入applet时产生错误 </jsp:fallback>
</jsp:plugin>
</body>
</html>
http://www.cnblogs.com/eflylab/archive/2007/01/16/621241.html
2. EL使用
分类: JaveEE2010-03-31 16:26 1594人阅读 评论(0) 收藏 举报
applicationsessionstringjsphtmlencoding
概述
EL是在web前端经常会用到的技术,EL经常和JSTL一起使用,但是EL又可以单独使用,全称是Expression Language,它原本是JSTL 1.0为方便存取数据所定义的语言,是一种新的语言,有它自己的语法,只要支持Servlet2.4或者JSP2.0的容器,都可以在JSP网页中直接使用EL,不需导入任何其他的包。
优势
在JSP中,经常会打印一些变量的内容,这些变量可以是从某个范围中变量,比如page、request、session、application范围。例,打印str变量,下面三种方法都可以:
<%out.println(str)%>,这样会使JSP页面里面包含JAVA代码;
<%=str%>只能从本地获得,如果要从session里面获取必须是<%=session.getAttribute()%>;
${str}则可以从request、session、application范围中获得。
EL语法
EL的语法很简单,最大的特点就是使用上很方便。所有的EL都是以 ${ 为起始、以 } 为结尾的。
例如:${sessionScope.user.sex},表示从session的范围中,取得用户的性别。如果使用JSP Scriptlet的写法如下:
User user = (User)session.getAttribute(“user”);
String sex = user.getSex();
out.print(“sex”);
使用这种方法就会使JSP中包含JAVA代码,而且很麻烦。
EL提供 . 和 [ ] 两种运算符来存取数据。下面两种所代表的意思是一样的。
${sessionScope.user.sex}等于${sessionScope.user[“sex”]}
但是使用 [ ] 的范围更广,因为 [ ] 中还可以是变量,比如:
String str = “sex”;
${sessionScope.user[str]}
. 和 [ ] 的混合使用,获取集合中元素的值,例如:
${sessionScope.shoppingCart[0].price}表示结果为shoppingCart中第一项物品的价格。
几个重要的EL隐含对象
pageScope,取得page范围的属性名称所对应的值。
requestScope,取得request范围的属性名称所对应的值。
sessionScope,取得session范围的属性名称所对应的值。
applicationScope,取得application范围的属性名称所对应的值。
param,如同ServletReqest.getParameter(String name)。
cookie,如同HttpServletRequest.getCookie()。
initParam,如同ServletContext.getInitParameter(String name)。
获取request、session、application中的值
新建项目ELPro,新建页面PageA.jsp、PageB.jsp
PageA.jsp
[xhtml] view plaincopy
1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
2 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
3 <html>
4 <head>
5 <title>My JSP 'PageA.jsp' starting page</title>
6 </head>
7 <body>
8 <%
9 application.setAttribute("msgA", "Welcome Application!");//在application内放一些内容
10 session.setAttribute("msgS", "Welcome Session!");//在session内放一些内容
11 request.setAttribute("msgR", "Welcome Request!");//在request内放一些内容
12 %>
13 <a href="PageB.jsp" mce_href="PageB.jsp">进入PageB页面</a>
14 </body>
15 </html>
PageB.jsp
[xhtml] view plaincopy
16 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>
17 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
18 <html>
19 <head>
20 <title>My JSP 'PageB.jsp' starting page</title>
21 </head>
22 <body>
23 application中的内容:${applicationScope.msgA }<br/>
24 session中的内容:${sessionScope.msgS }<br/>
25 request中的内容:${request.msgR }<br/>
26 </body>
27 </html>
运行页面,在PageB.jsp显示如下
application中的内容:Welcome Application!
session中的内容:Welcome Session!
request中的内容:
因为PageA.jsp到PageB.jsp是使用连接,地址栏上的地址也发生了改变,所以是一个从定向跳转,此时request中内容丢失了,所以request中的内容没有显示,如果使用forward跳转,request中的内容将不会丢失。
上面使用了EL表达式来获取各种范围中的数据内容。使用的方式是${applicationScope.msgA},也可以省略Scope部分,直接写成${msgA},省略方式写成${msgA},系统会自动去application、session、request、page四种范围寻找msgA,所以这种省略的写法只能用在pageScope、requestScope、sessionScope、applicationScope四种范围内。其他不能省略,例如不能把${param.A}省略成${A}。
假如applicationScope和sessonScope中都有msg呢,用省略的方式${msgA}得到的是什么呢?
[xhtml] view plaincopy
28 application.setAttribute("msg", "Welcome Application!");
29 session.setAttribute("msg", "Welcome Session!");
${msg}将得到的是结果是:Welcome Session!
因为系统自动寻找的步骤是:pageScope、requestScope、sessionScope、applicationScope,所以先找到session中的msg信息。
上面的例子中放入session等范围的都是一些简单的数据,当然也可以放入复制的数据,例如javabean、集合等。
创建Customer.java的javabean
[java] view plaincopy
30 package po;
31 public class Customer {
32 private String account;
33 private String password;
34
35 public Customer() {
36
37 }
38
39 public Customer(String account, String password) {
40 this.account = account;
41 this.password = password;
42 }
43
44 public String getAccount() {
45 return account;
46 }
47
48 public void setAccount(String account) {
49 this.account = account;
50 }
51
52 public String getPassword() {
53 return password;
54 }
55
56 public void setPassword(String password) {
57 this.password = password;
58 }
59 }
在PageA.jsp中生成该javabean
[xhtml] view plaincopy
60 Customer cus = new Customer("000", "000");
61 session.setAttribute("cus", cus);
在PageB.jsp中打印该Customer javabean的值,添加如下代码。
[xhtml] view plaincopy
62 customer的值为:${cus.account }, ${cus.password }
运行结果如下
customer的值为:000, 000
更加复制的情况,在PageA.jsp中加入如下代码
[xhtml] view plaincopy
63 ArrayList cuses = new ArrayList();
64 cuses.add(new Customer("111", "111"));
65 cuses.add(new Customer("222", "222"));
66 cuses.add(new Customer("333", "333"));
67 session.setAttribute("customers", cuses);
在PageB.jsp中打印customer信息,添加代码如下
[xhtml] view plaincopy
68 所有的customer如下<br/>
69 第一个:${customers[0].account }, ${customers[0].password }<br/>
70 第二个:${customers[1].account }, ${customers[1].password }<br/>
71 第三个:${customers[2].account }, ${customers[2].password }<br/>
运行结果如下
第一个:111, 111第二个:222, 222第三个:333, 333
获取param中的值
使用param,就是使用url传递过来的参数,例如在PageA.jsp中的连接使用如下
[xhtml] view plaincopy
72 <a href="PageB.jsp?A=1&B=2" mce_href="PageB.jsp?A=1&B=2">进入PageB页面</a>
在PageB.jsp中得到A和B的值的代码如下
[xhtml] view plaincopy
73 参数A的值是:${param.A }<br/>
74 参数B的值是:${param.B }<br/>
运行结果如下
参数A的值是:1参数B的值是:2
获取cookie中的值
在PageA.jsp中添加如下代码
[xhtml] view plaincopy
75 response.addCookie(new Cookie("username", "skycloud"));
在PageB.jsp中获取cookie的值,代码如下
[xhtml] view plaincopy
76 cookie username的值是:${cookie.username.value }
运行结果如下
cookie username的值是:skycloud
如果直接使用${cookie.username}将得到一个对象,运行结果如下
cookie username的值是:javax.servlet.http.Cookie@2cc2d4
获取initParam的值
有些时候需要在web.xml中进行一些初始化的工作,例如在web.xml做如下初始化
[xhtml] view plaincopy
77 <context-param>
78 <param-name>encoding</param-name>
79 <param-value>gb2312</param-value>
80 </context-param>
如果要在PageB.jsp中获取这个初始化参数,在PageB.jsp中添加如下代码
[xhtml] view plaincopy
81 初始化参数encoding是:${initParam.encoding }
运行结果如下
初始化参数encoding是:gb2312
http://blog.csdn.net/wang_zhou_jian/article/details/5437951
3. CKEditor上传图片解决方案
言归正传,对于上传CKEditor已经做好了,我们只要准备个功能,接收CKEditor提交过来的文件就可以了,所以呢实现的思路是:
82 准备一下JSP上传文件的JAR包:commons-fileupload.jar和commons-io.jar
83 编写一个JSP用于接收上传的文件(这里除上传图片功能外,需调用一个核心JS语句)
84 编写一个JSP用于浏览文件(这里除上传图片功能外,需调用一个核心JS语句)
85 修改CKEditor的config.js,将上传文件和浏览文件的JSP配置进去
说明一下,之所以采用JSP没有使用Servlet,那是因为JSP简单啊,这样可以降低CKEditor对项目的侵入性啊。下面看代码啦:
用于接收上传的文件的JSP:Java代码
86 <%@page import="java.io.File"%>
87 <%@page import="java.util.UUID"%>
88 <%@page import="org.apache.commons.fileupload.FileItem"%>
89 <%@page import="java.util.List"%>
90 <%@page import="org.apache.commons.fileupload.disk.DiskFileItemFactory"%>
91 <%@page import="org.apache.commons.fileupload.FileItemFactory"%>
92 <%@page import="org.apache.commons.fileupload.servlet.ServletFileUpload"%>
93 <%@ page language="java" contentType="text/html; charset=GB18030" pageEncoding="GB18030"%>
94 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
95 <html>
96 <head>
97 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
98 <meta http-equiv="pragma" content="no-cache">
99 <meta http-equiv="cache-control" content="no-cache">
100 <meta http-equiv="expires" content="0">
101 <title>JSP上传文件</title>
102 </head>
103 <body>
104 <%
105 String path = request.getContextPath() + "/";
106 if(ServletFileUpload.isMultipartContent(request)){
107 String type = "";
108 if(request.getParameter("type") != null)//获取文件分类
109 type = request.getParameter("type").toLowerCase() + "/";
110 String callback = request.getParameter("CKEditorFuncNum");//获取回调JS的函数Num
111 FileItemFactory factory = new DiskFileItemFactory();
112 ServletFileUpload servletFileUpload = new ServletFileUpload(factory);
113 servletFileUpload.setHeaderEncoding("UTF-8");//解决文件名乱码的问题
114 List<FileItem> fileItemsList = servletFileUpload.parseRequest(request);
115 for (FileItem item : fileItemsList) {
116 if (!item.isFormField()) {
117 String fileName = item.getName();
118 fileName = "file" + System.currentTimeMillis() + fileName.substring(fileName.lastIndexOf("."));
119 //定义文件路径,根据你的文件夹结构,可能需要做修改
120 String clientPath = "ckeditor/uploader/upload/" + type + fileName;
121
122 //保存文件到服务器上
123 File file = new File(request.getSession().getServletContext().getRealPath(clientPath));
124 if (!file.getParentFile().exists()) {
125 file.getParentFile().mkdirs();
126 }
127 item.write(file);
128
129 //打印一段JS,调用parent页面的CKEditor的函数,传递函数编号和上传后文件的路径;这句很重要,成败在此一句
130 out.println("<script type='text/javascript'>window.parent.CKEDITOR.tools.callFunction("+callback+",'"+path+clientPath+"')</script>");
131 break;
132 }
133 }
134 }
135 %>
136 </body>
137 </html>
用于浏览文件的JSP:
Java代码
138 <%@page import="java.io.File"%>
139 <%@ page language="java" contentType="text/html; charset=GB18030"
140 pageEncoding="GB18030"%>
141 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
142 <html>
143 <head>
144 <meta http-equiv="Content-Type" content="text/html; charset=GB18030">
145 <meta http-equiv="pragma" content="no-cache">
146 <meta http-equiv="cache-control" content="no-cache">
147 <meta http-equiv="expires" content="0">
148 <title>图片浏览</title>
149 <script type="text/javascript">
150 //这段函数是重点,不然不能和CKEditor互动了
151 function funCallback(funcNum,fileUrl){
152 var parentWindow = ( window.parent == window ) ? window.opener : window.parent;
153 parentWindow.CKEDITOR.tools.callFunction(funcNum, fileUrl);
154 window.close();
155 }
156 </script>
157 </head>
158 <body>
159 <%
160 String path = request.getContextPath() + "/";
161 String type = "";
162 if(request.getParameter("type") != null)//获取文件分类
163 type = request.getParameter("type").toLowerCase() + "/";
164 String clientPath = "ckeditor/uploader/upload/" + type;
165 File root = new File(request.getSession().getServletContext().getRealPath(clientPath));
166 if(!root.exists()){
167 root.mkdirs();
168 }
169 String callback = request.getParameter("CKEditorFuncNum");
170 File[] files = root.listFiles();
171 if(files.length > 0){
172 for(File file:files ) {
173 String src = path + clientPath + file.getName();
174 out.println("<img width='110px' height='70px' src='" + src + "' alt='" + file.getName() + "' onclick="funCallback("+callback+",'"+ src +"')">");
175 }
176 }else{
177 out.println("<h3>未检测到资源。</h3>");
178 }
179 %>
180 </body>
181 </html>
修改后的CKEditor的config.js:
Js代码
182 CKEDITOR.editorConfig = function( config )
183 {
184 config.language = 'zh-cn';
185 config.filebrowserBrowseUrl = 'ckeditor/uploader/browse.jsp';
186 config.filebrowserImageBrowseUrl = 'ckeditor/uploader/browse.jsp?type=Images';
187 config.filebrowserFlashBrowseUrl = 'ckeditor/uploader/browse.jsp?type=Flashs';
188 config.filebrowserUploadUrl = 'ckeditor/uploader/upload.jsp';
189 config.filebrowserImageUploadUrl = 'ckeditor/uploader/upload.jsp?type=Images';
190 config.filebrowserFlashUploadUrl = 'ckeditor/uploader/upload.jsp?type=Flashs';
191 config.filebrowserWindowWidth = '640';
192 config.filebrowserWindowHeight = '480';
193 }
OK,修改完毕。简单吧,其实上传和浏览文件很简单(上面只是一个演示,代码仅供参考),要点是要调用一下CKEDITOR.tools.callFunction方法。
http://blog.sina.com.cn/s/blog_6a0eedb601017q67.html
jsp&servlet学习笔记的更多相关文章
- JSP&Servlet学习笔记----第1/2章
HTML(HyperText Markup Language):超文本标记语言 HTTP(HyperText Transfer Protocol):超文本传输协议 URL(Uniform Resour ...
- JSP&Servlet学习笔记----第3章
Web容器是JSP/Servlet唯一认识的HTTP服务器. HTTP是基于请求/响应的无状态通信协议. 流程: 1.请求来到HTTP服务器 2.HTTP服务器将请求转交给Web容器 3.Web容器创 ...
- 【JSP&Servlet学习笔记】5.Servlet进阶AIP、过滤器与监听器
Servlet接口上,与生命周期及请求服务相关的三个方法是init().service()与destory()方法.当Web容器加载Servlet类并实例化之后,会生成ServletConfig对象并 ...
- JSP Servlet学习笔记——使用fileupload上传文件
关键代码如下: index.jsp <body> <center> <h3>文件上传</h3> <font color="red&quo ...
- JSP&Servlet学习笔记----第6章
JSP与Servlet是一体两面的关系. JSP最终还是被编译为Servlet. <%@page contentType="text/html;charset=UTF-8" ...
- JSP&Servlet学习笔记----第5章
Servlet进阶API 每个Servlet都必须由web容器读取Servlet设置信息(标注或者web.xml).初始化. 对于每个Servlet的设置信息,web容器会为其生成一个ServletC ...
- JSP&Servlet学习笔记----第4章
HTTP是基于请求/响应的无状态的通信协议. 使服务器记得此次请求与之后请求关系的方式,叫做会话管理. 隐藏域:由浏览器在每次请求时主动告知服务器多次请求间必要的信息.仅适用于一些简单的状态 管理,如 ...
- 【JSP&Servlet学习笔记】4.会话管理
Http本身是无状态通信协议,要进行会话管理的基本原理,就是将需要维护的状态回应给浏览器,由浏览器在下次请求时主动发送状态信息,让Web应用程序“得知”请求之间的关联. 隐藏字段是将状态信息以窗体中看 ...
- # jsp及servlet学习笔记
目录 jsp及servlet学习笔记 JSP(Java Server Page Java服务端网页) 指令和动作: servlet(小服务程序) jsp及servlet学习笔记 JSP(Java Se ...
随机推荐
- 用javascript实现简单排序算法
声明:本文为原创文章,如需转载,请注明来源WAxes,谢谢! 本文为楼主自己的学习记录文章,若有不当之处请斧正. 本文主要记录排序算法 [冒泡排序] 感觉这个是最简单的排序算法了.直接引用维基百科里的 ...
- CoffeeScript及相关文本标记语言
粗步看了下CoffeeScript(简称cs),发现cs这玩意还是有些问题,当然最大的问题之一是缺乏称手的工具.要是能放VS里编译调试当然好.但是转来转去的,真不如直接多敲几个JS字符串. 问题之二就 ...
- c#取得控制台应用程序根目录
1.取得控制台应用程序的根目录方法 方法1.Environment.CurrentDirectory 取得或设置当前工作目录的完整限定路径方法2.AppDomain.CurrentDomain.Bas ...
- css边框阴影
<style type="text/css">.mydiv{width:250px;height:auto;border:#909090 1px solid;backg ...
- 年前辞职-WCF入门学习(1,2)
前言 周一的时候辞职了,离开了从12年毕业后8月份开始一直到现在的公司. 辞职之后当然是玩.玩了若干天的游戏,真的是没日没夜啊,但是玩的太坑,怒删游戏.话说上次玩还是在14年7月份.下次还是过年回家再 ...
- 每天一个linux命令(21):tar命令
通过SSH访问服务器,难免会要用到压缩,解压缩,打包,解包等,这时候tar命令就是是必不可少的一个功能强大的工具.linux中最流行的tar是麻雀虽小,五脏俱全,功能强大. tar 命令可以为linu ...
- 5.9-4用字符串生成器给字符串str追加1~10这10个数字
package zfc; public class ZfcShcq { public static void main(String[] args) { // TODO Auto-generated ...
- JQuery思维导图
- JQuery学习(2)之Ajax
同步传输 正 多件事情一起做 | 程 不 事情一件一件地做 常: | 序 是: 异步传输 人 事情一件一件地做 | 员 人 多件事情可以一起做 附加(XML) ★XML作用:用来存储数据. ★XML特 ...
- 使用X-UA-Compatible来设置IE浏览器兼容模式
文件兼容性用于定义让IE如何编译你的网页.此文件解释文件兼容性,如何指定你网站的文件兼容性模式以及如何判断一个网页该使用的文件模式. 前言 为了帮助确保你的网页在所有未来的IE版本都有一致的外观,IE ...