ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class MyEclipseGen {
private static final String LL = "Decompiling this copyrighted software is a violation of both your license agreement and the Digital Millenium Copyright Act of 1998 (http://www.loc.gov/copyright/legislation/dmca.pdf). Under section 1204 of the DMCA, penalties range up to a $500,000 fine or up to five years imprisonment for a first offense. Think about it; pay for a license, avoid prosecution, and feel better about yourself.";
public String getSerial(String userId, String licenseNum) {
java.util.Calendar cal = java.util.Calendar.getInstance();
cal.add(1, 3);
cal.add(6, -1);
java.text.NumberFormat nf = new java.text.DecimalFormat("000");
licenseNum = nf.format(Integer.valueOf(licenseNum));
String verTime = new StringBuilder("-").append(
new java.text.SimpleDateFormat("yyMMdd").format(cal.getTime()))
.append("0").toString();
String type = "YE3MP-";
String need = new StringBuilder(userId.substring(0, 1)).append(type)
.append("300").append(licenseNum).append(verTime).toString();
String dx = new StringBuilder(need).append(LL).append(userId)
.toString();
int suf = this.decode(dx);
String code = new StringBuilder(need).append(String.valueOf(suf))
.toString();
return this.change(code);
}
private int decode(String s) {
int i;
char[] ac;
int j;
int k;
i = 0;
ac = s.toCharArray();
j = 0;
k = ac.length;
while (j < k) {
i = (31 * i) + ac[j];
j++;
}
return Math.abs(i);
}
private String change(String s) {
byte[] abyte0;
char[] ac;
int i;
int k;
int j;
abyte0 = s.getBytes();
ac = new char[s.length()];
i = 0;
k = abyte0.length;
while (i < k) {
j = abyte0[i];
if ((j >= 48) && (j <= 57)) {
j = (((j - 48) + 5) % 10) + 48;
} else if ((j >= 65) && (j <= 90)) {
j = (((j - 65) + 13) % 26) + 65;
} else if ((j >= 97) && (j <= 122)) {
j = (((j - 97) + 13) % 26) + 97;
}
ac[i] = (char) j;
i++;
}
return String.valueOf(ac);
}
public MyEclipseGen() {
super();
}
public static void main(String[] args) {
try {
System.out.println("please input register name:");
BufferedReader reader = new BufferedReader(new InputStreamReader(
System.in));
String userId = null;
userId = reader.readLine();
MyEclipseGen myeclipsegen = new MyEclipseGen();
String res = myeclipsegen.getSerial(userId, "5");
System.out.println("Serial:" + res);
reader.readLine();
} catch (IOException ex) {
}
}
}
本文æ¥è‡ªCSDNåšå®¢åQŒè{è½½è¯·æ ‡æ˜Žå‡ºå¤„åQšhttp://blog.csdn.net/yaba213/archive/2009/10/15/4673974.aspx
1åQŽå¼•a€
1åQ? ¾~–写目的
· é˜æ˜Žå¼€å‘本软äšg的目的;
1åQ? ™å¹ç›®èƒŒæ™¯
· æ ‡è¯†å¾…å¼€å‘èÊYä»¶äñ”å“çš„åç§°ã€ä»£ç ï¼›
· 列出本项目的ä»ÕdŠ¡æå‡ºè€…ã€é¡¹ç›®è´Ÿè´£ähã€ç³»¾lŸåˆ†æžå‘˜ã€ç³»¾lŸè®¾è®¡å‘˜ã€ç¨‹åºè®¾è®¡å‘˜ã€ç¨‹åºå‘˜ã€èµ„料员以åŠä¸Žæœ¬™å¹ç›®å¼€å±•å·¥ä½œç›´æŽ¥æœ‰å…³çš„äººå‘˜å’Œç”¨æˆøP¼›
· 说明该èÊYä»¶äñ”å“与其他有关软äšg产å“的相互关¾p…R€?/span>
1åQ? 术è¯è¯´æ˜Ž
åˆ—å‡ºæœ¬æ–‡æ¡£ä¸æ‰€ç”¨åˆ°çš„专门术è¯çš„定义和英文羃写è¯çš„原文ã€?/span>
1åQ? å‚è€ƒèµ„æ–™ï¼ˆå¯æœ‰å¯æ— åQ?/span>
列ä‹D¾~–写软äšgéœ€æ±‚è§„æ ÆD¯´æ˜Žæ—¶æ‰€å‚考的资料åQŒåŒ…æ‹¬é¡¹ç›®ç»æ ¸å‡†çš„计划ä“Q务书ã€åˆ
åŒã€å¼•ç”¨çš„æ ‡å‡†å’Œè§„èŒƒã€é¡¹ç›®å¼€å‘计划ã€éœ€æ±‚è§„æ ÆD¯´æ˜Žã€ä‹É用实例文档,以åŠç›¸å…³äº§å“
çš„èÊY仉™œ€æ±‚è§„æ ÆD¯´æ˜Žã€?/span>
åœ¨è¿™é‡Œåº”è¯¥ç»™å‡ø™¯¦¾l†çš„ä¿¡æ¯åQŒåŒ…æ‹¬æ ‡é¢˜ã€ä½œè€…ã€ç‰ˆæœ¬å·ã€å‘表日期ã€å‡ºç‰ˆå•使ˆ–èµ?/span>
æ–™æ¥æºã€?/span>
2åQŽé¡¹ç›®æ¦‚˜q?/strong>
2åQ? å¾…å¼€å‘èÊY件的一般æ˜q?/span>
æè¿°å¾…å¼€å‘èÊY件的背景åQŒæ‰€åº”è¾¾åˆ°çš„ç›®æ ‡åQŒä»¥åŠå¸‚åœºå‰æ™¯ç‰ã€?/span>
2åQ? å¾…å¼€å‘èÊY件的功能
½Ž€˜q°å¾…å¼€å‘èÊY件所å…ähœ‰çš„主è¦åŠŸèƒ½ã€‚äØ“äº†å¸®åŠ©æ¯ä¸ªè¯»è€…易于ç†è§£ï¼Œå¯ä»¥ä½¿ç”¨åˆ—表æˆ?/span>
囑ÖŞ的方法进行æ˜q°ã€‚ä‹É用图形表½Cºï¼Œå¯ä»¥é‡‡ç”¨åQ?/span>
· ™å¶å±‚数残¹å›¾åQ?/span>
· 用例UseCase图;
· ¾pÈ»Ÿ‹¹ç¨‹å›¾ï¼›
· 层次æ–ÒŽ¡†å›¾ã€?/span>
2åQ? 用户特å¾å’Œæ°´òq»I¼ˆæ˜¯å“ª¾cÖMh使用åQ?/span>
æè¿°æœ€¾lˆç”¨æˆ·åº”å…ähœ‰çš„å—æ•™è‚²æ°´åã^ã€å·¥ä½œç»éªŒåŠæŠ€æœ¯ä¸“é•Ñ€?/span>
2åQ? ˜q行环境
æè¿°è½¯äšgçš„è¿è¡ŒçŽ¯å¢ƒï¼ŒåŒ…æ‹¬¼‹¬äšgòq›_°ã€ç¡¬ä»¶è¦æ±‚ã€æ“作系¾lŸå’Œç‰ˆæœ¬åQŒä»¥åŠå…¶ä»–çš„è½?/span>
件或与其共å˜çš„应用程åºç‰ã€?/span>
2åQ? æ¡äšg与é™åˆ?/span>
¾l™å‡ºå½±å“å¼€å‘äh员在设计软äšgæ—¶çš„¾U¦æŸæ¡æ¬¾åQŒä¾‹å¦‚:
· 必须使用或é¿å…ä‹É用的特定技术ã€å·¥å…—÷€ç¼–½E‹è¯a€å’Œæ•°æ®åº“åQ?/span>
· ¼‹¬äšgé™åˆ¶åQ?/span>
· æ‰€è¦æ±‚的开å‘è§„èŒƒæˆ–æ ‡å‡†ã€?/span>
3åQŽåŠŸèƒ½éœ€æ±?/strong>
3åQ? 功能划分
列ä‹D出所开å‘的软äšg能实现的全部功能åQŒå¯é‡‡ç”¨æ–‡å—ã€å›¾è¡¨æˆ–æ•°å¦å…¬å¼½{‰å¤š¿Uæ–¹æ³?/span>
˜q›è¡Œæè¿°ã€?/span>
3åQ? 功能æè¿°
对å„个功能进行详¾l†çš„æè¿°ã€?/span>
4åQŽå¤–部接å£éœ€æ±?/strong>
4åQ? 用户界é¢
对用户希望该软äšg所å…ähœ‰çš„界é¢ç‰¹å¾è¿›è¡Œæ˜q°ã€‚以下是å¯èƒ½è¦åŒ…括的一些特å¾ï¼š
· ž®†è¦é‡‡ç”¨çš„图形用æˆïL•Œé¢æ ‡å‡†æˆ–产哾pÕdˆ—的风æ û|¼›
· å±å¹•布局åQ?/span>
· èœå•布局åQ?/span>
· è¾“å…¥è¾“å‡ºæ ¼å¼åQ?/span>
· é”™è¯¯ä¿¡æ¯æ˜„¡¤ºæ ¼å¼åQ?/span>
廸™®®é‡‡ç”¨RADå¼€å‘工典P¼Œ 比如VisioåQŒæž„é€ ç”¨æˆïL•Œé¢ã€?/span>
4åQ? ¼‹¬äšg接å£
æè¿°¾pÈ»Ÿä¸èÊYä»¶äñ”å“å’Œ¼‹¬äšg讑֤‡æ¯ä¸€æŽ¥å£çš„特å¾ï¼Œä»¥å심äšgæŽ¥å£æ”¯æŒçš„设备ã€èÊY件与¼‹¬äšg接å£ä¹‹é—´åQŒä»¥åŠç¡¬ä»¶æŽ¥å£ä¸Žæ”¯æŒè®‘Ö¤‡ä¹‹é—´çš„约定,包括交æµçš„æ•°æ®å’ŒæŽ§åˆ¶ä¿¡æ¯çš„æ€§è´¨ä»¥åŠæ‰€ä½¿ç”¨çš„通信åè®®ã€?/span>
4åQ? 软äšg接å£
æè¿°è¯¥èÊYä»¶äñ”å“与其有兌™ÊY件的接å£å…³ç³»åQŒåƈ指出˜q™äº›å¤–部软äšg或组件的åå—和版本å·ã€‚比如è¿è¡Œåœ¨ä»€ä¹ˆæ“作系¾lŸä¸ŠåQŒè®¿é—®ä½•¿U类型的数æ®åº“,使用什么数æ®åº“˜qžæŽ¥¾l„äšgåQŒå’Œä»€ä¹ˆå•†ä¸šèÊY件共享数æ®ç‰ã€?/span>
4åQ? 通信接å£
æè¿°å’Œæœ¬è½¯äšg产å“相关的儿U通信需求,包括电åé‚®äšgã€Web‹¹è§ˆå™¨ã€ç½‘¾lœé€šä¿¡åè®®½{‰ã€?/span>
4åQ? 故障处ç†
对å¯èƒ½çš„软äšgã€ç¡¬ä»¶æ•…障以åŠå¯¹å„é¡¹æ€§èƒ½è€Œè¨€æ‰€äº§ç”Ÿçš„åŽæžœè¿›è¡Œå¤„ç†ã€?/span>
5åQŽæ€§èƒ½éœ€æ±?/strong>
5åQ? 数殾_„¡¡®åº?/span>
输出¾l“果的精度ã€?/span>
5åQ? æ—‰™—´ç‰ÒŽ€?/span>
æ—‰™—´ç‰ÒŽ€§å¯åŒ…æ‹¬å¦‚ä¸‹å‡ æ–¹é?/span>
·å“应旉™—´åQ?/span>
·æ›´æ–°å¤„ç†æ—‰™—´åQ?/span>
·æ•°æ®è½¬æ¢ä¸Žä¼ 输时é—ß_¼›
·˜q行旉™—´½{‰ã€?/span>
5åQ? 适应æ€?/span>
在æ“作方å¼ã€è¿è¡ŒçŽ¯å¢ƒã€ä¸Žå…¶ä»–软äšg的接å£ä»¥åŠå¼€å‘计划ç‰å‘生å˜åŒ–æ—Óž¼Œè½¯äšg的适应能力ã€?/span>
6åQŽå…¶ä»–需æ±?/strong>
列出在本文的其他部分未出现的需求。如果ä¸éœ€è¦å¢žåŠ å…¶ä»–éœ€æ±‚ï¼Œå¯çœç•¥è¿™ä¸€éƒ¨åˆ†ã€?/span>
7åQŽæ•°æ®æ˜q?/strong>
7åQ? 陿€æ•°æ?/span>
7åQ? åŠ¨æ€æ•°æ?/span>
包括输入数æ®å’Œè¾“出数æ®ã€?/span>
7åQ? æ•°æ®åº“æ˜q?/span>
¾l™å‡ºä½¿ç”¨æ•°æ®åº“çš„å称和类型ã€?/span>
7åQ? æ•°æ®å—å…¸
对于数残¹å›¾ã€å±‚‹Æ¡æ–¹æ¡†å›¾ä¸å‡ºçŽ°çš„æ‰€æœ‰å›¾å½¢å…ƒç´ åœ¨æ•°æ®å—å…¸ä¸éƒ½è¦ä½œä¸ÞZ¸€ä¸ªè¯æ¡åŠ ä»¥å®šä¹‰ï¼Œä½¿å¾—æ¯ä¸€ä¸ªå›¾å½¢å…ƒç´ 都有唯一的一个清晰明¼‹®çš„解释ã€?/span>
æ•°æ®å—兏䏿‰€æœ‰çš„定义必须是严密的ã€ç²¾¼‹®çš„åQŒä¸å¯æœ‰äºŒæ„性ã€?/span>
7åQ? æ•°æ®é‡‡é›†
·åˆ—出æä¾›è¾“入数æ®çš„æœºæž„ã€è®¾å¤‡å’Œäººå‘˜
·åˆ—出数æ®è¾“入的手ŒDüc€ä»‹è´¨å’Œè®‘Ö¤‡åQ?/span>
·åˆ—出数æ®ç”Ÿæˆçš„æ–¹æ³•ã€ä»‹è´¨å’Œè®‘Ö¤‡ã€?/span>
8åQŽé™„å½?/strong>
åŒ…æ‹¬åˆ†æžæ¨¡åž‹åQŒå¾…定问题图表ç‰ã€?/span>
HTTPä¿¡æ¯
éšè—å—æ®µåQ?/span><input type=”hidden” name=”somename” value=”somevalue”>
URLé‡å†™åQ?/span><a href=”XX.jsp?name=XX&item=XX”>å†é€šè¿‡getParameter(XX)得到
Cooike
SessionåQ?/span>session.setAtrribute(xx,xx)
二�/span>servlet的生命周�/span>
装è²ã€å®žä¾‹åŒ–ã€åˆå§‹åŒ–init()ã€å®žä¾‹çš„è¯äh±‚doXXX()ã€é”€æ¯?/span>distoryI()
三ã€?/span>servlet相关é…ç½®
Javax.servlet.ServletConfig接å£ä»£è¡¨äº?/span>Servlet的酾|®ï¼ŒåŒ…括servletçš„åå—ã€åˆå§‹åŒ–傿•°ã€ä¸Šä¸‹æ–‡
åœ?/span>web.xmlä¸çš„<servlet></servlet>之间的内容就æ˜?/span>servlet的酾|?/span>
<init-param>
<param-name>MM</param-name>
<param-value>NN</param-value>
</init-param>
åœ?/span>servletä¸ç›´æŽ¥ä‹Éç”?/span>getInitParameter(“MM”)ž®±å¯ä»¥å¾—åˆ?/span>NN
Servletçš„æ˜ ž®„é…¾|?/span>
<servlet-mapping>
<servlet-name>Conter</servlet-name>
<url-pattern>/count/*</url-pattern>
</servlet-mapping>
˜q™ç§æƒ…å†µä¸‹å½“åœ°å€æ 里输入http://127.0.0.1:8080/count/gaexä¸ç®¡æœ€åŽæ˜¯ä»€ä¹ˆéƒ½èƒ½èŸ©åˆ?/span>servletä¸?/span>
å››ã€ç›‘å?/span>
ç›‘å¬æ˜¯å¯¹servletContext的属性创建ã€åˆ 除的监å¬
对监å¬çš„é…ç½®åœ?/span>web.xmlä¸ï¼Œå¿…须在所有的servletå…ƒç´ ä¹‹å‰
五ã€?/span>web˜q‡æ×oå™?/span>
客户ç«?/span> HTTPè¯äh±‚àFilter à doFilter àFilter àç›®æ ‡¾l„äšg
è¦å¼€å‘一ä¸?/span>Filter必须直接或间接的实现Filter接å£
Filter接å£ä¸çš„æ–ÒŽ³•有:
init()获得FilterConfig对象
destroy()销æ¯è¿™ä¸ªè¿‡æ»¤å™¨
doFilter()˜q›è¡Œ˜q‡æ×o处ç†
如果有多个过滤器åœ?/span>doFilter()ä¸å°±è¦åŠ ä¸?/span>chain.doFilter(srequest,sresponse)æŠŠå¤„ç†æƒå‘给下个处ç†å™¨ï¼Œå¦‚果没有下一个过滤器ž®±æŠŠè¯äh±‚å‘é€ç»™ç›®æ ‡
åœ?/span>web.xmlä¸è¦å¯?/span>Filter˜q›è¡Œé…ç½®
<filter>
<filter-name>xx</filter-name>
<filter-class>xxxxxxx</filter>
<init-param>
<param-name></param-name>
<param-value></param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>xx</filter-name>
<url-pattern>/fds/*</url-pattern>
</filter-mapping>
注æ„åQšä¸€ä¸?/span>Filterå¯ä»¥æœ‰å¤šä¸?/span>Filter-mappingåQŒå°±æ˜¯å¯¹å¤šä¸ªweb¾l„äšg˜q‡æ×oåQ›ä¸€ä¸ªç»„件也å¯ä»¥æœ‰å¤šä¸?/span>Filter
å…ã€?/span>JSP错误™åµé¢çš„声æ˜?/span>
¾~–ç¨‹ä¸æŒ‡å®šé”™è¯¯é¡µé¢ï¼š
˜q™ä¸¤ç‚ÒŽ˜¯å¿…须的:
在害怕出错的JSP™åµé¢ä¸ŠæŒ‡å®?/span><%@page errorPage=”error.jsp”%>
在指定的处ç†é”™è¯¯çš„页é¢ä¸Š<%@page ... isErrorPage=”true”%>
对于应用æœåŠ¡å™¨æŠ›å‡ºçš„å¼‚å¸¸åQšï¼ˆweb.xmlåQ?/span>
<error-page>
<error-code>404</error-code>
<location>/Error.html</location>
</error-page>
七�/span>JSTL
1åQ?/span><c:out
value=”” > default </c:out>
Value是è¦è¾“出的内容,defaultå½?/span>valueä¸?/span>nullæ—Óž¼Œè¾“出的内å®?/span>
2åQ?/span><c:if
test=”” [var=”varName”]> body </c:if>
Test是布ž®”型表达å¼?/span>
3åQ?/span><c:choose> <when> and
<otherwise> </c:choose>
4) <c:forEach var=”” items=”” begin=”” end=””
step=””> ……</c:forEach>
var˜q代傿•°çš„åå—,itemsè¦è„P代的集åˆ
å…«ã€å…³äº?/span>EL表达å¼?/span>
当é‡åˆ?/span>EL表达å¼åŽåQŒå®¹å™¨å°†åœ?/span>pageã€?/span>requestã€?/span>sessionã€?/span>applicationä¸åŽ»æŸ¥è¯¢˜q™ä¸ªå¯¹è±¡