1.MVC是什么:
M:model 模型 作用:主要是封装数据,封装对数据的访问
V:view 视图 作用:主要是用来展示数据 一般是jsp担任的
C:ctrl 控制 作用:接受请求,找到相应的javabean完成业务逻辑
2.Mvc思想
就是将业务逻辑,代码,显示相分离的一种思想
servlet-->缺点:生成html内容太麻烦(out.print("html"))
|
jsp--->缺点:阅读起来不方便,维护比较困难
|
jsp+javabean:
jsp的model1:
jsp:接受请求,展示数据
javabean:和数据打交道
|
jsp+javabean+servlet
jsp的model2:
jsp:展示数据
javabean:和数据打交道
servlet:接受请求,处理业务逻辑
就是MVC思想的体现
2.1
javabean在model1中的使用(了解)
javabean+jsp
用到的
1. Uer.java:包含username和password(创建的一个javabean)
2.form表单
注意:表单中用name和password
login.jsp:就是下面的东西
<!-- 接受值 -->
<jsp:useBean id="u" class="com.itheima.domain.User"></jsp:useBean><!--相当于 User u=new User()-->
<jsp:setProperty property="name" name="u"/><!--相当于 u.setName(...)-->
<jsp:setProperty property="password" name="u"/><!-- 打印值-->
<jsp:getProperty property="name" name="u"/>
useBean就可以用这样的方式将提交过来的数据封装成指定的对象
如何做的--》反射,获取class就可以干了
2.2
javabean在model2中的使用
BeanUtils:可以看作封装数据一个工具类
使用步骤:
1.导入jar包
2.使用BeanUtils.populate(Object bean,Map map);底层用的还是反射的思想(得到class,对象就可以干许多事情的)
传入map集合给bean对象,然后获取class,然后。获取其中的所有方法
map。获取key
获取value。
还是反射思想。
2.反射的回顾+补充
1.获取class对象
方式1:
Class clazz=Class.forName("全限定名")
方式2:
Class clazz=类名.class;
方式3:
Class clazz=对象.getClass;
2.可以获取对应类的构造方法(了解)
Constructor con = clazz.getConstructor(Class .. paramClass);
Person p = (Person) con.newInstance(参数);
3.可以通过clazz创建一个对象(了解)
clazz.newInstance();//相当于调用的无参构造器
如果没有无参构造的话就会报错
4.可以通过clazz获取所有的字段 getFiled()(了解中的了解)
5.可以通过clazz获取所有的方法
Method m = clazz.getMethod("sleep");//获取公共的方法
Method m = clazz.getDeclaredMethod("sleep");//获取任意的方法
注意:若是私有的方法 必须让该方法可以访问
m.setAccessible(true);
6.Method对象的invoke是有返回值,他的返回值就是目标方法执行的返回值
m.invoke(p);执行
注意:反射里面的参数传进去后得用.class
eg:Strring name->String.class
Demo.java60行
总结:
有了class对象之后,无所不能.
代码演示:
package com.itheima.reflect;
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
import org.junit.Test;
import com.itheima.domain.Person;
public class Demo {
@Test
public void f1() throws Exception{
//1.获取class对象
Class clazz=Class.forName("com.itheima.domain.Person");
//2.获取构造器(了解)
//Constructor con = clazz.getConstructor();
//Person p = (Person) con.newInstance();
//2.1获取带参的构造器(了解)
Constructor con = clazz.getConstructor(String.class,String.class);
Person p = (Person) con.newInstance("tom","123");//相当于 new Person("tom","123")
System.out.println(p.getPassword());
}
@Test
public void f2() throws Exception{
//1.获取class对象
Class clazz=Class.forName("com.itheima.domain.Person");
//2.获取构造器(了解)
Person p = (Person) clazz.newInstance();
}
@Test
//获取私有方法
public void f3() throws Exception{
//1.获取class对象
Class clazz=Class.forName("com.itheima.domain.Person");
Person p = (Person) clazz.newInstance();
//2.获取方法
//Method m = clazz.getMethod("sleep");//获取公共的方法
Method m = clazz.getDeclaredMethod("sleep");//获取任意的方法
//2.1若是私有的方法 必须让该方法可以访问
m.setAccessible(true);
//执行方法
m.invoke(p);
}
@Test
public void f11() throws Exception{
//1.获取