欢迎光临
我们一直在努力

OSS报表系统实训笔记-JSP教程,Java技巧及代码

建站超值云服务器,限时71元/月

   oss报表系统 实训笔记

                  实训公司:中科天地 (王海格,老师超好)

                                    edited by hen egg ,michelangelo

2005-2-21

8:00

jasperreport 开支

面向oo 应用服务器

java 开源数据库

j2ee 需求分析

 

 

成绩:

课堂表现

项目

 

 

项目:

l         java平台

(1)       (编程语言)开发环境(编译器)

(2)       部署环境(应用服务器)(jdk提供软件运行服务器及基本运行条件,在此基础上的开发需要配置) 目的是重用 (相关工具类)

(3)      运行环境(操作系统)

–jvm虚拟机是操作系统,即运行环境

–java包 文件性

–垃圾收集 内存管理

–虚拟cpu (优势)

–线程

 

 

(1)+(2)+(3) 统一环境 简单开发

 

 

l         java语言

1. oo(最重要的特征)——很大的系统

2.  可移植性jvm (并不重要)

3. 分布式 jvm+appserver ——跨平台的系统

充分利用网络资源 跨地域跨国界

4. 安全性

unix:安全性强类型

jvm内置强安全性 >unix

关键业务

1.  人命

医疗 检查公安 重型工业 航空

2.  钱

银行

 

 

小结:

jvm是操作系统

java是面向对象,分布式,安全的语言

 

 

ps:以上红字粗体部分为java关键技术

 

 

l         java虚拟机

1.垃圾收集

2.分布式 支持各种协议

3.多线程 线程管理

4.安全性

 

 

概念

模拟了一台计算机

 

 

功能

1.垃圾回收:

(在内存中)new的对象被装载到对象堆中

a = new air;

new 出一个对象

调用构造函数,分配在对象堆中

返回一个引用

引用计数器++

当计数器减为0,该变量变成垃圾,从名单里除去。

垃圾收集作用:内存泄漏,空指针

垃圾收集机制:

后台精灵线程:当cpu出现闲置,调用该线程(优先级低) 要求cpu很快 有闲置的时候(用java 先cpu再内存再次网卡)

 

 

2.提供运行时环境

操作系统的功能,负责调入代码,监督代码运行,帮助程序做输入输出,给程序提供一系列的支持

提供 cpu 寄存器 网络读写 文件系统 安全性

class loader 加载

byte code verifier文件格式 语法 数组越界

校验4遍

interpreter: 中间代码

jit 即时编译 (快)(编译成本地代码)

 

 

安装jdk

配置环境变量

java_home c:\j2sdk

path ;%java_home%\bin

classpath .;%java_home%\lib

(ps:dos窗口不能自动刷新,改变环境变量后记得重新开)

14:00

类:

自定义

抽象

 

 

包:

package

把功能相近的类组合在一起

包是相对路径,相当于windows里的文件夹

import一个包 就引入了一个命名空间

import不等于include

没写包的话,系统默认一个包

 

 

java代码三部分

1)        package com.project.src

2)        import java.io.*;

3)        类

一个文件里可以有多个类,但是有且只有一个public类

 

 

eg1

1. static void main(string []args)

main method is not public

 

 

2. public void main(string []args)

exception in thread "main" java.lang.nosuchmethoderror: main

main是整个程序的入口,不能用new出来 由于是static方法所以在载入内存时便直接执行 以此作为其他程序的入口 但main不是关键字

 

 

3. public static main(string []args)

testhelloworld.java:4: invalid method declaration; return type required

        public static main(string[] args)

java规定必须有范围类型,没有返回值必须定义为void。但是构造函数不允许有返回类型。

 

 

4. public static void main(string []args) == static public void main(string []args)

访问控制符和修饰符位置任意。但习惯把访问控制符放前面

 

 

5.但是返回类型 不能放在上面两者前面

testhelloworld.java:4: <identifier> expected

        void static public  main(string[] args)

             ^

testhelloworld.java:8: ( expected         //返回值必须贴紧方法名

}

^

2 errors

main不是关键字,但是自己不要用它。

6. string[] args

从arg[0]开始

 

 

注释:

调程序用

//

/*           */

javadoc注释

/**

*/

用javadoc变成文档

javadoc helloworld.java –d doc

 

 

java关键字&标识符&保留字

标识符 开头:字母(_, $)

