第一篇: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对象中的请求参数封装到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的数字 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位的数字!“);
} }
//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;
}
//把表单的数据填充到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,FilterChain 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测试工具小结
单元测试方面:(对开发人员比较有用)J-Unit工具。
功能测试方面:E-test是个不错的选择,功能很强大,由于不是采用Post URL的方式回放脚本,所以可以支持多内码的测试数据(当然要程序支持)。基本上可以应付大部分的Web Site。
如果只是利用脚本回放代替手工劳动,或者做对页面响应数的性能测试,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等
代码静态度量分析质量检查工具: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等。
数据库测试工具:TestBytes
黑盒测试工具:QACenter、SQATeamTest,Rational Viaual Test。
回归测试工具:Rational TeamTest,WinRunner(MI公司)
WEB系统测试工具:TEST,Workberch,Web Appication Stress Tool(WAS)
白盒测试工具:Numega、PuRe、软件纠错工具(Rational Purity)。
嵌入式测试工具:Logiscope(静态测试工具)、CodeTest。
系统负荷测试工具:RationalPerformance
涵盖测试工具范围评估工具
软件性能测试工具:LoadRunner(MI产品)、Rational Visual Qantify
测试管理工具:TestDirector(MI产品支持整个生命周期中测试流程管理)
第三篇:(总结)Web性能压力测试工具之ApacheBench(ab)详解
PS:网站性能压力测试是性能调优过程中必不可少的一环。只有让服务器处在高压情况下才能真正体现出各种设置所暴露的问题。Apache中有个自带的,名为ab的程序,可以对Apache或其它类型的服务器进行网站访问压力测试。ApacheBench命令原理:
ab命令会创建很多的并发访问线程,模拟多个访问者同时对某一URL地址进行访问。它的测试目标是基于URL的,因此,既可以用来测试Apache的负载压力,也可以测试nginx、lighthttp、tomcat、IIS等其它Web服务器的压力。ab命令对发出负载的计算机要求很低,既不会占用很高CPU,也不会占用很多内存,但却会给目标服务器造成巨大的负载,其原理类似CC攻击。自己测试使用也须注意,否则一次上太多的负载,可能造成目标服务器因资源耗完,严重时甚至导致死机。ApacheBench参数说明
格式:ab [options] [http://]hostname[:port]/path 参数说明:
-n requests Number of requests to perform //在测试会话中所执行的请求个数(本次测试总共要访问页面的次数)。默认时,仅执行一个请求。
-c concurrency Number of multiple requests to make //一次产生的请求个数(并发数)。默认是一次一个。-t timelimit Seconds to max.wait for responses //测试所进行的最大秒数。其内部隐含值是-n 50000。它可以使对服务器的测试限制在一个固定的总时间以内。默认时,没有时间限制。-p postfile File containing data to POST //包含了需要POST的数据的文件,文件格式如“p1=1&p2=2”.使用方法是-p 111.txt。(配合-T)
-T content-type Content-type header for POSTing //POST数据所使用的Content-type头信息,如-T “application/x-transferred: 203479961 bytes #整个过程中的HTML内容传输量
Requests per second: 337.67 [#/sec](mean)#最重要的指标之一,相当于LR中的每秒事务数,后面括号中的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 #网络上消耗的时间的分解,各项数据的具体算法还不是很清楚 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毫秒。对于并发请求,cpu实际上并不是同时处理的,而是按照每个请求获得的时间片逐个轮转处理的,所以基本上第一个Time per request时间约等于第二个Time per request时间乘以并发请求数。总结:在远程对web服务器进行压力测试,往往效果不理想(因为网络延时过大),建议使用内网的另一台或者多台服务器通过内网进行测试,这样得出的数据,准确度会高很多。如果只有单独的一台服务器,可以直接本地测试,比远程测试效果要准确。
Apache下载
进入apache服务器官网http://httpd.apache.org/,这里我们以下载稳定版的
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集成环境,如果只想下载apache可以选择前三个网站,这里我们第一个ApacheHaus为例。 5 打开ApacheHaus之后你会发现这个网站上有各种windows版本,可以尽情选择你要下载的版本。 6 点击红框中的图标即可开始下载,x86是32位的,x64是64位的,根据自己的操作系统选择下载
Apache安装
2 打开ApacheHaus之后你会发现这里有许多的windows版的Apache版本 这里简单的介绍一下:x86代表32位,x64代表64位。根据自己安装的系统选择
关于vc9与vc11,这里的选择要跟PHP对应才能稳定的运行。(按照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默认是监听80端口,如果你的电脑iis是启动状态,并且也使用了80端口,apache将无法正常启动,需要先停止iis,另外迅雷也可能会使用80端口,所以也要关闭迅雷。查看80端口是否被占用,命令行下输入: netstat-aon|findstr “80” 如果看到如图的结果,说明80端口已被使用,需要先关闭相关软件,或者修改apache默认的监听端口
打开apache目录下的conf/httpd.conf 搜索 “Listen 80” 修改为Listen 8088 保存之后再重新启动apache
2、httpd-k install 输入该命令后查看服务是否安装成功 开始-->运行-->services.msc-->确定
打开后如果在服务列表能够看到apache字样,说明,服务安装成功,可以直接点击左边的启动按钮来启动服务 13
3、服务无法正常安装,首先确定软件32位和64位是否和自己的系统匹配 其 次,看电脑有没有安装软件相应的运行包,比如你下载的是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不区分大小写
标签的类型与运用:
//文档主体部分
//字体类型
//框架
//字体大小//横线
//图片
// 列表项目//列表选项
//段落标志
//设定文本格式
//选择列表
//强调文本
//下标
//上标
属性:
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();
获取秒数
// 45 //n为一个数,可以数整数,也可以事小数 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语句使用时间和日期的函数
getdate():获取系统当前时间
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):获取指定时间的天数 month(date):获取指定时间的月份 year(date):获取指定时间的年份 select year(getdate()):当前年份