??xml version="1.0" encoding="utf-8" standalone="yes"?> 1.新徏一个projectQ然后右击选择properties-----Java Build Path-----Libraries---AddLibrary---JunitQ将Junit插gd到该目中?/p>
2.在project中徏立一个JDemo.java ?Test.javaQJDemo中由一个简单的Ҏadd(),Test要承TestCaseQ代码如下: JDemo.java 3.q行Q右击Junit TestQ在控制C会出来一个Junit选项卡,如果出现lK色的bar则说明程序正,如果是红颜色的bar则说明程序错误,需q行错? 下面看一个Junit4的例?/p>
Junit4不需要承TestCaseQ只需使用@Test标注的expected属性, 新徏一个projectQ将JFreeChar的jar包导入到该projectQ然后新Z个SalesCountServlet .java 代码如下Q?/p>
q行E序后就会在d盘根目录下找C个SalesCount.jpg的文Ӟ打开昄l果如下Q?
希望各位大虾不吝赐教Q?/p>
下面对log4jq行单介l:Log4j中有三个主要的组Ӟ它们分别?Logger、Appender和Layout?.Appender则是用来指明所有的log信息存放C么地方,Log4j中支持多UappenderQ如 console、files、GUI components、NT Event Loggers{,一个Logger可以拥有多个AppenderQ也是你既可以Log信息输出到屏q,同时存储C个文件中?.Layout的作用是控制Log信息的输出方式,也就是格式化输出的信息?.Log4j中将要输出的Log信息定义?U别,依次是FATAL、ERROR、WARN、INFO、DEBUGQ当输出Ӟ只有U别高过配置文g中规定的U别信息才能真正的输出。Log4j支持?U格式的配置文gQXML格式?a >Java的property格式?/p>
看一个demoQ新Z个Log4jDemo的javaWeb工程Q徏一个Demo1.java 代码如下: 在web.xml中进行配|,代码如下Q?
导入log4j.jar和log4j.propertie配置文gQ配|文件代码如下:
#U别由高C依次是:fatal、error、warn、info、debug log4j.appender.R=org.apache.log4j.DailyRollingFileAppender log4j.appender.stdout=org.apache.log4j.ConsoleAppender # %r 自程序开始后消耗的毫秒?br />
# %t 表示日志记录h生成的线E?br />
# %p 表示日专语句的优先 有关代码的说明已l在配置文g中说了,在此׃再多做说明?/p>
在浏览器中输入访问地址Q在控制C׃打印Z息: 2011-01-18 14:52:39,531 [http-8080-1] [com.dr.demo1.Demo1] [INFO] - welcome to log4j demo! 到q吧Q有不对的地方希望各位大虾不吝赐教! 具体说一下怎样完成一个Web的开发和配置 1.建立一个承HttpServlet的类Q在里面写从HttpServlet得到的方法,在HttpServlet里有四个常用的方法:doPutQdoPostQdoGetQdoDelete其中doGet和doPost最为常用?/p>
2.然后是配置了,打开web.xml文g
其中name1和name2必须相等
3.是验证是否正确 下面看一个程?/p>
配置文g里内?
验证Q先q行tomcat然后打开IE览器,在地址栏中写入 http://127.0.0.1:8080/webproject/test 然后回RQ会看到|页是空白的Q什么也没有 在控制台上你会看见输出的内容“hello”Q这p明配|成功了Q?/p>
在上面程序doGetҎ中写?/p>
执行验证操作׃在网上昄
下面l说一下doGetҎ和doPostҎ的区别:
doGet的方法会把你的信息写到地址栏中Q而doPost的方法不?
用例子来做说明:
在该工程下的webroot文g夹下建立一个login.html文g
里面建立一个登录界?
body中的代码如下
在上面红颜色的程序中method的方法是与你写的那个E序中用的是doGetҎq是doPostҎ
q样在地址栏中输入http://127.0.0.1:8080/webproject/login.html ׃产生如下 一个登陆界?/p>
在̎号中输入123 在密码中输入456 点击“d”按钮Q就会{C面界?/p>
在这个网늚地址栏中你会看到 http://127.0.0.1:8080/webproject/test?user=123&password=456 q样将自己的相关信息泄露出Mq就是doGet的缺?/p>
上q程序ServletE序中的ҎҎdoPostҎQ将login.html中的body中红颜色中的代码改ؓmethod="post"Q在q行上面l果Q在账号中输?23 在密码中输入456 点击“d”按钮 地址栏中的内容ؓQ?/p>
http://127.0.0.1:8080/webproject/test q样不会丢失自己的信?/p>
]]>
]]>
以MyElipse 8.5 q行说明?/p>
assertEquals(a,b)
a是否{于b
assertSame(a,b)
a,b是否引用同一个对?/td>
assertNull(a)
a为空Qa是一个对?/td>
assertNotNull(a)
a不ؓI,a是一个对?/td>
assertTrue(a)
a为真Qa可以是一个条件判断语?/td>
assertFalse(b)
b为假Qb可以是一个条件判断语?/td>
package com.bx.testjunit;
public class JDemo {
int a;
int b;
int result;
public int add(int a,int b){
result = a + b;
return result;
}
}
Test.java
package com.bx.testjunit;
import junit.framework.TestCase;
import org.junit.After;
import org.junit.Before;
public class Test extends TestCase{
@Before
public void setUp() throws Exception {
System.out.println("Test :setUp");
}
@After
public void tearDown() throws Exception {
System.out.println("Test :tearDown");
}
public void test(){
JDemo a = new JDemo();
assertEquals(6,a.add(3, 3));
}
}
上面的程序用的是Junit3Q必ȝ承TestCase
package com.bx.service;
import org.junit.Test;
public class HelloWorld {
@Test
public void test(){
System.out.println("HelloWord :test");
}
}
上面只是在下的一点点愚见Q有不对的还请各位大虾批评指?谢谢Q?/p>
package com.dr.demo;
import java.awt.Color;
import java.awt.Font;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartUtilities;
import org.jfree.chart.JFreeChart;
import org.jfree.chart.axis.CategoryAxis;
import org.jfree.chart.axis.CategoryLabelPositions;
import org.jfree.chart.axis.ValueAxis;
import org.jfree.chart.plot.CategoryPlot;
import org.jfree.chart.plot.PlotOrientation;
import org.jfree.chart.title.TextTitle;
import org.jfree.data.category.CategoryDataset;
import org.jfree.data.category.DefaultCategoryDataset;
public class SalesCountServlet {
protected static void doGet() {
System.out.println("图表已经建立Q?/span>");
CategoryDataset dataset = getDataSet();
String fileName = "SalesCount.jpg";//文g名称
JFreeChart chart = ChartFactory.createBarChart3D("产品销量图", // 图表标题
"产品", // 目录轴的昄标签
"销?/span>", // 数Du的显C标{?/span>
dataset, // 数据?/span>
PlotOrientation.VERTICAL, // 图表方向Q水q뀁垂?/span>
true, // 是否昄图例(对于单的q囑ֿLfalse)
false, // 是否生成工具
false // 是否生成URL链接
);
configFont(chart);//讄中文格式
FileOutputStream fos_jpg = null;
try {
String statImagePath = "d:";//存放图表的\?/span>
try {
fos_jpg = new FileOutputStream(statImagePath+ fileName);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
ChartUtilities.writeChartAsJPEG(fos_jpg, 0.5f, chart, 400, 300,null);
} catch (IOException e) {
e.printStackTrace();
}
} finally {
try {
fos_jpg.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
public static void configFont(JFreeChart chart){
// 配置字体
Font xfont = new Font("宋体",Font.PLAIN,12) ;// X?nbsp;
Font yfont = new Font("宋体",Font.PLAIN,12) ;// Y?nbsp;
Font kfont = new Font("宋体",Font.PLAIN,12) ;// 底部
Font titleFont = new Font("隶书", Font.BOLD , 25) ; // 囄标题
CategoryPlot plot = chart.getCategoryPlot();// 囑Ş的绘制结构对?nbsp;
// 囄标题
chart.setTitle(new TextTitle(chart.getTitle().getText(),titleFont));
// 底部
chart.getLegend().setItemFont(kfont);
// X ?nbsp;
CategoryAxis domainAxis = plot.getDomainAxis();
domainAxis.setLabelFont(xfont);// 轴标?nbsp;
domainAxis.setTickLabelFont(xfont);// 轴数?nbsp;
domainAxis.setTickLabelPaint(Color.BLUE) ; // 字体颜色
domainAxis.setCategoryLabelPositions(CategoryLabelPositions.UP_45); // 横u上的label斜显C?nbsp;
// Y ?nbsp;
ValueAxis rangeAxis = plot.getRangeAxis();
rangeAxis.setLabelFont(yfont);
rangeAxis.setLabelPaint(Color.BLUE) ; // 字体颜色
rangeAxis.setTickLabelFont(yfont);
}
private static CategoryDataset getDataSet() {
DefaultCategoryDataset dataset = new DefaultCategoryDataset();
dataset.addValue(20, "销售图?/span>", "Ҏ");
dataset.addValue(20, "销售图?/span>", "?/span>");
dataset.addValue(30, "销售图?/span>", "香蕉");
dataset.addValue(40, "销售图?/span>", "葡萄");
dataset.addValue(50, "销售图?/span>", "桔子");
return dataset;
}
public static void main(String args[]){
doGet();
}
}
package com.dr.demo1;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
public class Demo1 extends HttpServlet{
private static Logger log = Logger.getLogger(Demo1.class);
public void doGet(HttpServletRequest request,HttpServletResponse response){
log.info("welcome to log4j demo!");
}
}
<servlet>
<servlet-name>demo</servlet-name>
<servlet-class>com.dr.demo1.Demo1</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>demo</servlet-name>
<url-pattern>/demo</url-pattern>
</servlet-mapping>
log4j.rootLogger=INFO,R,stdout
#debug 无法打印
#log4j.rootLogger=ERROR,R,stdout
#debug/infor/warn 无法打印
#log4j.rootLogger=DEBUG,R,stdout
#都可以打?br />
#log4j.rootLogger=warn,R,stdout
#info/debug无法打印
#log4j.rootLogger=fatal,R,stdout
#都不可以打印
#log4j.logger.com.cmcc=DEBUG
# 日志信息存放的文件位|?br />
log4j.appender.R.File = ${catalina.home}/logs/fetionwapim.log
log4j.appender.R.DatePattern = yyyy-MM-dd'.log'
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss,SSS} [%t] [%c] [%p] - %m%n
# %r 与日志请求相关的cd名称
# %c 日志信息所在的cd
# %m%n 表示日志信息的内?
]]>
]]> <servlet>
<servlet-name>name1</servlet-name>
<servlet-class>cȝ路径</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>name2</servlet-name>
<url-pattern>/映射?/span></url-pattern>
</servlet-mapping>
package com.dr.servlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Servlet extends HttpServlet{
public void doGet(HttpServletRequest request,HttpServletResponse response)
{
System.out.println("hello");
}
}
<servlet>
<servlet-name>Servl</servlet-name>
<servlet-class>com.dr.servlet.Servlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Servl</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
PrintWriter out=null;
try {
out=response.getWriter();
} catch (IOException e) {
e.printStackTrace();
}
out.println("Hello World Servlet");
}
<form name="f1" id="f1" action="/webproject/test" method="get">
<table>
<tr>
<th>账号:</th>
<th><input type="text" name="user" id="user"></th>
</tr>
<tr>
<th>密码:</th>
<th><input type="text" name="password" id="password"/></th>
</tr>
<tr>
<th colspan="5" align="center"><input type="submit" value="d"/></th>
</tr>
</table>
</form>
]]>
2.选择Next
3.选择Tipical然后选择Next
4.选择Install
5.选择Next
6.选择Next
7.选择FinishQ就完成了My SQL 的安装,接下来是配置My SQL
8.选择Next
9.选择Detailed configurationQ然后选择Next
10选择Developer MachineQ选择Next
11.选择Mutilfunction DatabaseQ选择Next
12.选择Next
13.选择Manual SettingQConcurrent Connections选择1400Q选择Next
14.选择Next
15.选择大的Q号QCharacter Set 选择utf8Q选择Next
16.N?#8220;Include Bin Dirctory in Windows PATH”Q选择Next
17.如果以前使用q其他版本,那么输入原来的密码,然后在输入新的密码,如果没有只需输入新的密码Q勾?#8220;Enable root access from remote machines”Q选择Next
18.选择ExecuteQ如果出现如下界面表C配|成功,否则需重新配置
出现如下界面Q?/p>
2.选择next
3.N?#8220;I accept the terms of the lincense agreement”Q选择next
4.选择ChangeQ改变安装\径,一般情况下安装在C盘根目录下:
5.选择BrowseQ改变安装\径,然后选择next
6.选择InstallQ就会开始安装,文g比较大,所以安装的速度比较?/p>
接下来是选择workspace
7.选择你的workspace然后单击ok完成了Q?/p>