亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? actionservletrequest.java

?? 一個論壇程序的簡單實現
?? JAVA
字號:
/*
 * Copyright (c) 2003, Rafael Steil
 * All rights reserved.

 * Redistribution and use in source and binary forms, 
 * with or without modification, are permitted provided 
 * that the following conditions are met:

 * 1) Redistributions of source code must retain the above 
 * copyright notice, this list of conditions and the 
 * following  disclaimer.
 * 2)  Redistributions in binary form must reproduce the 
 * above copyright notice, this list of conditions and 
 * the following disclaimer in the documentation and/or 
 * other materials provided with the distribution.
 * 3) Neither the name of "Rafael Steil" nor 
 * the names of its contributors may be used to endorse 
 * or promote products derived from this software without 
 * specific prior written permission.
 * 
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT 
 * HOLDERS AND CONTRIBUTORS "AS IS" AND ANY 
 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, 
 * BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 
 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR 
 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL 
 * THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, 
 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES 
 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, 
 * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 
 * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 
 * IN CONTRACT, STRICT LIABILITY, OR TORT 
 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN 
 * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF 
 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE
 * 
 * This file creation date: Mar 16, 2003 / 1:31:30 AM
 * The JForum Project
 * http://www.jforum.net
 */
package net.jforum;

import java.io.File;
import java.io.IOException;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

import net.jforum.util.preferences.ConfigKeys;
import net.jforum.util.preferences.SystemGlobals;

import org.apache.commons.fileupload.DefaultFileItemFactory;
import org.apache.commons.fileupload.DiskFileUpload;
import org.apache.commons.fileupload.FileItem;
import org.apache.commons.fileupload.FileUploadBase;
import org.apache.commons.fileupload.FileUploadException;

/**
 * @author Rafael Steil
 * @version $Id: ActionServletRequest.java,v 1.8 2004/09/14 02:16:45 rafaelsteil Exp $
 */
public class ActionServletRequest extends HttpServletRequestWrapper 
{
	/**
	 * URL Patterns keeper.
	 * Represents a single URL pattern. Each pattern is composed
	 * by a name, the pattern itself, the pattern's size and the
	 * splited variables. <br><br>
	 * 
	 * The pattern is expected in the form <i>var1, var2, varN</i>, in the
	 * correct order. This means that if <i>var1</i> comes first, it <b>must</b>
	 * come first in the URL. The same is valid to others.<br><br>
	 * 
	 * Please note that "first" here is "first" after regular URL, which is
	 * composed by server and servlet name, in the most simple case.<br><br>
	 * 
	 * <b>Example:</b><br>
	 * 
	 * URL: <i>http://localhost:8080/webappName/someDir/myServlet/news/view/3.page<i>.
	 * <br>
	 * In this case, <i>http://localhost:8080/webappName/someDir/myServlet/</i> is the 
	 * regular URL, the part that we don't care about. We only want the part 
	 * <i>news/view/3.page</i> ( where .page is the servlet extension ). 
	 * <br>For this URL, we could make the following pattern:<br><br>
	 * 
	 * <i>news.view.1 = news_id</i><br><br>
	 * 
	 * Here, <i>news.view.1</i> is the pattern's name, and <i>news_id</i> is
	 * the patterns itself. <br>
	 * Another example:<br><br>
	 * 
	 * <i>news.view.2 = page, news_id</i><br><br>
	 *  
	 * In this case we have a new var called <i>page</i>, that represents the page being seen.<br>
	 * Each entry is composed in the form:<br><br>
	 * 
	 * <i>&lt;moduleName&gt;.&lt;actionName&gt;.&lt;numberOfParameters&gt; = &lt;var 1&gt;,&lt;var n&gt;</i>
	 * <br><br>
	 * 
	 * Please note that module and action's name aren't pattern's composition, so 
	 * don't put them there. The system will consider that the pattern only contains
	 * the variables diferent to each request ( e.g, id's ). If the pattern you're
	 * constructing doesn't have any variable, just leave it blank, like<br><br>
	 * 
	 * <i>myModule.myAction.0 = </i><br><br>
	 * 
	 * @author Rafael Steil
	 */
	private static class UrlPattern
	{
		private String name;
		private String value;
		private int size;
		private String[] vars;
		