编码规范:

1)        有意义的单词组成,第一个单词第一个字母小写,其他单词第一个字母大写

2)        变量名和方法名同等处理。

3)        常量由有意义的单词组成,所有单词全大写,单词之间用下划线分开。

4)        类名第一个字母大写

 

 

java数据类型

1.  基本数据类型(不是对象)

8种:

int, long, short, byte, float, double, char, bool.

2.  引用类型

对象只能通过引用访问

实际上是安全的指针

数组是引用类型(因为他在c语言里是指针类型)

默认:

char ‘\u0000’

bool false

引用 null

数组 null

 

 

表达式和流程控制

不要用++ –,容易引起误读 除了在循环里面

=与==: ==只能用于基本类型,不要用于引用类型。equals

短路运算符: if (lasting!=null)&&,||

把概率最高的判断放在前面,节省程序执行的时间

 

 

类型转换

高位转低位,必须进行强制类型转化 ,short与char的转换总要

 

 

传参和传值

基本类型传值

引用类型传引用

传的是变量的副本

 

 

控制流程,循环

最好不要用switch (破坏封装,消耗性能,破坏流程)

分支尽量用if else

循环尽量用for

while(true)在服务器中,做死循环用

别用do-while

 

 

练习1

强制类型转换

 

 

练习2

传参

 

 

 

 

2005-2-22

8:00

l         java oo

最早的面向对象smalltalk, 后来的c++, java, phyon, .net

smalltalk纯的 java不纯(基本类型等)

java是对面向对象的一个实现

 

 

对象   -> 数据 <-     操作

 

 

对象之间的关系 –> 消息

 

 

oo: 按符合人的思维习惯的逻辑来分析设计,形成了一套模式,即面向对象体系。

 

 

注意:

1. 不要去继承有代码的类。有代码的类请用对象的组合.

2. 继承抽象基类或接口(n个)。接口设计完,不能减少和修改,只能增加.

3. 多重继承本身没错,必不可少,但要限制多重或单继承,破坏封装性.

 

 

多态:

技术实现:

1.  编译时:src 检查形式类型(声明)

2.  运行时:jvm 检查实际类型

 

 

重载:

(编译时)

处理相同的方法名,不同的参数列表

在编译器里用方法签名区别。(method signature,由方法名+参数列表组成)

不要用运算符重载

 

 

 

 

14:00

类(实用类):

1.  类头

只有public 和 默认的,没有私有类

2.  属性

static 只保留一份拷贝。与类代码保存在一起

静态属性的构造方法: static {}块。

non-static

3.  方法

4.  构造方法(不是类的基本结构)

5.  static块

 

 

l         类的定义

[权限][修饰] class 类名 [extends 父类名][implements 接口列表]

{

       类体;

}

 

 

权限: 有 public —— 公有类

          无 public —— 同包类

修饰: abstract 抽象类,只能被继承(如果一个类里面有一个抽象方法,则这个类必须是抽象类。反之,抽象类不一定包含抽象方法)不能实例化

       final    终极类,完美类,不能被继承。只能实例化

 

 

ps:

1:一般静态变量被定义成常量

2:用静态方法不能访问实例变量,static

3:native 在java中调用本地c代码

4:构着方法:选择native(高级)

5:接口作为引用类型来使用,任何实现该接口的实例都可以存在该接口类型的变量中.

 

 

数据成员:

[权限][修饰] 类型 变量名[= 初值];

修饰: static 有 —— 类变量(类名点取)

       static 无 —— 实例变量 (对象名点取)

       final 用于修饰常量

                     static final int n=5; (90%以上用到static,就加final把它变成常量。光static破坏封装性)

 

 

方法成员:

[权限][修饰] 返回值类型 方法名(行参列表) (传值不传参)

{

方法体;

}

 

 

修饰: static  (静态方法不能访问实例对象)

          final  (不允许重载) (用不到)

       abstract (该类必须声明为抽象类)

       native 本地方法。可以调用本地代码,比如调用c代码。

 

 

成员权限

public > protected > (default) > private

default 同包类

protected 同包+子类

 

 

接口里的方法默认为: public abstract

 

 

构造方法:(仅能初始化非静态属性,静态方法不能操作非静态属性,反之可以)

方法名=类名

一般不是public访问权限

不能有任何修饰

无返回值类型

