锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
]]>
]]>
闃呰鍏ㄦ枃
]]>
]]>
璀﹀憡: Incorrect JSP version found, method getJspApplicationContext does not exist.)錛屼篃鏄繖鏍風殑鍘熷洜銆?br />聽聽聽鎵浠ヨ鍦?/span>
Tomcat5
涓嬭繍琛?/span>
JSF
錛屼負浜嗙ǔ瀹氳搗瑙侊紝搴旇浣跨敤
JSF1.1
鐗堟湰銆傜幇鍦ㄧ敤鍥濲SF1.1,鍘熸潵涓浜沊ML娌℃湁楠岃瘉,鍜岄〉闈㈡彁浜よ〃鍗曞悗,榪斿洖鍐嶆彁浜や細鍑虹幇鐨勪涪澶辨暟鎹殑闂涔熻В鍐充簡錛堟垜涔嬪墠鐨勬枃绔?a class="titlelink" id="Editor_Results_rprSelectionList_ctl02_Hyperlink1" href="/itvincent/archive/2006/11/01/78481.html">銆妀avax.faces.STATE_SAVING_METHOD鐨勮緗棶棰?/font>銆?銆?/span>
Servlet/JSP Spec
|
Apache Tomcat version
|
2.5/2.1
|
6.0.x
|
2.4/2.0
|
5.5.x
|
2.3/1.2
|
4.1.x
|
2.2/1.1
|
3.3.x
|
1銆?span style="FONT: 7pt 'Times New Roman'">聽
鎶?/span> javax.faces.STATE_SAVING_METHOD 璁句負 client 鍙互瑙e喅錛屼絾鏄鎴風欏甸潰涓細鍑虹幇寰堥暱鐨勯殣钘忎俊鎭紝铏界劧涓嶅獎鍝嶅鎴蜂嬌鐢紝浣嗘槸欏甸潰浼氬彉寰楀緢鍐楅暱銆傝屼笖鐪嬪埌鏈変漢璇撮〉闈腑澶瑰叆鐨?/span> javascript 鎵撳嵃鐨勪腑鏂囨彁紺哄彉鎴愪簡涔辯爜銆?/span>2銆?span style="FONT: 7pt 'Times New Roman'">聽
鍦?/span> faces-config.xml 涓?/span>
聽聽聽
<
managed-bean
>
聽聽聽聽聽聽
<
managed-bean-name
>
hello
</
managed-bean-name
>
聽聽聽聽聽聽
<
managed-bean-class
>
聽聽聽聽聽聽聽聽聽聽 facelets.Hello
聽聽聽聽聽聽
</
managed-bean-class
>
聽聽聽聽聽聽
<
managed-bean-scope
>
session
</
managed-bean-scope
>
聽聽聽 </ managed-bean >
鎶?/span> < managed-bean-scope > 鏀逛負 session 涔熷彲浠ヨВ鍐籌紝浣嗕緥濡傛柊澧炰慨鏀規槸鍋氬湪鍚屼竴涓〉闈㈢殑鏃跺欙紝涔嬪墠鍋氳繃淇敼鎿嶄綔錛屾柊澧炵殑鏃朵篃浼氬瓨鍦ㄤ慨鏀規椂鐨勫唴瀹?/span>
聽聽聽聽聽聽 璇鋒暀鏈変粈涔堟柟娉曞彲浠ユ洿濂界殑瑙e喅榪欎釜闂錛?/span>
<form enctype="multipart/form-data" method="POST" action="...">
聽聽聽聽...
聽聽聽聽<input type="file" name="...">
聽聽聽聽...
</form>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
聽聽聽聽"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
聽聽聽聽"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
聽聽聽聽<context-param>
聽聽聽聽聽聽聽聽<param-name>javax.faces.STATE_SAVING_METHOD</param-name>
聽聽聽聽聽聽聽聽<param-value>client</param-value>
聽聽聽聽</context-param>
聽聽聽聽<servlet>
聽聽聽聽聽聽聽聽<servlet-name>FacesServlet</servlet-name>
聽聽聽聽聽聽聽聽<servlet-class>
聽聽聽聽聽聽聽聽聽聽聽聽javax.faces.webapp.FacesServlet
聽聽聽聽聽聽聽聽</servlet-class>
聽聽聽聽聽聽聽聽<load-on-startup>1</load-on-startup>
聽聽聽聽</servlet>
聽聽聽聽<servlet-mapping>
聽聽聽聽聽聽聽聽<servlet-name>FacesServlet</servlet-name>
聽聽聽聽聽聽聽聽<url-pattern>/faces/*</url-pattern>
聽聽聽聽</servlet-mapping>
聽聽聽聽<servlet-mapping>
聽聽聽聽聽聽聽聽<servlet-name>FacesServlet</servlet-name>
聽聽聽聽聽聽聽聽<url-pattern>*.faces</url-pattern>
聽聽聽聽</servlet-mapping>
聽聽聽聽<filter>
聽聽聽聽聽聽聽聽<filter-name>ExtensionsFilter</filter-name>
聽聽聽聽聽聽聽聽<filter-class>
聽聽聽聽聽聽聽聽聽聽聽聽org.apache.myfaces.component.html.util.ExtensionsFilter
聽聽聽聽聽聽聽聽</filter-class>
聽聽聽聽聽聽聽聽<init-param>
聽聽聽聽聽聽聽聽聽聽聽聽<param-name>uploadMaxFileSize</param-name>
聽聽聽聽聽聽聽聽聽聽聽聽<param-value>10m</param-value>
聽聽聽聽聽聽聽聽</init-param>
聽聽聽聽聽聽聽聽<init-param>
聽聽聽聽聽聽聽聽聽聽聽聽<param-name>uploadThresholdSize</param-name>
聽聽聽聽聽聽聽聽聽聽聽聽<param-value>100k</param-value>
聽聽聽聽聽聽聽聽</init-param>
聽聽聽聽</filter>
聽聽聽聽<filter-mapping>
聽聽聽聽聽聽聽聽<filter-name>ExtensionsFilter</filter-name>
聽聽聽聽聽聽聽聽<servlet-name>FacesServlet</servlet-name>
聽聽聽聽</filter-mapping>
聽聽聽聽<welcome-file-list>
聽聽聽聽聽聽聽聽<welcome-file>index.jsp</welcome-file>
聽聽聽聽</welcome-file-list>
</web-app>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%>
<f:view>
聽聽聽聽<h:form id="MyForm" enctype="multipart/form-data" >
聽聽聽聽聽聽聽聽...
聽聽聽聽聽聽聽聽<x:inputFileUpload id="myFileId"
聽聽聽聽聽聽聽聽聽聽聽聽value="#{myBean.myFile}"
聽聽聽聽聽聽聽聽聽聽聽聽storage="file"
聽聽聽聽聽聽聽聽聽聽聽聽required="true"/>
聽聽聽聽聽聽聽聽...
聽聽聽聽</h:form>
</f:view>
import org.apache.myfaces.custom.fileupload.UploadedFile;
...
public class MyBean {
聽聽聽聽private UploadedFile myFile;
聽聽聽聽public UploadedFile getMyFile() {
聽聽聽聽聽聽聽聽return myFile;
聽聽聽聽}
聽聽聽聽public void setMyFile(UploadedFile myFile) {
聽聽聽聽聽聽聽聽this.myFile = myFile;
聽聽聽聽}
聽聽聽聽...
}
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<%@ taglib uri="http://myfaces.apache.org/extensions" prefix="x"%>
<f:view>
<h:form id="MyForm" enctype="multipart/form-data" >
聽聽聽聽<h:messages globalOnly="true" styleClass="message"/>
聽聽聽聽<h:panelGrid columns="3" border="0" cellspacing="5">
聽聽聽聽聽聽聽聽<h:outputLabel for="myFileId" value="File: "/>
聽聽聽聽聽聽聽聽<x:inputFileUpload id="myFileId"
聽聽聽聽聽聽聽聽聽聽聽聽value="#{myBean.myFile}"
聽聽聽聽聽聽聽聽聽聽聽聽storage="file"
聽聽聽聽聽聽聽聽聽聽聽聽required="true"/>
聽聽聽聽聽聽聽聽<h:message for="myFileId"/>
聽聽聽聽聽聽聽聽<h:outputLabel for="myParamId" value="Param: "/>
聽聽聽聽聽聽聽聽<h:selectOneMenu id="myParamId"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽value="#{myBean.myParam}"
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽required="true">
聽聽聽聽聽聽聽聽聽聽聽聽<f:selectItem itemLabel="" itemValue=""/>
聽聽聽聽聽聽聽聽聽聽聽聽<f:selectItem itemLabel="MD5" itemValue="MD5"/>
聽聽聽聽聽聽聽聽聽聽聽聽<f:selectItem itemLabel="SHA-1" itemValue="SHA-1"/>
聽聽聽聽聽聽聽聽聽聽聽聽<f:selectItem itemLabel="SHA-256" itemValue="SHA-256"/>
聽聽聽聽聽聽聽聽聽聽聽聽<f:selectItem itemLabel="SHA-384" itemValue="SHA-384"/>
聽聽聽聽聽聽聽聽聽聽聽聽<f:selectItem itemLabel="SHA-512" itemValue="SHA-512"/>
聽聽聽聽聽聽聽聽</h:selectOneMenu>
聽聽聽聽聽聽聽聽<h:message for="myParamId"/>
聽聽聽聽聽聽聽聽<h:outputText value=" "/>
聽聽聽聽聽聽聽聽<h:commandButton value="Submit"
聽聽聽聽聽聽聽聽聽聽聽聽action="#{myBean.processMyFile}"/>
聽聽聽聽聽聽聽聽<h:outputText value=" "/>
聽聽聽聽</h:panelGrid>
</h:form>
</f:view>
package com.devsphere.articles.jsfupload;
...
import javax.faces.application.FacesMessage;
import javax.faces.context.FacesContext;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.io.*;
public class MyBean {
聽聽聽聽...
聽聽聽聽public String processMyFile() {
聽聽聽聽聽聽聽聽try {
聽聽聽聽聽聽聽聽聽聽聽聽MessageDigest md
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽= MessageDigest.getInstance(myParam);
聽聽聽聽聽聽聽聽聽聽聽聽InputStream in = new BufferedInputStream(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽myFile.getInputStream());
聽聽聽聽聽聽聽聽聽聽聽聽try {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽byte[] buffer = new byte[64 * 1024];
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽int count;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽while ((count = in.read(buffer)) > 0)
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽md.update(buffer, 0, count);
聽聽聽聽聽聽聽聽聽聽聽聽} finally {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽in.close();
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽byte hash[] = md.digest();
聽聽聽聽聽聽聽聽聽聽聽聽StringBuffer buf = new StringBuffer();
聽聽聽聽聽聽聽聽聽聽聽聽for (int i = 0; i < hash.length; i++) {
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽int b = hash[i] & 0xFF;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽int c = (b >> 4) & 0xF;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c = c < 10 ? '0' + c : 'A' + c - 10;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽buf.append((char) c);
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c = b & 0xF;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽c = c < 10 ? '0' + c : 'A' + c - 10;
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽buf.append((char) c);
聽聽聽聽聽聽聽聽聽聽聽聽}
聽聽聽聽聽聽聽聽聽聽聽聽myResult = buf.toString();
聽聽聽聽聽聽聽聽聽聽聽聽return "OK";
聽聽聽聽聽聽聽聽} catch (Exception x) {
聽聽聽聽聽聽聽聽聽聽聽聽FacesMessage message = new FacesMessage(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽FacesMessage.SEVERITY_FATAL,
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽x.getClass().getName(), x.getMessage());
聽聽聽聽聽聽聽聽聽聽聽聽FacesContext.getCurrentInstance().addMessage(
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽null, message);
聽聽聽聽聽聽聽聽聽聽聽聽return null;
聽聽聽聽聽聽聽聽}
聽聽聽聽}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE faces-config PUBLIC
聽聽聽聽"-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN"
聽聽聽聽"http://java.sun.com/dtd/web-facesconfig_1_1.dtd">
<faces-config>
聽聽聽聽<managed-bean>
聽聽聽聽聽聽聽聽<managed-bean-name>myBean</managed-bean-name>
聽聽聽聽聽聽聽聽<managed-bean-class>
聽聽聽聽聽聽聽聽聽聽聽聽com.devsphere.articles.jsfupload.MyBean
聽聽聽聽聽聽聽聽</managed-bean-class>
聽聽聽聽聽聽聽聽<managed-bean-scope>request</managed-bean-scope>
聽聽聽聽</managed-bean>
聽聽聽聽<navigation-rule>
聽聽聽聽聽聽聽聽<from-view-id>/MyForm.jsp</from-view-id>
聽聽聽聽聽聽聽聽<navigation-case>
聽聽聽聽聽聽聽聽聽聽聽聽<from-outcome>OK</from-outcome>
聽聽聽聽聽聽聽聽聽聽聽聽<to-view-id>/MyResult.jsp</to-view-id>
聽聽聽聽聽聽聽聽</navigation-case>
聽聽聽聽</navigation-rule>
</faces-config>
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f"%>
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h"%>
<f:view>
聽聽聽聽<h:panelGrid columns="2" border="0" cellspacing="5">
聽聽聽聽聽聽聽聽<h:outputText value="FileName:"/>
聽聽聽聽聽聽聽聽<h:outputText value="#{myBean.myFile.name}"/>
聽聽聽聽聽聽聽聽<h:outputText value="FileSize:"/>
聽聽聽聽聽聽聽聽<h:outputText value="#{myBean.myFile.size}"/>
聽聽聽聽聽聽聽聽<h:outputText value="Param:"/>
聽聽聽聽聽聽聽聽<h:outputText value="#{myBean.myParam}"/>
聽聽聽聽聽聽聽聽<h:outputText value="Result:"/>
聽聽聽聽聽聽聽聽<h:outputText value="#{myBean.myResult}"/>
聽聽聽聽</h:panelGrid>
</f:view>