		public UrlPattern(String name, String value)
		{
			this.name = name;
			this.value = value;
			
			this.processPattern();
		}
		
		private void processPattern()
		{
			String[] p = this.value.split(",");
			
			this.vars = new String[p.length];
			this.size = p[0].trim().equals("") ? 0 : p.length;
			
			for (int i = 0; i < this.size; i++) {
				this.vars[i] = p[i].trim();
			}
		}

		/**
		 * Gets the pattern name
		 * 
		 * @return String with the pattern name
		 */
		public String getName()
		{
			return this.name;
		}

		/**
		 * Get pattern's total vars
		 * 
		 * @return The total
		 */
		public int getSize()
		{
			return this.size;
		}
		
		/**
		 * Gets the vars.
		 * The URL variables are in the correct order, which means
		 * that the first position always will be "something1", the
		 * second "something2" and so on. The system expects this
		 * order never changes from requisition to requisition.
		 * 
		 * @return The vars
		 */
		public String[] getVars()
		{
			return this.vars;
		}
	}
	
	/**
	 * Keeps a collection of <code>UrlPattern</code> objects.
	 *  
	 * @author Rafael Steil
	 */
	private static class UrlPatternCollection
	{
		private static HashMap patternsMap = new HashMap();
		
		/**
		 * Try to find a <code>UrlPattern</code> by its name.
		 * 
		 * @param name The pattern name
		 * @return The <code>UrlPattern</code> object if a match was found, or <code>null</code> if not
		 */
		public static UrlPattern findPattern(String name)
		{
			return (UrlPattern)UrlPatternCollection.patternsMap.get(name);
		}
		
		/**
		 * Adds a new <code>UrlPattern</code>.
		 * 
		 * @param name The pattern name
		 * @param value The pattern value
		 */
		public static void addPattern(String name, String value)
		{
			UrlPatternCollection.patternsMap.put(name, new UrlPattern(name, value));
		}
	}
	
	private HashMap query;
	