如果不提供构造方法,则系统提供一个无参的构造方法。但是存在任何自己写的构造方法,缺省的构造方法立即失效。

类继承的时候,不继承构造方法。

初始化父类super()。 如果父类是抽象基类,就不用加了。

 

 

super()

this()

 

 

接口定义

[权限] interface 接口名 [extends 接口列表]

{

       接口体;

}

可以继承多个接口。称为接口的拼装

接口一般声明为public

接口作为引用类型来使用。通过这些变量,可以访问所有实现该接口的方法。

 

 

练习:

1.mod02/exercise3

类的公有方法被称为类的接口。

写一个account类 放在包banking中

并用testbanking测试

 

 

2.在banking中添加类customer.

3.修改testbanking。用customer操作account。

 

 

2005-2-23

8:00

1.  需求分析(top n)

概念

业务

业务流程

2.  用例图(修正)

例:银行的账户account和客户customer关系

1)        客户有一个或多个账户

2)        账户与一个客户关联(例外:联名账户)

3)        客户私有、控制账户

 

 

需求分析

总体设计

详细设计

 

 

例:银行和客户、账号的关系

银行有若干个客户

客户可以选择多家银行(跨边界)

系统中只能有一家银行(系统边界)

银行应该对客户信息保全

银行拥有裁决权

银行类的内部创建帐户(银行类完全创建控制帐户)

 

 

要求:

创建客户

用户提交:姓、名、最初额度、身份证号码、六位密码

创建帐户

提交:

身份证号码、初始余额

 

 

业务:

身份证号码

帐户号码

密码

业务选择(参数):存取款 查余额

 

 

开会标准

概要设计

1.  需求会(10~15分钟)

分头写草图

2.  开会合并草图

修改草图

3.  提交修改草图

4.  合并修改草图

5.  画类图:每个类两个人

6.  组装至一台机器,编译运行

 

 

10:43——17:30

banking项目

 

 

2005-2-24

8:00

 

 

项目总评

细节问题:

1.只能有一个bank,设计方法:

sington设计模式:

构造方法私有,则不能从外界创建他

利用该类的静态常量来保存。

static final bank bookintance = new bank();

bank类被加载到内存里

new出一个bank实例,并存在静态区

private bank()

{

       customers = new customer[max];

       customernumber=0;

}

 

 

private static final bank bankinstance = new bank();

public static bank getbankinstance() {

       return bankinstance;

}

 

 

或:

private static final bank bankinstance = null;

public static bank getbankinstance() {

       if(bankinstance = null)

              bankinstance=new bank();

       return bankinstance;

}

 

 

在test.java中

bank abank= bank.getbankinstance();

 

 

3.  数组

引用数组是指针的指针,所以要判空

vector, list, arraylist (只能存一种类型的对象),也要判空

 

 

4.  密码管理方法不能用getpassword()。要用verify()。

 

 

上课内容:

 

 

异常

java中的异常

程序中60%代码用于处理异常

任何异常都被包装成异常对象

有异常时候,就抛出异常对象,给jvm。jvm去查调用栈

产生异常的代码不处理异常

好处

1)        用对象处理异常

2)        利用虚拟机作异常对象的传递

3)        正常代码和处理异常代码完全分开

 

 

try

{

unsafe;

} catch (异常类 e)

{

异常处理;

}

 

 

方法声明为throws,该方法实用时,必须放在try,catch结构中

public void f(int score) throws myexception

{

       if(score<0||score>100)

              throw new myexceptino(“”);

}

继承类的时候,不能抛出超出父类的异常。

 

 

tips:

接口是用来统领类,分类类的

类是用来实现接口的,实例化接口的一个工具

 

 

i/o 流

输入流,输出流 是控制同一个流

字符型,字节型

 

 

类库里凡是有stream都是字节流,有reader就是字符流

inputstreamreader把字节流转换为字符流

//把system.in转化为一个带缓冲的字符流

bufferedreader in=new bufferedreader(new inputstreamreader(system.in))

in.readline()

 

 

网络

添加

client端,server端,协议解释器

socket连接

协议自己定

协议的解析器

 

 

new serversocket

 

 

accept()

 

 

new socket

 

 

实例:

server端

1.new一个serversocket

try{

 s=new serversocket(5432);

}catch (ioexception e){}

2.建一个死循环

while(true)

{

try{

socket s1=s.accept();

}catch(ioexception e){}

}

3.用产生的普通socket通讯

