2011年3月9日

编程之美系列之三——计算1的个数

摘要: 问题描述: 给定一个十进制整数N,求出从1到N的所有整数中出现”1”的个数。 例如:N=2,1,2出现了1个“1”。 N=12,1,2,3,4,5,6,7,8,9,10,11,12。出现了5个“1”。阅读全文

posted @ 2011-03-09 07:14 好坏 阅读(2527) 评论(13) 编辑

2011年3月4日

编程之美系列之二——寻找出现频率超过一半的数

摘要: 现在有一数组存放int型整数,数字有重复,且有一数字出现的频率超过了50%,请找出这个数字。阅读全文

posted @ 2011-03-04 07:18 好坏 阅读(2491) 评论(32) 编辑

2011年2月27日

编程之美系列之一——阶乘的运算

摘要: 问题描述: 1.给定一个整数N,那么N的阶乘N!末尾有多少个0呢?例如:N=10,N!=362800,N!的末尾有两个0; 2.求N!的二进制表示中最低位1的位置。阅读全文

posted @ 2011-02-27 00:01 好坏 阅读(407) 评论(0) 编辑

2011年2月20日

一个简单的循环式TCP服务器

摘要: 一个简单的循环式TCP服务器,当服务器接到来自客户端的连接请求时,向客户端发出一条信息,工作在8273端口。 客户端代码用来测试。阅读全文

posted @ 2011-02-20 02:01 好坏 阅读(203) 评论(0) 编辑

2011年2月16日

Servlet和JSP的通信

从JSP调用Servlet可用<jsp:forward>请求信息自动传递到Servlet
或者通过sendRedirect

从Servlet调用JSP使用
RequestDispatcher接口的forward(req, res)方法
请求信息需要显式传递(在req、res参数中)
getServletConfig().getServletContext().getRequestDispatcher("/servlet_jsp/ServletUseJsp.jsp").forward(req, resp);
或者通过sendRedirect
resp.sendRedirect(req.getContextPath() + "/servlet_jsp/ServletUseJsp.jsp");


forward可以用 ”/” 路径, 是指web app的根路径, servlet forward jsp的时候一定要用 “/”开头
jsp sendRedirect到servlet应该用相对路径,因为这里”/”指网站的根路径
servlet sendRedirect jsp也是

posted @ 2011-02-16 15:02 好坏 阅读(60) 评论(0) 编辑

cookie&session&servletContext

1、cookie
在客户端的小纸条,存储在客户端
一个servlet/jsp设置的cookies能被同一路径下面或者子路径下面的servlet/jsp读到,但子路径设置的cookies父路径读不到.

添加cookie的方法:
Cookie cookie = new Cookie("aaa", "bbb");
  cookie.setMaxAge(1000);
  resp.addCookie(cookie);
获取cookie:
Cookie[] cookies = req.getCookies();
  Cookie cookie = cookies[0];

2、session
在服务器端的小纸条,存储在服务器端
不论是父路径还是子路径均能访问到同一个session

session有两种实现方式:依靠cookie或者依靠URL重写
依靠cookie的session不稳定,当客户端禁掉cookie时无法使用,依靠URL重写的方式可以解决客户端禁掉cookie的问题。调用方法:response.encodeURL(request.getRequestURL().toString)());


添加session的方法:
HttpSession session = req.getSession(true);
获取session:
Integer count = (Integer)session.getAttribute("count");
设置session的值:
session.setAttribute("count", count);

 

3、servletContext
一个WEBAPP的全局变量,能存储所有用户都能访问的数据
ServletContext app = this.getServletContext();
使用方法与session相同

posted @ 2011-02-16 14:57 好坏 阅读(74) 评论(0) 编辑

servlet&jsp乱码问题

SERVLET
1、页面本身有中文的时候,一个要在写PrintWriter out = resp.getWriter();之前加这句话:
   resp.setContentType("text/html;charset=GBK");
2、解决POST方式提交表单的中文乱码问题方法:
   在获得第一个参数之前加以下语句:req.setCharacterEncoding("GBK");
3、解决GET方式提交表单的中文乱码问题方法:
   修改conf目录下的server.xml 在Connector标签中(即修改8080端口的标签)中加一句话
   URIEncoding="GBK"

JSP
加入以下两段代码则可解决大部分乱码问题:
<%@ page contentType="text/html;charset=GBK"%>
<%request.setCharacterEncoding("GBK");%>

posted @ 2011-02-16 14:56 好坏 阅读(30) 评论(0) 编辑

JSP基础语法