	/**
	 * Default constructor.
	 * 
	 * @param superRequest Original <code>HttpServletRequest</code> instance
	 * @throws IOException
	 */
	public ActionServletRequest(HttpServletRequest superRequest) throws IOException
	{
		super(superRequest);

		this.query = new HashMap();
		boolean isMultipart = false;
		
		if (superRequest.getMethod().equalsIgnoreCase("GET") 
				&& superRequest.getQueryString() == null
				&& superRequest.getRequestURI().endsWith(SystemGlobals.getValue(ConfigKeys.SERVLET_EXTENSION))) {
			String urlModel[] = superRequest.getRequestURI().split("/");
			
			// If (context name is not null) {
				// 0: empty
				// 1: context name
				// 2: module
				// 3: action
				// 4 .. n: request dependent data
			// } else {
				// 0: empty
				// 1: module
				// 2: action
				// 3 .. n: request dependent data
			// }
			
			int moduleIndex = 2;
			int actionIndex = 3;
			int baseLen = 4;
			
			String contextName = superRequest.getContextPath();
			if (contextName == null || contextName.equals("")) {
				moduleIndex = 1;
				actionIndex = 2;
				baseLen = 3;
			}
			
			urlModel[urlModel.length - 1] = urlModel[urlModel.length - 1].substring(0, urlModel[urlModel.length - 1].indexOf(SystemGlobals.getValue(ConfigKeys.SERVLET_EXTENSION)));
			
			// <moduleName>.<actionName>.<numberOfParameters>
			UrlPattern url = UrlPatternCollection.findPattern(urlModel[moduleIndex] +"."+ urlModel[actionIndex] +"."+ (urlModel.length - baseLen));
			if (url == null) {
				throw new IOException("The request '"+ superRequest.getRequestURI() +"' is not valid. A correspondent URL Pattern was not found");
			}
			
			this.addParameter("module", urlModel[moduleIndex]);
			this.addParameter("action", urlModel[actionIndex]);
			
			// We have parameters? 
			if (url.getSize() >= urlModel.length - baseLen) {
				for (int i = 0; i < url.getSize(); i++) {
					this.addParameter(url.getVars()[i], urlModel[i + baseLen]);
				}
			}
		}
		else {
			isMultipart = FileUploadBase.isMultipartContent(superRequest);
			if (isMultipart) {
			    String tmpDir = SystemGlobals.getApplicationPath() + "/" + SystemGlobals.getValue(ConfigKeys.TMP_DIR);
				DiskFileUpload upload = new DiskFileUpload(new DefaultFileItemFactory(20 * 1024, new File(tmpDir)));

				try {
					List items = upload.parseRequest(superRequest);
					for (Iterator iter = items.iterator(); iter.hasNext(); ) {
						FileItem item = (FileItem)iter.next();
						if (item.isFormField()) {
							this.query.put(item.getFieldName(), item.getString());
						}
						else {
							if (item.getSize() > 0) {
								this.query.put(item.getFieldName(), item.getInputStream());
								
								// Keeps the original file name ( pattern: <fieldName>Name 
								this.query.put(item.getFieldName() +"Name", item.getName());
							}
						}
					}
				}
				catch (FileUploadException e) {
					new ForumException(e);
				}
			}
		}
		
		if (isMultipart == false) {
			Enumeration e = superRequest.getParameterNames();
			String name;
			while (e.hasMoreElements()) {
				name = (String)e.nextElement();
				this.query.put(new String(name), superRequest.getParameter(name));
			}
		}
	}

	/*
	 * @see javax.servlet.ServletRequest#getParameter(java.lang.String)
	 */
	public String getParameter(String parameter) 
	{
		return (String)this.query.get(parameter);
	}
	
	/**
	 * Gets some request parameter as <code>Object</code>.
	 * This method may be used when you have to get some value
	 * of a <i>multipart/form-data</i> request, like a image
	 * of file. <br>
	 * 
	 * @param parameter
	 * @return
	 */
	public Object getObjectParameter(String parameter)
	{
		return this.query.get(parameter);
	}
	
	/**
	 * Adds a new <code>UrlPattern</code>.
	 * 
	 * @param name The pattern name
	 * @param value  The Pattern value
	 */
	public static void addUrlPattern(String name, String value)
	{
		UrlPatternCollection.addPattern(name, value);
	}
	
	/**
	 * Adds a new parameter to the request.
	 * 
	 * If you want to have one more, or to modify an existing one parameter,
	 * you should use this method to the job. 
	 * 
	 * @param name Parameter name
	 * @param value Parameter value
	 */
	public void addParameter(String name, Object value)
	{
		this.query.put(name, value);
	}
	
	/**
	 * Gets the <i>action</i> of the current request.
	 * 
	 * An <i>Action</i> is the parameter name which specifies
	 * what next action should be done by the system. It may be
	 * add or edit a post, editing the groups, whatever. In the URL, the
	 * Action can the represented in two forms:
	 * <p>
	 * <blockquote>
	 * <code>
	 * http://www.host.com/webapp/servletName?module=groups&action=list
	 * </code>
	 * </blockquote>
	 * <p>
	 * or
	 * <p>
	 * <blockquote>
	 * <code>
	 * http://www.host.com/webapp/servletName/groups/list
	 * </code>
	 * </blockquote>
	 * <p>
	 * In both situations, the action's name is "list".
	 * 
	 * @return String representing the action name
	 */
	public String getAction()
	{
		return this.getParameter("action");
	}
	