outputstream s1out=s1.getoutputstream();

dataoutputstream dos=new dataoutputstream(s1out);

 

 

dos.writeutf(input);

dos.close();

s1.close();

 

 

client端

1.  建一个普通socket

socket s1= new socket(“127.0.0.1”, 5432)

2.用socket通讯

inputstream is = s1.getinputstream();

datainputstream dis = new datainputstream(is);

system.out.println(dis.readutf());

 

 

dis.close();

s1.close();

 

 

作业:

1.  用例和流程

2.  设计类库,server结构

 

 

2005-2-25

8:00

 

 

多线程

业务需求 并发访问

技术需求 多进程、多线程

i/o流阻塞当前进程

 

 

技术

模型一

1.  创建线程的线程

2.  线程中跑的代码是哪一个对象的代码

 

 

定义一个实现runnable接口的类,实现他的run()方法,然后将这个类的实例作为thread构造方法的参数。创建thread类的实例。

 

 

在服务器里

new thread(object );        //object工具类,存所有参数。(包含业务代码)

.start.

 

 

构造这个类

class businessclass implements runnable

{

       public void run()

       {

              代码; //调用其他对象完成业务和交互。

       }

}

见exercise/mod15/exercise1

 

 

内部类

外->内代码(功能)

内->外部非公有

需要实用内部类

 

 

小结:

1.    new thread( 类 )

2.    定义这个类, implements runnable

 

 

c/s bank项目

11:00 ~ 2005-2-26 17:40

 

 

2005-3-7

8:00

复习:

面向对象:清晰,封装,抽象(针对接口编程),复用(io类,集合类)

 

 

c/s -> b/s

区别:

c/s是基于操作系统的(jvm)和基本类库(jdk)的开发模式。

b/s 是基于已有“容器”的开发模式。

 

 

b/s优点:屏蔽底层的东西

1.  给商业系统的开发带来方便,重用基础代码和服务(事务安全性)

2.  可以使用经证明有效(率)的软件架构(j2ee核心模式 mvc)

3.  商业的技术支持(第三方)

 

 

c/s优点:

1.  完全控制client, server端的结构,使用自定义的通讯/业务协议

2.  可以精确定义底层服务,减少冗余和错误

3.  所有的开发代码都是透明的,不存在黑箱

 

 

用途

b/s 用于比较大型的,面向最终用户的商业系统(财务、人事、物流、电子商务、工作流)

c/s 用于各种软件系统(用于二次开发),或软件产品;特殊专用的商业系统(银行,国防部)

 

 

c/s 是b/s的基础。前者用的技术后者都能用到,反之不成立。

 

 

b/s几种流行的架构

都是一种开发模式,实现技术变化中

1.  j2ee (开发模式 不是开发技术)

2.  .net

3.  php

4.  cgi(perl, c)

 

 

 

 

 

 

 

 

 

 

 

 

j2ee开发模式结构:

系统功能

客户端

web层

控制层

业务层

数据操作层

容器

浏览器

web服务器,jsp/servlet容器

jsp/servlet容器,ejb容器

ejb容器,servlet容器

ejb容器, servlet容器

技术

html, css, xml, javascript, applet

http, jsp, servlet, html

jsp/servlet,ejb,javabean

ejb,javabean,servlet

ejb(entity),dao, jdo, r/o mapping

辅助技术

美工,flash

资源文件(国际化),mvc

资源文件(国际化),mvc。

针对容器本身的配置文件,jndi

jms,jta

 

 

tips:

jndi:java的目录服务(java naming and directory interface)

jms:java消息服务

jta:java事务服务

ejb强侵入型容器,不推荐使用。

ejb基于的两个技术:rmi和序列化

 

 

重要级:

要学的,重要的:html, xml格式,http, jsp,servlet,javabean

要熟的:html,javascript, dao,mvc (这两个是两种架构)

看一下:ejb,jndi,jms,jta

 

 

10:00

 

 

html/jsp

html表单

jsp 计算->服务器

痩客户端

client                                     server端

浏览器brower  —————-à                  jsp

                                             | compile

                                          servlet  ————————–à后台调用

                                             | run

                                           html

过程

1)        发请求http协议

2)        生成两个对象request, response

3)        编译servlet

4)        显示部分硬编码

5)        返回给客户

 

 

 

 

html:

xml

<table>

<form> 表单

1)      收集用户输入