JSP传统语法
--Declaration
--Scriptlet
--Expression
--Comment
--Directives
--Action动作指令
--内置对象


1、Declaration
基本语法:
<%!  %>
说明:在此声明的变量、方法都会被保留成唯一的一份,直到JSP程序停止执行。此部分声明的变量会转化为SERVLET的成员变量,函数只能在此处声明。
例:
<%!
int i;
public void setName(){… …}
%>

2、Scriptlet
基本语法:
<%程序代码区%>
可以放入任何的Java程序代码,此部分声明的变量为局部变量,在service()方法里
例:
<%
for (int i=0;i<10,i++)
{
 … …
}
%>

3、表达式
基本语法:
<%=… …%>
=后面必须是字符串变量或者可以被转换成字符串的表达式
不需要以;结束,只有一行
例:
<%=“hello world”%>
<%=i+1%>
<%=request.getParameter(“name”)%>

4、Directive
Directive(编译指令)相当于在编译期间的命令
格式:
<%@Directive 属性=“属性值”%>
常见的Directive:
page
include
taglib

4.1 Directive-page
指明与JSP Container 的沟通方式
基本格式:
<%@page language=“script language”|
 extends=“className”|
 import=“importList”|
 buffer=“none|kb size”|   --none:不缓冲,默认8k
 session=“true|false”|   --是否可以使用session,默认true
 autoFlush=“true|false”  --缓冲器是否自动清除,默认true
 isThreadSafe=“true|false”|  --默认false(永远不要设成true)
 info=“infoText”|    --任何字符
 errorPage=“errorPageUrl”|
 isErrorPage=“true|false”|
 contentType=“contentTyepInfo”|
        pageEncoding=“gb2312”
%>

4.2 Directive-include
将指定的JSP程序或者HTML文件包含进来
格式:
<%@include file=“fileURL%>
JSP Engine会在JSP程序的转换时期先把file属性设定的文件包含进来,然后开始执行转换及编译的工作。(原封不动的把文件的代码copy到该位置,然后进行转换和编译,只生成一个java和class)
限制:
不能向fileURL中传递参数
不能abc.jsp?user=aaa

5 Action
Action(动作指令)在运行期间的命令
常见的:
jsp:useBean
jsp:setProperty
jsp:getProperty
jsp:include
jsp:forward
jsp:param
jsp:plugin
嵌入applet

5.1 jsp:include/jsp:param
用于动态包含JSP程序或HTML文件等
除非这个指令会被执行到,否则它是不会被Tomcat等JSP Engine编译。
格式:
<jsp:include page=“URLSpec” flush=“true”/>
<jsp:include page=“URLSpec” flush=“true”>
     <jsp:param name=“ParamName” value=“paramValue”/>
</jsp:include>
jsp:param用来设定include文件时的参数和对应的值

和编译指令include的区别:
include编译指令是在JSP程序的转换时期就将file属性所指定的程序内容嵌入,然后再编译执行;而include指令在转换时期是不会被编译的,只有在客户端请求时期如果被执行到才会被动态的编译载入
Include不能带参数, 而<jsp:include>可以。
动态包含的文件和被包含文件用的是同一个request对象。产生两个class文件

5.2 jsp:forward/jsp:param
用于将一个jsp的内容传送到page所指定的JSP程序或者Servlet中处理(URL)
格式:
<jsp:forward page=“urlSpec” flush=“true”/>
<jsp:forward page=“urlSpec”>
 <jsp:param name=“paramName” value=“paramValue”/>
</jsp:forward>
<jsp:param>用于指定参数和其对应的值

Forward的页面和forward到的页面用的是同一个request
与此相对应的是
response.sendRedirect

5.3 <jsp:forward>与response.sendRedirect的区别
<jsp:forward>
使用同一个request
forward后的语句不会继续发送给客户端
速度快
服务器内部转换,
可以传参数
response.sendRedirect
是不同的request
send后的语句会继续执行,除非return
速度慢
需要到客户端的往返,可以转到任何页面
可以传参数,直接写在url后面

5.4 jsp:usebean
通过jsp:useBean,可以在JSP中使用定义好的Bean
Bean的基本要素:
必须要有一个不带参数的构造器。在JSP元素创建Bean时会调用空构造器
Bean类应该没有任何公共实例变量,也就是说,不允许直接访问实例变量,变量名称首字母必需小写
通过getter/setter方法来读/写变量的值,并且将对应的变量首字母改成大写
基本用法:
test.jsp/CounterBean.java 不要使用裸体类(规范要求)

