分享
 
 
 

OSS报表系统实训笔记

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

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\classeswebapps\test\WEB-INF\libWEB-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) 分:详细设计

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有