2)      通过http协议,提交参数到制定的url(简化了从客户端传到服务器端的过程,但是服务器端传回来的功能就大大减弱了)

 

 

jsp表现:

返回:

1)      处理结果(response)

2)      html标签(用来做界面)

3)      动作:结果 -> html格式

4)      返回给客户

 

 

tips:

服务器端画界面

画的界面通过response对象返回

 

 

eg.

//03.html

<form action=”03.jsp”>

<input type=”text” name=”myname”><br>    //文本框控件

<select name=”interest”>              //下拉菜单控件

              <option value=”football”>football</option>

       </select>

<input type=”submit” value=”提交”>     //提交按钮

<input type=”reset” value=”重置”>       //重置按钮,自动给所有值赋为默认值,避免空指针错误

</form>

 

 

//03.jsp

<%

string name= request.getparameter(“myname”);

string interest= request.getparameter(“interest”);

out.println(“your name is “+ name);

out.println(“<br>your interest is: “ + inerest); //println的回车对源文件回车,对html的显示不起作用,所以要加回车标签<br>

%>

 

 

 

 

 

 

 

 

 

 

14:00

jsp语法

1.  脚本元素(代码)

1)      注释 <%–      –%>   (只在本代码中存在)

2)      表达式<%=       %> 

3)      声明<%!          %>  (只在本页起作用)

4)      代码段<%         %>

2.  页面指令<%@name 属性列表      %>

1)      page指令 <%@page attribute_list %>

<%@page language=”scriptinglanguage” import=”” contenttype=”text/html;charset=gbk”  %>

2)      jsp:include指令 <jsp:include page=”urlspec” />

3)      jsp:forward指令 <jsp:forward page=”urlspec” /> (只能转到本机上某一其他页面)

4)      jsp:param指令 不能单独使用 <jsp:param name=”name” value=”value” />

3.  内置对象

使用out对象输出数据

request对象和用户输入信息

response对象向客户端发送信息

使用session对象在不同页面共享数据(使用cookies或重写url)

 

 

启动tomcat

1.       startup

2.       bin下service install 控制面板-》服务-》apache 启动

 

 

配置

在conf文件夹里把server.xml里的connector里的端口号改成别的

tome-users.xml 可以改密码,加用户

 

 

练习jsp

webapps\test

webapps\test\web-inf 是放应用程序的配置文件和类、库文件

webapps\test\web-inf\classes\

webapps\test\web-inf\lib\

web-inf\web.xml

 

 

在tomcat manager里面部署deploy

 

 

练习:

提交: 1.jsp

<html>

<body>

<form action="echo.jsp" method="post">

<p>内容

<p><textarea name="content" rows="20" col="40"></textarea>

 

 

 

 

 

 

<p><input type="submit" value="submit">

</form>

</body>

</html>

 

 

 

 

返回: echo.jsp

<%@page  contenttype="text/html;charset=gbk"  %>

 

 

<%

request.setcharacterencoding("gbk");

string content=request.getparameter("content");

content=content.replaceall("\n","<br>");

out.println(content);

%>

 

 

2005-3-8

8:00

 

 

复习:

jsp语法

html表单

 

 

 

 

tips

http协议有两个方法:

post: 放在body内

get: 放在url头部。 url?attribute=value

<form method=”post”>

凡是表单提交数据,都用post

 

 

练习1:

密码登陆框

tips:

判断是否空字符串要用.equals(“”)

文件名.jsp小写

 

 

练习2:

简单验证在客户端进行,使用jscript.

js标签

script在客户端运行。简单的验证挪到客户端进行

<script language=”javascript”>

       function mycheck() {

              if(document.myform.myname.value==””){   //document是浏览器内置对象

                     alert(“请填写姓名!”);

                     return;

       }

       if((document.myform.password1.value!=document.myform.password2.value)||){

              alert

              return;

       }

       document.myform.submit();

}

</script>

 

 

提交表单

<form name=”myform” action=”simple.jsp” method=”post”>

       <input type=”button” value=”提交” onclick=”mycheck()”>

 

 

 

 

session内置对象保存用户状态

//session-1.jsp

<%

//初始化

if(session.getattribute(“flag”) == null) {

       session.setattribute(“flag”,”ok”);

       session.setattribute(“shop”,””);

       session.setattribute(“price”,””);

}

session.setattribute(“shop”,session.getattribute(“shop”)+”主板”);

