小知识点7
2016-03-19 20:13
218 查看
HttpServletResponse的一些说明
--getWriter()和getOutputStream()的区别
---getWriter() 用于向客户机回送字符数据
---getOutputStream() 返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据)
如果我们是回送字符数据,则使用 PrintWriter对象 ,效率高
如果我们是回送字节数据(binary date) ,则只能使用 OutputStream
注意这两个流不能同时使用.比如:
就会报错:
sendRedirect()可以实现请求重定向(可以带数据给下一个页面)。
那么什么是请求重定向呢,一个web资源收到客户端请求之后,通知客户端去访问另一个web资源,这称之为请求重定向。
参数的传递
方式sendRedirect()和session()
需求: 当用户登录成功后,把该用户名字显示在登录成功页面;
①使用sendRedirect()来传递字符参数
缺点是只能传送字符串,不能传对象!
解决思路:
基本格式:
response.sendRedirect("servlet的地址?参数名=参数值&参数名=参数值...");
在接受数据的Servlet中:
String 参数=request.getParameter("参数名");
②使用session()来传递字符参数和对象
A.传递字符串
放入session request.getSession.setAttribute("loginUser",username);
取出session 在JSP中通过session取出 request.getSession.getAttribute("loginUser");
B.传递对象
User user= new User();
user.setName("xiaoli");
user.setPassWord("123");
放入session request.getSession.setAttribute("userObj",userObj);
取出session User user=(User)request.getSession.getAttribute("userObj");
---------------------
要使用反射,首先获得类对应的Class对象,这是使用反射的入口!
反射破坏了类的封装性,因为通过反射可以调用类的私有方法
1. 要想使用反射,首先需要获得待处理类或对象所对应的 Class 对象。
2. 获取某个类或某个对象所对应的 Class 对象的常用的 3 种方式:
a) 使用 Class 类的静态方法 forName: Class.forName(“java.lang.String”);
b) 使用类的.class 语法: String.class;
c) 使用对象的 getClass()方法: String s = “aa”; Class<?> clazz = s.getClass();
3. 若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
a) 先获得 Class 对象,然后通过该 Class 对象的 newInstance()方法直接生成即可:
Class<?> classType = String.class;
Object obj = classType.newInstance();
b) 先获得 Class 对象,然后通过该对象获得对应的 Constructor 对象,再通过该 Constructor
对象的 newInstance()方法生成:
Class<?> classType = Customer.class;
Constructor cons = classType.getConstructor(new Class[]{});
Object obj = cons.newInstance(new Object[]{});
4. 若想通过类的带参数的构造方法生成对象,只能使用下面这一种方式:
Class<?> classType = Customer.class;
Constructor cons = classType.getConstructor(new Class[]{String.class, int.class});
Object obj = cons.newInstance(new Object[]{“hello”, 3});
5. Integer.TYPE 返回的是 int,而 Integer.class 返回的是 Integer 类所对应的 Class 对象。
--getWriter()和getOutputStream()的区别
---getWriter() 用于向客户机回送字符数据
---getOutputStream() 返回的对象,可以回送字符数据,也可以回送字节数据(二进制数据)
OutputStream os=response.getOutputStream(); os.write("hello,world".getBytes());
如果我们是回送字符数据,则使用 PrintWriter对象 ,效率高
如果我们是回送字节数据(binary date) ,则只能使用 OutputStream
注意这两个流不能同时使用.比如:
OutputStream os=response.getOutputStream(); os.write("hello,world".getBytes());
PrintWriter out=response.getWriter();
out.println("abc");
就会报错:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
sendRedirect()可以实现请求重定向(可以带数据给下一个页面)。
那么什么是请求重定向呢,一个web资源收到客户端请求之后,通知客户端去访问另一个web资源,这称之为请求重定向。
参数的传递
方式sendRedirect()和session()
需求: 当用户登录成功后,把该用户名字显示在登录成功页面;
①使用sendRedirect()来传递字符参数
缺点是只能传送字符串,不能传对象!
解决思路:
response.sendRedirect("/UsersManager/MainFrame?uname="+username+"&pwd="+password);
基本格式:
response.sendRedirect("servlet的地址?参数名=参数值&参数名=参数值...");
在接受数据的Servlet中:
String 参数=request.getParameter("参数名");
②使用session()来传递字符参数和对象
A.传递字符串
放入session request.getSession.setAttribute("loginUser",username);
取出session 在JSP中通过session取出 request.getSession.getAttribute("loginUser");
B.传递对象
User user= new User();
user.setName("xiaoli");
user.setPassWord("123");
放入session request.getSession.setAttribute("userObj",userObj);
取出session User user=(User)request.getSession.getAttribute("userObj");
---------------------
要使用反射,首先获得类对应的Class对象,这是使用反射的入口!
反射破坏了类的封装性,因为通过反射可以调用类的私有方法
public class TestPrivate{ public static void main(String[] args) throws Exception{ Private p = new Private(); Class<?> classType = p.getClass(); Method method = classType.getDeclaredMethod("sayHello", new Class[] { String.class }); method.setAccessible(true);//压制Java的访问控制检查 String str = (String)method.invoke(p, new Object[]{"zhangsan"}); System.out.println(str); } }
public class TestPrivate2{ public static void main(String[] args) throws Exception{ Private2 p = new Private2(); Class<?> classType = p.getClass(); Field field = classType.getDeclaredField("name"); field.setAccessible(true);//压制Java对访问修饰符的检查 field.set(p, "lisi"); System.out.println(p.getName()); } }
1. 要想使用反射,首先需要获得待处理类或对象所对应的 Class 对象。
2. 获取某个类或某个对象所对应的 Class 对象的常用的 3 种方式:
a) 使用 Class 类的静态方法 forName: Class.forName(“java.lang.String”);
b) 使用类的.class 语法: String.class;
c) 使用对象的 getClass()方法: String s = “aa”; Class<?> clazz = s.getClass();
3. 若想通过类的不带参数的构造方法来生成对象,我们有两种方式:
a) 先获得 Class 对象,然后通过该 Class 对象的 newInstance()方法直接生成即可:
Class<?> classType = String.class;
Object obj = classType.newInstance();
b) 先获得 Class 对象,然后通过该对象获得对应的 Constructor 对象,再通过该 Constructor
对象的 newInstance()方法生成:
Class<?> classType = Customer.class;
Constructor cons = classType.getConstructor(new Class[]{});
Object obj = cons.newInstance(new Object[]{});
4. 若想通过类的带参数的构造方法生成对象,只能使用下面这一种方式:
Class<?> classType = Customer.class;
Constructor cons = classType.getConstructor(new Class[]{String.class, int.class});
Object obj = cons.newInstance(new Object[]{“hello”, 3});
5. Integer.TYPE 返回的是 int,而 Integer.class 返回的是 Integer 类所对应的 Class 对象。
public class InvokeTester { public int add(int num1,int num2) { return num1 + num2; } public String echo(String name) { return "hello:" + name; } public static void main(String[] args) throws Exception{ //传统的调用方式 //InvokeTester test = new InvokeTester(); //System.out.println(test.add(1, 2)); //System.out.println(test.echo("tom")); //如果想通过反射操纵一个类,首先要获得Class对象。 Class clazz = InvokeTester.class; //生成类的一个实例 Object invokeTester = clazz.newInstance(); //想调用某个方法,必须获得这个方法对应的Method对象 //第一个参数是方法的名字,第二个参数是方法参数对应的Class数组 Method addMethod = clazz.getMethod("add", new Class[]{int.class, int.class}); //Method对象的invoke方法实现调用,哪个对象的方法,实参以Object数组的形式出现 Object result = addMethod.invoke(invokeTester, new Object[]{1, 2}); System.out.println(result); System.out.println("----------------"); Method echoMethod = clazz.getMethod("echo", new Class[]{String.class}); Object result2 = echoMethod.invoke(invokeTester, new Object[]{"Tom"}); System.out.println((String)result2); } }
相关文章推荐
- Android5.0之Toobar的使用
- 商业书籍精华摘要《专注》丹尼尔·戈尔曼 Focus by Daniel·Goleman
- c语言:将数组中n个整数按相反顺序存放。
- 蓝桥杯_算法提高_判断名次
- Jenkins进阶系列之——09配置Linux系统ssh免密码登陆
- php第三方登录 Oauth2.0协议
- Kubernetes是什么?
- Ubuntu14.04安装androidStudio错误解除
- 蓝桥杯 翻硬币
- Windows下安装sqlmap
- Ubuntu14.04安装androidStudio错误解除
- Ubuntu14.04安装androidStudio错误解除
- 单链表的逆转
- Jenkins进阶系列之——07更改Jenkins的主目录
- Jenkins进阶系列之——08Jenkins纳入版本控制
- SUSE各个系统版本安装saltstack方法
- 【杭电oj】2050 - 折线分割平面(递推)
- 最新最好用的百度云搜索引擎推荐
- 【js笔记】替换页面未加载默认图片
- Jenkins进阶系列之——05FTP publisher plugin插件