调用requonse.getWriter()方法时可实现文本字符串数据输出,调用response.getOutputStream()方法可现实字节流数据的输出。
两种输出方式
threadlocal模式和osiv模式~~~!!!!
threadlocal 是一个局部的线程变量 只是一个map 保存的是线程的变量
不是线程
模拟写一个hashmap出来 不允许导入hashmap包? 通过数组!
模拟一个ThreadLocal出来!
public class MyThreadLocal
{
Map<Thread,Object> m=new HashMap<Thread,Object>();
public Object getObj()
{
Thread t=Thread.currentThread();
Object val=m.get(t);
if(val==null)
{
val=new Random().nextInt(100)
m.put(t,val);
}
return val;
}
}
java 对象的引用方式分为四个等级
有4中引用方式
强 String a=new String("asdasda"); 一个a 对应asdasda
软
弱
虚
mysql的!
执行存储过程
无参数
Connection con=DataSource.getdataSource().getconnection();
CallableStatement st=con.prepareCall("call 存储过程名字”);
boolean bo=st.excute();
if(bo)
{
ResultSet rs=st.getResultSet();
while(rs.next)
{
String name=rs.getStrimg("name");
}
}
con.close();
有参数
Connection con=DataSource.getdataSource().getconnection();
CallableStatement st=con.prepareCall("call 存储过程名字(?,?)”);
st.setString(1,"mnio");
st.setString(2,"masdaso");
//未知参数的话
st.RegisterOutParamter(3,Type.Integer);
boolean bo=st.excute();
//Concat mysql数据库中 把不同列放在同一列中!Concat(name,id,pwd);
//获取返回值
int size=st.getInt(3);
if(bo)
{
ResultSet rs=st.getResultSet();
while(rs.next)
{
String name=rs.getStrimg("name");
}
}
con.close();
重定向:以前的request中存放的变量全部失效,并进入一个新的request作用域。浏览器url改变 sendredirct();
转发:以前的request中存放的变量不会失效,就像把两个页面拼到了一起。 浏览器url不变 getforward(). .....;
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串转换成gb2312编码。
因为在jsp中对中文进行了编码的时候用的是UTF-8的编码方式,而在servlet中调用request.getParameter();方法的时候使用服务器指定的编码格式自动解码一次,所以前台编码一次后台解码一次而解码和编码的方式不用所以造成了乱码的出现,