浅析Java反射机制

在学校学Java半年多了,老实说一直以来也没怎么认真听过研究过,这些日子看《SCJP学习指南》打算考个证又重新学起Java的语法,后悔当时没好好学了。

      半年里做过的小项目也不少,学JavaSE的时候写了一个小记事本、一个聊天的小程序,当然代码量都很少;然后学JavaEE时写了两个项目吧,一个BBS和一个网上书城。两个项目大同小异,都是使用Servlet、JavaBeans、JSTL、EL表达式等基本知识,加上MySQL的数据库。学下来倒是觉得学到了一些东西,但是问题在于代码的精化。

     像是BBS和WebShop,都是MVC的基本架构,分了dao\database\domian\filter\servlet几层,在web展示层就是css/images/js/admin(后台管理)几层,开始觉得很难,但是当写完一个简单的注册登录后一切就简单了。程序流程基本是一样的,下面以登录为例:

1.用户打开首页,点击login,跳转到login.jsp页面

2.用户输入用户名和密码,点击登陆,<form action="UserServlet.do?action=login">

3.转到web.xml,取到的url-pattern是 UserServlet.do,然后根据web.xml的配置找到Servlet目录下的UserServlet

4.  UserServlet中取出传递过来的动作, 然后找到对应的函数    

          String action = request.getParameter("action");

String result = null;

if("login".equals(action)){

result = Login(request,response);  

}

        String login_username = request.getParameter("username");

String login_password = request.getParameter("password");

Users users = null;

UserDao ud = new UserDao();

users = ud.selectUserByLogin(login_username, login_password);

ud.freeConn();

5.UserServlet中的业务处理交给Dao层的UserDao,UserDao中定义相应的方法,如SelectUserByID,ModifyUserInfo等。

6.Dao层中需要操作数据库,必然要建立数据库的连接,数据库的连接定义在database层,在database层的类中定义了四个方法,getConnetion、getStatement、getResultSet、freeConnection.在Dao层中静态导入database的类使用就很方便了。

 

这种架构和程序部署方式很适应我们这些项目经验=0的学生,而且这一套流程是可以复制的,一个简单的循环就完成了BBS和WebShop两个项目。

当时写代码的时候,开始是干劲十足,但是后来就找不到了乐趣,因为全是代码的重复、流程的复制,没有什么技术含量。

 

这学期课上学习了Java反射机制,感觉是一下子解决了以前项目中的问题。简单的分析了一下,运用反射机制给原来项目的改进,还是以登陆功能为例。

1.当然是不变的,用户点击登陆。

2.开始改变,用户点击登陆后提交的action为login.do不需要指定用哪个Servlet。

3.依然是web.xml,在此只需要配置一个*.do指向的类是ControllerServlet,管他神马的login.do还是register.do还是什么Modify.do统统交给一个Servlet去处理,这一下子就省去了很多代码,有效的提高了代码的质量。

4.当然,在ControllerServlet中要利用反射机制取出请求的名称,这里是login,然后动态的实例化一个login类执行它的excute方法

5.login类放在action目录下,所有的action都会对应一个java类,这些类都要放在action目录下,并且所有类都要实现一个接口controller,controller中有唯一的方法excute()返回值为String类型。

6.测试时在login的excute方法中return “test.jsp”,实现了页面跳转。

7.这样就通过一个ControllerServlet实现了程序的精简。

 

这就是我对反射机制的浅显的理解和用法,还望看到的大牛们多多指正。

 

 

你可能感兴趣的:(java,DAO,servlet,项目管理,bbs)