jsp:useBean各项参数含义:
id:对象实例名称
scope:Bean作用的范围,默认为page,对整个jsp页面有效
class:Bean类名称(全名)
type:Bean实例类型,可以是本类,或其父类,或实现的接口,默认为本类
Scope各项参数的意义:
page:仅涵盖使用JavaBean的页面
request:有效范围仅限于使用JavaBean的请求
session:有效范围在用户整个连接过程中(整个会话阶段均有效)
application:有效范围涵盖整个应用程序。也就是对整个网站均有效

jsp:setProperty的格式:
<jsp:setProperty name=“beanName”
 property=“propertyName” |property=“*”
value=“property value” |param=“paramName”/>
相当于beanName.setPropertyName(value)方法调用(setXxx()方法)
jsp:getProperty的格式:
<jsp:getProperty name=“beanName” property=“propertyName”/>
相当于beanName.getPropertyName()方法调用(getXxx()方法)

建立表单参数和Bean属性之间的关联
通过param指定表单元素的名称,通过perperty指定对应的Bean属性名称,由此建立这两个变量的关联
通过*来设置所有属性和输入参数之间的关联
在建立Bean属性和表单参数之间的对应关系时,服务器会将对应的参数自动转换成和属性类型匹配的数据


6 JSP内置对象
out
request
response
pageContext 用的很少
session
application
config 用的很少
exception
Page用的很少

6.1 out:
常用方法:
println():向客户端输出各种类型数据
newLine():输出一个换行符
close():关闭输出流
flush():输出缓冲区里的数据
clearBuffer():清除缓冲区里的数据,同时把数据输出到客户端
clear():清除缓冲区里的数据,但不把数据输出到客户端
getBufferSize():返回缓冲区的大小

6.2 request:
可以用此对象取得请求的Header、信息(如浏览器版本、语言和编码等)、请求的方式(get/post)、请求的参数名称、参数值、客户端的主机名称等
常用方法:
getMethod():返回客户端向服务器端传送数据的方法
getParameter(String paramName):返回客户端向服务器端传送的参数值,该参数由paramName指定
getParameterNames():获得客户端传送给服务器端的所有参数的名字,结果是一个枚举类型数据(Enumeration)
getParameterValues(String  name):获得指定参数的所有值,由name指定
getRequestURI():获得发出请求字符串的客户端地址
getRemoteAddr():获取客户端的IP地址
getRemoteHost():获取客户端机器名称
getServerName():获取服务器的名字
getServletName():客户端所请求的脚本文件路径
getServerPort():获取服务器端的端口
对应类: javax.servlet.http.HttpServletRequest

6.3 response
表示的是返回给客户端的响应
是javax.servlethttp.HttpServletResponse接口的一个实例
经常用于设置HTTP标题,添加cookie、设置响应内容的类型和状态、发送HTTP重定向和编码URL
常用方法:
addCookie(Cookie cookie):添加一个Cookie对象,用于在客户端保存特定的信息
addHeader(String name,String value):添加HTTP头信息,该Header信息将发送到客户端
containsHeader(String name):判断指定名字的HTTP文件头是否存在
sendError(int):向客户端发送错误的信息
sendRedirect(String url):重定向JSP文件
和<jsp:forward>的区别
sendRedirect通过客户端发起二次申请,不同的request对象
Jsp:forward是同一个request,在服务器内部转发
setContentType(String contentType):设置MIME类型与编码方式


 

posted @ 2011-02-16 14:55 好坏 阅读(423) 评论(0) 编辑

2011年1月28日

oracle存储过程示例

摘要: create table article(id number primary key,cont varchar2(4000),pid number,isleaf number(1),--0代表非叶子节点,1代表叶子节点alevel number(2));insert into article values(1,'蚂蚁大战大象',0,0,0);insert into article values(2,'大象被打趴下了',1,0,1);insert into article values(3,'蚂蚁也不好过',2,1,2);insert into article values(4,'瞎说',2,0阅读全文

posted @ 2011-01-28 15:11 好坏 阅读(75) 评论(0) 编辑

mysql学习笔记

摘要: 使用MYSQL要先创立自己的数据库create database mydata;然后让工作在在这个数据库下user mydata;常用数据类型:int长4字节 double char varchar datetime longcreate table dept(deptno int primary key,dname varchar(14),loc varchar(13));create table emp(empno int primary key,ename varchar(10),job varchar(10),mgr int ,hiredate datetime,sal double,阅读全文

posted @ 2011-01-28 15:11 好坏 阅读(186) 评论(0) 编辑