	/**
	 * Gets the <i>module</i> of the current request.
	 * 
	 * A <i>Module</i> is the parameter name which specifies
	 * what module the user is requesting. It may be the group
	 * administration, the topics or anything else configured module.
	 *In the URL, the Module can the represented in two forms:
	 * <p>
	 * <blockquote>
	 * <code>
	 * http://www.host.com/webapp/servletName?module=groups&action=list
	 * </code>
	 * </blockquote>
	 * <p>
	 * or
	 * <p>
	 * <blockquote>
	 * <code>
	 * http://www.host.com/webapp/servletName/groups/list
	 * </code>
	 * </blockquote>
	 * <p>
	 * In both situations, the module's name is "groups".
	 * 
	 * @return String representing the module name
	 */
	public String getModule()
	{
		return this.getParameter("module");
	}
	
	public Object getObjectRequestParameter(String parameter)
	{
		return this.query.get(parameter);
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
在线欧美一区二区| 国产午夜久久久久| 2023国产精品视频| 亚洲午夜成aⅴ人片| 国产精品自在欧美一区| 欧美性一区二区| 国产欧美一区二区在线| 香蕉久久夜色精品国产使用方法| 国产成人综合精品三级| 欧美一级二级三级蜜桃| 亚洲综合一二三区| av一区二区久久| 国产亚洲精品资源在线26u| 日韩影视精彩在线| 欧美色中文字幕| 中文字幕综合网| 成人激情文学综合网| 26uuu国产在线精品一区二区| 日一区二区三区| 欧美图区在线视频| 一区二区三区四区av| aaa国产一区| 国产精品女主播在线观看| 国产一区二区三区免费在线观看| 日韩一级片网站| 三级精品在线观看| 日韩一区二区视频| 视频在线观看91| 欧美一区二区三区日韩| 日日噜噜夜夜狠狠视频欧美人| 欧美色综合久久| 午夜精品影院在线观看| 欧美日韩在线不卡| 亚洲成a人片综合在线| 欧美三级韩国三级日本三斤| 一区二区三区日韩在线观看| 色偷偷88欧美精品久久久| 亚洲精品美国一| 欧美午夜精品电影| 日日夜夜精品视频天天综合网| 欧美肥胖老妇做爰| 秋霞电影网一区二区| 精品国产乱码久久久久久免费| 国产一区不卡视频| 国产精品久久久久三级| 91看片淫黄大片一级在线观看| 亚洲精品欧美专区| 欧美日本在线播放| 久久99精品国产麻豆婷婷洗澡| 欧美精品一区二区三区四区| 从欧美一区二区三区| 一区二区在线电影| 日韩一区二区在线观看| 国产高清精品久久久久| 亚洲人午夜精品天堂一二香蕉| 色婷婷av一区二区三区软件| 丝袜国产日韩另类美女| 国产亚洲美州欧州综合国| 91麻豆国产香蕉久久精品| 午夜av一区二区三区| 久久久久久99精品| 色婷婷精品久久二区二区蜜臂av| 视频一区二区三区在线| 久久精品网站免费观看| 91高清视频在线| 久久99久久久久久久久久久| 日本一区二区成人| 欧美日韩免费观看一区二区三区| 久久国产精品一区二区| 18欧美乱大交hd1984| 777精品伊人久久久久大香线蕉| 精品在线免费观看| 一区二区三区加勒比av| 欧美精品一区二区三区一线天视频| 99在线视频精品| 免费观看成人鲁鲁鲁鲁鲁视频| 国产精品三级电影| 日韩一区和二区| 91丝袜国产在线播放| 久久成人久久爱| 亚洲国产日韩av| 国产精品丝袜91| 日韩色视频在线观看| 色系网站成人免费| 懂色av一区二区三区免费看| 三级不卡在线观看| 亚洲乱码日产精品bd| 久久久91精品国产一区二区精品 | 91精品久久久久久久久99蜜臂| 国产精品69久久久久水密桃| 亚洲成人免费在线观看| 国产精品久久久久久久久久久免费看| 91精品一区二区三区久久久久久 | 亚洲制服欧美中文字幕中文字幕| 久久久久久毛片| 日韩一二三区视频| 在线观看日韩一区| bt欧美亚洲午夜电影天堂| 国产一区二区免费看| 日本午夜一本久久久综合| 亚洲欧美偷拍另类a∨色屁股| 中文字幕在线观看一区| 久久先锋影音av鲁色资源| 欧美一级精品在线| 欧美色欧美亚洲另类二区| 99在线精品观看| 成人av资源下载| 国产成人午夜片在线观看高清观看| 麻豆久久久久久久| 午夜精品视频一区| 亚洲成人一区二区在线观看| 亚洲综合色视频| 一区二区日韩av| 亚洲一区在线观看网站| 一区二区三区中文字幕电影 | 国产成人免费av在线| 国产一区二区精品久久91| 美国av一区二区| 亚洲成人激情社区| 午夜久久久影院| 日本少妇一区二区| 日本特黄久久久高潮| 日韩高清一区二区| 视频精品一区二区| 久久国产人妖系列| 国内成人免费视频| 高清在线不卡av| 91香蕉视频污在线| 一本色道**综合亚洲精品蜜桃冫| 91福利社在线观看| 91精品国产综合久久婷婷香蕉 | 欧美一区二区三区喷汁尤物| 日韩午夜激情av| 久久久国产午夜精品| 中文字幕中文字幕在线一区| 亚洲欧洲中文日韩久久av乱码| 亚洲va欧美va人人爽| 美美哒免费高清在线观看视频一区二区 | 亚洲高清视频中文字幕| 午夜精品福利一区二区蜜股av | 91久久精品一区二区三| 欧美疯狂性受xxxxx喷水图片| 精品伦理精品一区| 国产精品久久777777| 亚洲第一精品在线| 国产精品一区三区| 日本道精品一区二区三区| 日韩欧美国产三级电影视频| 欧美激情在线一区二区| 亚洲国产成人91porn| 国产一区二区成人久久免费影院| 99re视频精品| 日韩三级电影网址| 国产精品进线69影院| 日本伊人精品一区二区三区观看方式| 国产精品一区二区在线观看不卡 | 成熟亚洲日本毛茸茸凸凹| 色老汉av一区二区三区| 日韩一级完整毛片| 亚洲精品欧美专区| 国产伦理精品不卡| 欧美日韩国产综合一区二区三区| 久久久精品欧美丰满| 午夜伦欧美伦电影理论片| 成人永久免费视频| 日韩三级在线观看| 亚洲精品国产精华液| 国产精品18久久久| 欧美精品乱码久久久久久按摩| 国产欧美久久久精品影院| 奇米四色…亚洲| 91成人免费在线| 国产精品免费看片| 久久精品99久久久| 欧美日本在线视频| 伊人色综合久久天天人手人婷| 国产中文一区二区三区| 欧美日韩一级片在线观看| 国产精品久久毛片av大全日韩| 九九**精品视频免费播放| 欧美精品在线一区二区| 亚洲黄色片在线观看| 91污在线观看| 国产精品欧美一区二区三区| 国产麻豆精品theporn| 日韩精品专区在线影院观看| 亚洲综合在线电影| 色综合久久天天| 国产精品国产精品国产专区不片| 国产精品亚洲视频| 精品美女一区二区| 久久99久久99| 欧美一级黄色片| 蜜桃av一区二区在线观看| 3d动漫精品啪啪1区2区免费| 亚洲一本大道在线| 欧美日韩在线三级| 午夜电影一区二区| 3d成人动漫网站| 蜜桃视频第一区免费观看|