session.setattribute(“price”,session.getattribute(“price”)+”100”);

 

 

out.println(session.getattribute(“shop”)+”<br>”);

out.println(session.getattribute(“price”)+”<br>”);

%>

窗口关掉,只要没离开这个网站,状态依然保留。

 

 

javabean

 

 

轻量级的组件

 

 

组件技术

javabean概述

可以被applet、servlet、jsp等java程序调用

特点

1)          独立性

2)          可重用性

3)          在可视化开发工具中使用

4)          保存状态

javabean属性

1)        simple属性

get/set 都有:读写属性,有get:只读属性

2)        indexed属性

可加索引的属性

3)        bound属性

4)        constrained属性

 

 

bean放在web-inf/classess下

在jsp中调用javabean

<jsp:usebean id=”bean名字” scope=”page|request|session|application” class=”bean对应的类名”/>

//id是应用变量 scope是bean作用的范围。page该页,request该请求,session该会话,application服务器不关机,则永远有效

<jsp:setproperty name=”checking” property=”balance” value=”0.0” />

<jsp:getproperty …>

 

 

eg.//bean.jsp

 

 

<jsp:usebean id=”first” scope=”page” class=”bean.samplebean” />

<body>

       调用jsp:setproperty之前的值:<jsp:getproperty name=”first” property=”str” />

       <p>

       <jsp:setproperty name=”first” property=”str” value=”change value” />

       调用jsp:setproperty之后的值:<jsp:getproperty name=”first” property=”str” />

</body>

</html>

 

 

//samplebean.java

 

 

package bean;

public class samplebean

{

private string str=”first value”;

public string getstr() {

              return str;

       }

       public void setstr(string value) {

              str=value;

       }

}

tips

写javabean的注意事项

必须写set/get方法

必须package.不能放在默认包里

 

 

14:00

 

 

tips:

javabean的scope。 session最长用。同一个客户的多个请求用同一个bean

get/set方法使用条件:无参的。(标签使用法)

bean作为一个普通的java类。可以直接用他的方法。

 

 

练习3:

1.  html页面。下拉表单

2.  jsp。submit/item。

3.  javabean。用户购物清单

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2005-3-9

8:00

 

 

jdbc

jdbc是连接数据库的一种协议。在这个系统架构里相当于http。

功能:j2ee连接到外部资源

现在可以用xml访问数据库

协议:规定了统一的数据库访问接口,由各个厂商实现。

类:

1.  drivermanager

getconnection

接口:

2.  connection(数据库厂商写的)

3.  statement (执行sql语句)

 

 

使用注意:

不要让jdbc破坏程序原有结构。r/o mapping

把数据库的作用降低到只有数据持久化。

 

 

语法:

jdbc api

1.  drivermanager 管理jdbc(不是jdbc协议里的)将driver加载进内存

2.  connection由 drivermanager 返回一实例

3.  statement向数据库发送sql查询和取得一组结果的工具,也由数据库厂商提供

4.  resultset定义访问执行statement产生的数据表方法

5.  preparedstatement编译好的sql语句

 

 

eg.连接mysql数据库

import java.sql.*;

 

 

public class jdbcmysql{

