第一篇:Web常用工具類總結
表單后臺驗證;
package cn.kgli.utils;
import java.util.Enumeration;import java.util.UUID;
import javax.servlet.http.HttpServletRequest;
import org.apache.commons.beanutils.BeanUtils;
public class WebUtils {
//把request對象中的請求參數(shù)封裝到bean中
public static
try{
T bean = clazz.newInstance();
//username=aa password=bb email=aa@sina.com
Enumeration e = request.getParameterNames();
while(e.hasMoreElements()){
String name =(String)e.nextElement();//username=aaa password=123
String value = request.getParameter(name);
BeanUtils.setProperty(bean, name, value);
}
return bean;
}catch(Exception e){
throw new RuntimeException(e);
}
}
public static String makeId(){
//UUID
36位字符
return UUID.randomUUID().toString();}
}
package cn.itcast.web.formbean;
import java.util.HashMap;import java.util.Map;
import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
public class RegisterFormBean {
private String username;private String password;private String password2;private String email;private String birthday;
private Map
public Map
return errors;} public void setErrors(Map
this.errors = errors;} public String getUsername(){
return username;} public void setUsername(String username){
this.username = username;} public String getPassword(){
return password;} public void setPassword(String password){
this.password = password;} public String getPassword2(){
return password2;} public void setPassword2(String password2){
this.password2 = password2;} public String getEmail(){
return email;} public void setEmail(String email){
this.email = email;
} public String getBirthday(){ return birthday;} public void setBirthday(String birthday){ this.birthday = birthday;} /* private String username;用戶名不能為空,并且要是3-8的字符 abcdABcd private String password;密碼不能為空,并且要是3-8的數(shù)字 private String password2;兩次密碼要一致
private String email;
可以為空,不為空要是一個合法的郵箱 private String birthday;可以為空,不為空時,要是一個合法的日期
*
*/ public boolean validate(){
boolean isOk = true;
if(this.username==null || this.username.trim().equals(“")){
isOk = false;
errors.put(”username“, ”用戶名不能為空!“);}else{
if(!this.username.matches(”[a-zA-Z]{3,8}“)){
isOk = false;
errors.put(”username“, ”用戶名必須是3-8位的字母!“);
} }
if(this.password==null || this.password.trim().equals(”“)){
isOk = false;
errors.put(”password“, ”密碼不能為空!“);}else{
if(!this.password.matches(”d{3,8}“)){
isOk = false;
errors.put(”password“, ”密碼必須是3-8位的數(shù)字!“);
} }
//private String password2;兩次密碼要一致
if(this.password2!=null){
if(!this.password2.equals(this.password)){
isOk = false;
errors.put(”password2“, ”兩次密碼不一致!“);
}
}
//private String email;
可以為空,不為空要是一個合法的郵箱
// flx_itcast@sina.com.cn
if(this.email!=null){
if(!this.email.matches(”w+@w+(.w+)+“)){
isOk = false;
errors.put(”email“, ”郵箱不是一個合法郵箱!“);
}
}
//private String birthday;可以為空,不為空時,要是一個合法的日期
if(this.birthday!=null){
try{
DateLocaleConverter conver = new DateLocaleConverter();
conver.convert(this.birthday);
}catch(Exception e){
isOk = false;
errors.put(”birthday“, ”生日必須要是一個日期!“);
}
}
return isOk;}
}
package cn.itcast.web.controller;
import java.io.IOException;import java.lang.reflect.InvocationTargetException;import java.util.Date;
import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.beanutils.BeanUtils;import org.apache.commons.beanutils.ConvertUtils;import org.apache.commons.beanutils.locale.converters.DateLocaleConverter;
import cn.itcast.domain.User;import cn.itcast.exception.UserExistException;import cn.itcast.service.BusinessService;import cn.itcast.service.impl.BusinessServiceImpl;import cn.itcast.utils.WebUtils;import cn.itcast.web.formbean.RegisterFormBean;
public class RegisterServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
RegisterFormBean formbean = WebUtils.request2Bean(request, RegisterFormBean.class);
//表單校驗
if(formbean.validate()==false){
request.setAttribute(”formbean“, formbean);
request.getRequestDispatcher(”/WEB-INF/jsp/register.jsp“).forward(request,response);
return;
}
//把表單的數(shù)據填充到javabean中
User user = new User();
try {
//注冊字符串到日期的轉換器
ConvertUtils.register(new DateLocaleConverter(), Date.class);
BeanUtils.copyProperties(user, formbean);
user.setId(WebUtils.makeId());
BusinessService service = new BusinessServiceImpl();
service.registerUser(user);
request.setAttribute(”message“, ”注冊成功!“);
request.getRequestDispatcher(”/message.jsp“).forward(request, response);
}catch(UserExistException e){
formbean.getErrors().put(”username“, ”注冊用戶已存在!“);
request.setAttribute(”formbean“, formbean);
request.getRequestDispatcher(”/WEB-INF/jsp/register.jsp“).forward(request, response);
} catch(Exception e){
e.printStackTrace();//在后臺記錄異常
request.setAttribute(”message“, ”對不起,注冊失?。 ?;
request.getRequestDispatcher(”/message.jsp“).forward(request, response);
}
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);}
}
過濾器解決中文亂碼
package cn.itcast.web.filter;
import java.io.IOException;import java.io.UnsupportedEncodingException;
import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletRequestWrapper;import javax.servlet.http.HttpServletResponse;
public class CharacterEncodingFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse resp,F(xiàn)ilterChain chain)throws IOException, ServletException {
HttpServletRequest request =(HttpServletRequest)req;
HttpServletResponse response =(HttpServletResponse)resp;
request.setCharacterEncoding(”UTF-8“);
response.setCharacterEncoding(”UTF-8“);
response.setContentType(”text/html;charset=UTF-8“);
chain.doFilter(new MyRequest(request), response);
}
public void init(FilterConfig filterConfig)throws ServletException {
// TODO Auto-generated method stub
}
public void destroy(){
// TODO Auto-generated method stub
} }
class MyRequest extends HttpServletRequestWrapper{ private HttpServletRequest request;public MyRequest(HttpServletRequest request){
super(request);
this.request = request;
} @Override public String getParameter(String name){
String value = this.request.getParameter(name);
if(value==null){
return null;
}
if(!this.request.getMethod().equalsIgnoreCase(”get“)){
return value;
}
try {
value = new String(value.getBytes(”iso8859-1“),”UTF-8“);
} catch(UnsupportedEncodingException e){
throw new RuntimeException(e);
}
return value;}
}
分頁前端
<%@ page language=”java“ import=”java.util.*“ pageEncoding=”UTF-8“%> <%@taglib uri=”http://java.sun.com/jsp/jstl/core“ prefix=”c“%>
圖書信息
圖書名稱 | 作者 | 價格 | 圖片 | 描述 | 操作 |
${book.name } | ${book.author } | ${book.price } | ${book.description } |
當前第[${page.pagenum }]頁
總共[${page.totalpage }]頁,總[${page.totalrecord }]紀錄
第二篇:Web測試工具小結
Web測試工具小結
單元測試方面:(對開發(fā)人員比較有用)J-Unit工具。
功能測試方面:E-test是個不錯的選擇,功能很強大,由于不是采用Post URL的方式回放腳本,所以可以支持多內碼的測試數(shù)據(當然要程序支持)?;旧峡梢詰洞蟛糠值腤eb Site。
如果只是利用腳本回放代替手工勞動,或者做對頁面響應數(shù)的性能測試,Microsoft Web Application Stress Tool是個不錯的選擇。
另外,在性能測試方面,PureLoad也是一個不錯的工具,完全用Java寫成,可以測試各種C/S程序,如SMTP Server等。這兩個工具都是使用Post URL的方法測試Web Application的。對大量使用JavaScript的頁面不太適合。當然,如果程序在Unix,linux下面運行的話,可以直接編寫Shell腳本程序,更加方便。
另外,還有很多專門的工具,比如說Linkbot是專門作頁面鏈接測試的。
另外,測試流程管理工具也有不少,個人用過也一直在用的是Test Plan Control,短小精悍,不錯。
至于WinRunner和LoadRunner之類,因為沒有License,所以都沒怎么用過,慚愧。不過我看過一篇英國人評價英國測試市場上最流行的五個軟件的文章。WinRunner得分最高。
測試工具從測試的方法上可以分為兩種:白盒測試和黑盒測試
白盒測試工具主要有:
內存資源泄漏檢查:Numega中的bouncechecker,Rational的Purify等
代碼覆蓋率檢查:Numega中的truecoverage,Rational的Purecoverage,Telelogic公司的logiscope, Macabe公司的Macabe等
代碼性能檢查:Numega中的truetime,Rational的Quantify等
代碼靜態(tài)度量分析質量檢查工具:logiscope和Macabe等
黑盒測試工具主要有:
客戶端功能測試:MI公司的winrunner,compuware的qarun,Rational的SQA robot等等
服務器端壓力性能測試: MI公司的winload,compuware的qaload,Rational的SQA load等等
Web測試工具:MI公司的Astra系列,rsw公司的e-test suite等等
測試管理工具:rational的test manager,compuware的qadirector等等,此外還有缺陷跟蹤工具 trackrecord等。
數(shù)據庫測試工具:TestBytes
黑盒測試工具:QACenter、SQATeamTest,Rational Viaual Test。
回歸測試工具:Rational TeamTest,WinRunner(MI公司)
WEB系統(tǒng)測試工具:TEST,Workberch,Web Appication Stress Tool(WAS)
白盒測試工具:Numega、PuRe、軟件糾錯工具(Rational Purity)。
嵌入式測試工具:Logiscope(靜態(tài)測試工具)、CodeTest。
系統(tǒng)負荷測試工具:RationalPerformance
涵蓋測試工具范圍評估工具
軟件性能測試工具:LoadRunner(MI產品)、Rational Visual Qantify
測試管理工具:TestDirector(MI產品支持整個生命周期中測試流程管理)
第三篇:(總結)Web性能壓力測試工具之ApacheBench(ab)詳解
PS:網站性能壓力測試是性能調優(yōu)過程中必不可少的一環(huán)。只有讓服務器處在高壓情況下才能真正體現(xiàn)出各種設置所暴露的問題。Apache中有個自帶的,名為ab的程序,可以對Apache或其它類型的服務器進行網站訪問壓力測試。ApacheBench命令原理:
ab命令會創(chuàng)建很多的并發(fā)訪問線程,模擬多個訪問者同時對某一URL地址進行訪問。它的測試目標是基于URL的,因此,既可以用來測試Apache的負載壓力,也可以測試nginx、lighthttp、tomcat、IIS等其它Web服務器的壓力。ab命令對發(fā)出負載的計算機要求很低,既不會占用很高CPU,也不會占用很多內存,但卻會給目標服務器造成巨大的負載,其原理類似CC攻擊。自己測試使用也須注意,否則一次上太多的負載,可能造成目標服務器因資源耗完,嚴重時甚至導致死機。ApacheBench參數(shù)說明
格式:ab [options] [http://]hostname[:port]/path 參數(shù)說明:
-n requests Number of requests to perform //在測試會話中所執(zhí)行的請求個數(shù)(本次測試總共要訪問頁面的次數(shù))。默認時,僅執(zhí)行一個請求。
-c concurrency Number of multiple requests to make //一次產生的請求個數(shù)(并發(fā)數(shù))。默認是一次一個。-t timelimit Seconds to max.wait for responses //測試所進行的最大秒數(shù)。其內部隱含值是-n 50000。它可以使對服務器的測試限制在一個固定的總時間以內。默認時,沒有時間限制。-p postfile File containing data to POST //包含了需要POST的數(shù)據的文件,文件格式如“p1=1&p2=2”.使用方法是-p 111.txt。(配合-T)
-T content-type Content-type header for POSTing //POST數(shù)據所使用的Content-type頭信息,如-T “application/x-transferred: 203479961 bytes #整個過程中的HTML內容傳輸量
Requests per second: 337.67 [#/sec](mean)#最重要的指標之一,相當于LR中的每秒事務數(shù),后面括號中的mean表示這是一個平均值
Time per request: 2961.449 [ms](mean)#最重要的指標之二,相當于LR中的平均事務響應時間,后面括號中的mean表示這是一個平均值
Time per request: 2.961 [ms](mean, across all concurrent requests)#每個連接請求實際運行時間的平均值
Transfer rate: 16866.07 [Kbytes/sec] received #平均每秒網絡上的流量,可以幫助排除是否存在網絡流量過大導致響應時間延長的問題
Connection Times(ms)min mean[+/-sd] median max Connect: 0 483 1773.5 11 9052 Processing: 2 556 1459.1 255 11763 Waiting: 1 515 1459.8 220 11756 Total: 139 1039 2296.6 275 11843 #網絡上消耗的時間的分解,各項數(shù)據的具體算法還不是很清楚 Percentage of the requests served within a certain time(ms)50% 275 66% 298 75% 328 80% 373 90% 3260 95% 9075 98% 9267 99% 11713 100% 11843(longest request)#整個場景中所有請求的響應情況。在場景中每個請求都有一個響應時間,其中50%的用戶響應時間小于275毫秒,66%的用戶響應時間小于298毫秒,最大的響應時間小于11843毫秒。對于并發(fā)請求,cpu實際上并不是同時處理的,而是按照每個請求獲得的時間片逐個輪轉處理的,所以基本上第一個Time per request時間約等于第二個Time per request時間乘以并發(fā)請求數(shù)??偨Y:在遠程對web服務器進行壓力測試,往往效果不理想(因為網絡延時過大),建議使用內網的另一臺或者多臺服務器通過內網進行測試,這樣得出的數(shù)據,準確度會高很多。如果只有單獨的一臺服務器,可以直接本地測試,比遠程測試效果要準確。
? Apache下載
? 進入apache服務器官網http://httpd.apache.org/,這里我們以下載穩(wěn)定版的
httpd 2.2.29為例,點擊download。? 2 由于官方網頁改版,以前的方式可能五法進行下載,為了不浪費大家的時間,特此修正2015-01-24 第一步依舊是點擊download ? 3 點擊鏈接Files for Microsoft Windows 步驟閱讀 ? 4 The Apache HTTP Server Project itself does not provide binary releases of software, only source code.Individual committers may provide binary packages as a convenience, but it is not a release deliverable.If you cannot compile the Apache HTTP Server yourself, you can obtain a binary package from numerous binary distributions available on the Internet.Popular options for deploying Apache httpd, and, optionally, PHP and MySQL, on Microsoft Windows, include: ApacheHaus Apache Lounge BitNami WAMP Stack WampServer XAMPP 大致意思是說apache本身不提供已編譯的安裝包,只提供源碼,如果你自己無法編譯,可以選擇下面這些官方推薦的第三方提供編譯的網站。
其中后兩個是有名的wamp以及xampp集成環(huán)境,如果只想下載apache可以選擇前三個網站,這里我們第一個ApacheHaus為例。? 5 打開ApacheHaus之后你會發(fā)現(xiàn)這個網站上有各種windows版本,可以盡情選擇你要下載的版本。? 6 點擊紅框中的圖標即可開始下載,x86是32位的,x64是64位的,根據自己的操作系統(tǒng)選擇下載
? Apache安裝
? 2 打開ApacheHaus之后你會發(fā)現(xiàn)這里有許多的windows版的Apache版本 這里簡單的介紹一下:x86代表32位,x64代表64位。根據自己安裝的系統(tǒng)選擇
關于vc9與vc11,這里的選擇要跟PHP對應才能穩(wěn)定的運行。(按照PHP官方提供的資源來看,PHP 5.5以后的版本官方只提供了VC11版本的產品程序,PHP5.3/5.4版還有VC9版本的產品程序)? 3 注意建立好自己的文件存放方式,方便以后管理
下 載完畢后解壓,將解壓的 Apache24文件夾復制到自己的項目目錄里面。你的項目根目錄為E:/wamp/Apache24/htdocs即DocumentRoot的定義。如果想放到其他目錄下,需要修改httpd.conf,包括ServerRoot、DocumentRoot、Directories,ScriptAlias。需要改為你的Apache目錄的地址。? 4 因為這里我們下載的是官方源碼包,所以需要把Apache服務安裝到我們的計算機上面
開啟控制臺:win+R 輸入cmd 命令行下進入到apache下面的bin目錄,輸入
httpd-k install 把apache安裝成windows后臺服務。? 5 所有基本的命令都可以在Apache官網上找到,下面是一些常用的命令 ? 6 最后使用ApacheMonitor來管理apache服務器 訪問測試是否成功
? 對大家遇到的一些問題做下簡單總結
1、由于apache默認是監(jiān)聽80端口,如果你的電腦iis是啟動狀態(tài),并且也使用了80端口,apache將無法正常啟動,需要先停止iis,另外迅雷也可能會使用80端口,所以也要關閉迅雷。查看80端口是否被占用,命令行下輸入: netstat-aon|findstr “80” 如果看到如圖的結果,說明80端口已被使用,需要先關閉相關軟件,或者修改apache默認的監(jiān)聽端口
打開apache目錄下的conf/httpd.conf 搜索 “Listen 80” 修改為Listen 8088 保存之后再重新啟動apache
2、httpd-k install 輸入該命令后查看服務是否安裝成功 開始-->運行-->services.msc-->確定
打開后如果在服務列表能夠看到apache字樣,說明,服務安裝成功,可以直接點擊左邊的啟動按鈕來啟動服務 ? 13
3、服務無法正常安裝,首先確定軟件32位和64位是否和自己的系統(tǒng)匹配 其 次,看電腦有沒有安裝軟件相應的運行包,比如你下載的是VC9版本,那么你需要先安裝Microsoft Visual C++ 2008 Redistributable,同理VC11版本你需要安裝Microsoft Visual C++ 2012 Update 4 Redistributable Package(X86 & x64)在ApacheHaus網站的最底部提供了相應的Visual Studio Redistributable Packages下載鏈接
第四篇:web基礎總結
html 小結
html不區(qū)分大小寫
標簽的類型與運用:
//文檔主體部分
//字體類型
//框架
//字體大小//橫線
//圖片
//列表選項
//段落標志
//設定文本格式
//選擇列表
//強調文本
//下標
//上標
屬性:
Position:
第五篇:web 算法總結
1.去掉超鏈接的下畫線: 在
//添加這句就行。 2.格式為:你需要添加下畫線的文字 3.獲取時間我們可以通過使用DataTime這個類來獲取當前的時間。通過調用類中的各種方法我們可以獲取不同的時間:如:日期(2008-09-04)、時間(12:12:12)、日期+時間(2008-09-04 12:11:10)等。
//獲取日期+時間
DateTime.Now.ToString();
// 2008-9-4 20:02:10 DateTime.Now.ToLocalTime().ToString();
// 2008-9-4 20:12:12 //獲取日期
DateTime.Now.ToLongDateString().ToString();
// 2008年9月4日 DateTime.Now.ToShortDateString().ToString();
// 2008-9-4 DateTime.Now.ToString(“yyyy-MM-dd”);
// 2008-09-04 DateTime.Now.Date.ToString();
// 2008-9-4 0:00:00 //獲取時間 DateTime.Now.ToLongTimeString().ToString();
// 20:16:16 DateTime.Now.ToShortTimeString().ToString();
// 20:16 DateTime.Now.ToString(“hh:mm:ss”);
// 08:05:57 DateTime.Now.TimeOfDay.ToString();
// 20:33:50.7187500 //其他
DateTime.ToFileTime().ToString();
// ***000 DateTime.Now.ToFileTimeUtc().ToString();
// ***750 DateTime.Now.ToOADate().ToString();
// 39695.8461709606 DateTime.Now.ToUniversalTime().ToString();
// 2008-9-4 12:19:14 DateTime.Now.Year.ToString();
獲取年份
// 2008 DateTime.Now.Month.ToString();
獲取月份
// 9 DateTime.Now.DayOfWeek.ToString();獲取星期
// Thursday DateTime.Now.DayOfYear.ToString();獲取第幾天
// 248 DateTime.Now.Hour.ToString();
獲取小時
// 20 DateTime.Now.Minute.ToString();
獲取分鐘
// 31 DateTime.Now.Second.ToString();
獲取秒數(shù)
// 45 //n為一個數(shù),可以數(shù)整數(shù),也可以事小數(shù) dt.AddYears(n).ToString();
//時間加n年 dt.AddDays(n).ToString();
//加n天 dt.AddHours(n).ToString();
//加n小時 dt.AddMonths(n).ToString();
//加n個月 dt.AddSeconds(n).ToString();
//加n秒 dt.AddMinutes(n).ToString();
//加n分 SQL語句使用時間和日期的函數(shù)
getdate():獲取系統(tǒng)當前時間
dateadd(datepart,number,date):計算在一個時間的基礎上增加一個時間后的新時間值,比如:dateadd(yy,30,getdate())datediff(datepart,startdate,enddate):計算兩個時間的差值,比如:datediff(yy,getdate(),'2008-08-08')dataname(datepart,date):獲取時間不同部分的值,返回值為字符串 datepart(datepart,date):和datename相似,只是返回值為整型 day(date):獲取指定時間的天數(shù) month(date):獲取指定時間的月份 year(date):獲取指定時間的年份 select year(getdate()):當前年份