       public static void main(string args[]) {

              string servername=”localhost”;

try{

                     class.forname(“com.mysql.jdbc.driver”);    //先把路径配到classpath里

                     string url=”jdbc:mysql://”+servername”+”:3306/test”;  //每个数据库不一样的

connection conn=drivermanager.getconnection(url,”root", "root");

statement stmt=conn.createstatement();

resultset rs=stmt.executequery(“select * from student”);

while(re.next()){

       system.out.print("studentno:"+rs.getint(1));

system.out.print(“\tstudmentname:”+rs.getstring(2));

}

}catch(exception e) {}

 

 

连接字符串每个数据库都不一样。

 

 

练习:

投票系统

 

 

//voteconn.java

package vote;

import java.sql.*;

 

 

public class voteconn {

string sdbdriver=”sun.jdbc.odbc.jdbcodbcdriver”;

string sconnstr=”jdbc:odbc:vote”;

connection connect=null;

resultset rs=null;

 

 

 

 

public voteconn(){

try{

       class.forname(sdbdriver);

}

catch(java.lang.exception e){}

}

 

 

public resultset executequery(string sql) {

       try {

       connect=drivermanager.getconnection(sconnstr);

       statement stmt=connect.

 

 

public int executeupdate(string sql) {

       int result=0;

try{

connect=driver

 

 

 

 

//index.jsp

<%@page contenttype="text/html;charset=gbk" %>

<%@page import="java.sql.*" %>

<jsp:usebean id="conndbbean" scope="page" class="vote.voteconn" />

<%

       reasultset rs=conndbbean.executequery("select * from vote");

%>

<html>

<body>

<center>

<h2><font color=#0000ff>请你投票</font></h2>

<table border bgcolor=#00ffff>

<form action="vote.jsp" method="post">

<% while(rs.next()) {%>

<tr><td><input type="radio" name="type"

value =<%=rs.getstring("id")%>><%=rs.getstring("note")%></td></tr>

<%}

rs.close();

%>

<tr align="center"><td><input type="submit" value="投票"></td></tr>

</form>

 

 

<tr><td><a href="details.jsp">查看投票</td></tr>

<table>

</center>

</body>

</html>

//style.css

 

 

//vote.jsp

<%@page contenttype="text/html;charset=gbk" %>

<%@page import="java.sql.*" %>

 

 

<jsp:usebean id="conndbbean" scope="page" class="vote.voteconn" />

 

 

<%

string rb=request.getparameter("type");

if(rb!=null&& rb!=""){

       string sql="update vote set c_num=c_num+1 where id="+rb;

       conndbbean.executeupdate(sql);

}

%>

<jsp:forward page="detail.jsp" />

 

 

//admin.jsp

<%

conndbbeanexecute

<%=temprs.getstring(“note”)%>

 

 

<div align=”center”><a href=”delvote.jsp?id=<%=temprs.getint(“id”)%>”>删除</a></div>

 

 

//delvote.jsp

<%

string d_id=request.getparameter(“id”);

if(d_id!=null

       conndbbean.execute

 

 

//addvote.jsp

<jsp:usebean scope=”page” class>

string nn=request.getparameter(“note”);

if(nn!=null

 

 

conndbbean.executequery(“select max(id) as maxid from vote”);

tmprs.next();

int max_id=tmprs.get int(“maxid”)+1;

tmprs.close();

 

 

string sql=”insert into vote value(“+max_id+”,’”;

sql+=nn+”’,0”;

system.out.println(sql);

condbbean.executeupdate(sql);

}

%>

<jsp:forward page=”admin.jsp”>

 

 

2005-3-10

8:00

 

 

servlet

常用api:http.servlet

特点

1.  结构很严格

2.  代码框架已经写好

3.  窗口给sevlet运行提供context

4.  仅用于处理http请求

 

 

initial方法:第一次调到内存时,访问一次。

destroy方法:被调出内存时,访问一次。

service方法:主方法,参数(request,response)

doget(),dopost():我们要写的方法。

 

 

eg1.

//testservlet 放在classes下面

 

 

import javax.servlet.*;

import javax.servlet.http.*;

 

 

public class testservlet extends httpservlet

{

       public void doget(httpservlet request req, httpservletresponse res) throws servletexception{

              res.setcontenttype(“text/html;charset=gbk”);

              req.setchanracterencoding(“gbk”);

              printwriter cut=res.getwriter();

              out.println();

              out.close();

       }

}

 

 

//.jsp

<form action=”/myservlet/testserv”>

 

 

路径要在配置文件里配://web.xml

<?xml version="1.0" encoding="iso-8859-1"?>

 

 

<!doctype web-app

    public "-//sun microsystems, inc.//dtd web application 2.3//en"

    "http://java.sun.com/dtd/web-app_2_3.dtd">

<!– jspc servlet mappings start –>             //配置servlet

<web-app>

       <display-name>first</display-name>

       <servlet>

              <servlet-name>aaaa</servlet-name>

              <servlet-class>testservlet</servlet-class> 

//起始地址为web-info/classes,包名.类名

       </servlet>

       <servlet-mapping>

              <servlet-name>aaaa</servlet-name>

              <url-pattern>/myservlet/testserv</url-pattern>

//            <url-pattern>/myservlet/*.do</url-pattern>  //可以把很多种请求映射到一个servlet

//            <url-pattern>/myservlet/*.*</url-pattern>  //一组一组的mapping

       <servlet-mapping>

<!– jspc servlet mappings end –>

 

 

</web-app>

 

 

tips:

写servlet不是主要的。而配置文件是主要的。

以配置文件(程序结构和框架)为中心,以jsp/servlet, html, javabean, ejb为辅

 

 

eg2.从servlet转到jsp

//jsp转servlet forward

request.setattribute(“applet”,”servlet”); //相当于jsp里的param标签

getsevletconfig().getservletcontext().getrequestdispatcher(“/hello.jsp”).forward(request.response);

 

 

在servlet里面使用javabean。new一个。

//servlet和javabean都是内置多线程。最好不用静态属性。

 

 

tips:

servlet配置

1.  servlet-api.jar

javac –classpath %classpath%;…..

2.  web.xml

 

 

 

 

14:00

mvc

 

 

一个controller带了一组servlet,一个config

controller分三部分

1.  控制器

2.  干活的

3.  配置文件

 

 

struts是一个mvc的框架

好处

1.  成熟

2.  用的多

 

 

特点:

1.  物理:struts是mvc基于java的一个框架(一个类库java和标签库jsp)

2.  功能:辅助实现mvc

 

 

struts框架

控制程序流程的类

实现和执行程序业务逻辑的类

自定义的标记使创建和验证html表单更加容易

 

 

*.tld 标签库文件

*.war web application 包

 

 

类库的安装:只需解压缩到一个路径,然后配置环境变量

 

 

 

 

struts难点

1.  config.xml

2.  标签库

3.  体现mvc

 

 

struts的组件

actionservlet 控制器

actionclass包含事务逻辑

actionform显示模块数据

actionmapping 帮助控制器将请求映射到操作

actionforward 用来指示操作转移的 对象

actionerror 用来存储和回收错误

struts标记库 可以减轻开发显示层次的工作

 

 

struts配置文件:struts-config.xml

 

 

自己写的部分action里的perform()

 

 

小结:

在mvc中,

struts主要给了c的框架。m自己写。v用标签库自己写。

提供两个功能。一个c。一个c背后的系统设计。

controller写好了

action的框架写好了,只要填perform()

扭转。反向扭转用actionforward。

提供一个对用户输入数据的缓存部分actionform。

帮助流程设计。一个struts-config.xml。另一个是把流程抽象到对象放在内存里面。

标签库中会用到几个。

 

 

2005-3-11

8:00

 

 

model部分设计:

façade

值对象

 

 

eg. struts-blank

index.jsp做客户代理

 

 

        <action

            path="/welcome"

            forward="/pages/welcome.jsp"/>    //调用了一个默认的action

 

 

1.  写aciton

2.  在config.xml里面的actionmapping改成我们的类

3.  写个.jsp

 

 

2005-3-12

8:00

 

 

使用struts-console查错

使用ant自动建构

两部分:property target

 

 

14:00

../ 上一级目录

./ 当前目录

/ 当前盘符的根目录

转向:1 页面中最好都使用xxxx.do来把控制权交给action

    2 真正的转向由control来做 path=”/xxx/xxx.jsp” 第一个xxx为web-inf下的一目录名

 

 

jsp的scope对应servlet里的:(scope指生命周期和可见性)

page       局部变量

request     request

session     session

application  servletcontext

 

 

 

 

值对象(用于由action中传出数据)

model中:facade

练习

struts+bean+jdbc+ant

 

 

 

 

2005-3-14

8:00

小结

1.request.setattribute(“name”, mybean)

2.值对象 注意scope

3.model中用facade

 

 

final项目

报表:

1.  struts

2.  jasperreport api

3.  ireport

 

 

 

 

14:00

 

 

final项目oss报表

1.  需求:

a)         管理报表定义和实例

b)        用户查看和输出

2.  工具

a)         struts,ant,ide,mysql,jasperreport,jsp/servlet,javabean,ireport,tomcat

3.  流程

 

 

合作

1.         共享资源专人负责

a)         struts

b)        ant, mysql, tomcat

c)        jasperreport(ireport)

2.         需求分析:

a)         会:草案

b)        分:用例图(流程)

c)        会:合并用例图。初步系统设计

d)        分:修正

e)         会:最终版本的系统设计

3.         设计数据结构

a)         类,配置文件

b)        数据库表

4.  详细设计

a)         分工:接口(协议)

b)        分:详细设计

 

 

赞(0)
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » OSS报表系统实训笔记-JSP教程,Java技巧及代码
分享到: 更多 (0)