Java基础 javaweb设计模式

Javaweb 设计模式
Jsp 模式
       Sun 公司在推出jsp 后,也为我们提供了两种jsp 开发模式
       Model1 jsp+javaBean
              Model1 模式中jsp javaBean 功能
             
Model1 模式中,jsp 主要负责业务操作及数据的显示。javaBean 用于数据封装。
Model1
优点:
              使用简单快捷,对开发人员要求不高。
缺点:
它不适合完成比较复杂的项目,并且所有操作都在jsp 页面上,为我们的程序开发与维护带来不便 :
 
       Model2 jsp+servlet+JavaBean
             
Model2 模式它在model1 模式基础上,将原来由jsp 完成的功能,现在由servlet jsp 一起完成。
       Servlet 主要负责业务逻辑处理
       Jsp 主要负责数据显示
       javaBean 负责数据的封装。
Model2 模式
优点: 维护方便,开发人员各司其职,有利于我们进行分工操作,它比较适合开发一些比较复杂项目,因为它的很多组件可以重用。
缺点:
       开发难度增大,对开发人员要求比较高。
 
javaBean 介绍
javaBean 是一种java 语言写成的可重用的组件,为了写成javaBean, 它要必须具有公共的无参数的构造,javaBean 通过提供符合一致性设计模式的公共方法将内部的域暴露成员属性。简单说,一个javaBean 它应该是具有无参数构造,并且属性private, 对外提供get/set 方法让其访问,一般javaBean 是可序列化,也就是说,它要实现序列化接口。
 
javaweb 开发中,javaBean 的主要功能是什么?
javaBean 可以分为两种,一种是用户界面的UI javaBean,javaweb 中使用的不是这一种。
另外一种它没有用户界面,主要负责处理,jsp 中通常使用的是这一种,我们在实际开发中,所使用的javaBean 主要是用于将数据进行封装操作。
 
javaBean model1 模式下如何使用
       model1 模式下,我们将数据封装到javaBean ,一般会使用jsp bean 标签来操作。
       Jsp:userBean
       Jsp:setProperty
       Jsp:getProperty
      
注意:bean 属性,它指的不是类属性, 我们所说的bean 属性指的是get/set 方法后的名称。
如果我们使用bean 标签操作,那么表单中请求参数名称一定要与bean 属性一致。
如果一致,那么我们在使用setProperty 标签时,也可以使用通配符* 来操作
 
javaBean model2 模式下如何使用
       model2 模式下,我们要将请求参数封装到javaBean 中,可以手动封装
      
我们可以使用beanutils 工具来完成请求参数封装。
Beanutils 它是apache 开发的一套用于操作javaBean api, 通过这套api ,可以简化我们操作javaBean 代码的编写。
简单介绍beanutils 如何使用?
1.        导入jar
2.        编写代码
Populate 方法参数1 就是我们的javaBean 对象,参数2 是我们的所有的请求参数的map 集合,可以通过request.getParameterMap 方法获取。
 
Beanutils 工具实现原理
Beanutils 工具它的底层是使用java 内省机制,而内省它的实现是依赖于java 反射。
1.        使用反射方式来完成请求参数封装
// 使用反射来完成封装
       @Test
       public void fun1() throws IllegalArgumentException, IllegalAccessException, InvocationTargetException{
              //1. 创建一个Map 集合, 模仿request.getParameterMap() 获取的结果
              Map<String,String[]> map=new HashMap<String, String[]>();
              map.put("username", new String[]{"tom"});
              map.put("password", new String[]{"123"});
             
              //2. 创建一个User 对象
              User user=new User();
             
              //3. map 集合中key 的名称与user bean 属性一致的使用key 对应的value 封装到bean 属性上。
              //3.1 得到map 中所有的key set
              Set<String> keys=map.keySet();
              //3.2 得到User 类中所有的方法
              Method[] ms=user.getClass().getDeclaredMethods();
             
              //3.3. 判断所有方法名称是否与"set"+key 的值相等( 不区分大小写)
              for(String key:keys){
                     String setMethodName="set"+key;
                     //3.4 遍历所有的ms ,并得到方法名称
                     for(Method m:ms){
                            String methodName=m.getName();
                            if(setMethodName.equalsIgnoreCase(methodName)){
                                   //3.5. 使用method 对象调用invoke 方法将key 对应的value 值进行赋值
                                   m.invoke(user, map.get(key)[0]); // user.setXxx(map.get(xxx))
                            }
                     }
              }
             
              //4. 输出
              System.out.println(user);
       }
 
2.        使用内省操作
1.        使用Introspector 来获取BeanInfo 对象
2.        通过BeanInfo 对象获取所有的属性描述器 PropertyDescription
3. 通过属性描述器,得到读写方法
       PropertyDescriptor.getWriteMethod()
       PropertyDescriptor.getReadMethod()
       可以通过属性描述器得到bean 属性名称
       PropertyDescriptor.getName()
 
// 1. 创建一个Map 集合, 模仿request.getParameterMap() 获取的结果
           Map<String, String[]> map = new HashMap<String, String[]>();
           map.put("username", new String[] { "tom" });
           map.put("password", new String[] { "123" });
           // 2. 创建一个User 对象
           User user = new User();
           // 3. 得到一个BeanInfo 对象
           BeanInfo bif = Introspector.getBeanInfo(User.class);
 
           // 4. 得到所有属性描述器
           PropertyDescriptor[] pds = bif.getPropertyDescriptors();
           // 5. 通过属性描述器得到读写方法
           for (PropertyDescriptor pd : pds) {
                  Method writeMethod = pd.getWriteMethod();
                  // 6. 得到方法名称
                  if (writeMethod != null) {
                         //System.out.println(pd.getName()); // 得到bean 属性名称
                         //System.out.println(writeMethod.getName()); // 得到所有的set 方法名称
                         String name=pd.getName();
                        
                         writeMethod.invoke(user, map.get(name)[0]);
                  }
           }
           System.out.println(user);
 
Beanutils 中类型转换
Beanutils 工具中本身是提供一些类型转换的,可以直接将请求参数封装到javaBean 对应的属性上,属性的类型不是String, 也可以,例如int age.
我们在使用Beanutils 工具时,可以做自定义的类型转换,将请求参数封装到javaBean 中。
我们可以参考beanutils 本身提供的类型转换器。
 
完成自定义类型转换器步骤:
1.        创建一个类来实现org.apache.commons.beanutils.Converter
2.        重写方法完成类型转换
参数type 就要要转换的类型
参数value 就是浏览器端发送的请求参数数据
这个方法的返回值就是给bean 属性要赋的值。
 
3.        注册自定义类型转换器、
 
MVC 设计模式
MVC 全名是model  view  controller 它是一种软件设计典范,用一种业务逻辑,数据,界面分离的方式来组织代码,将业务逻辑聚集到一个部件中,方便程序的重用,提高我们的开发效率。
Jsp model2 它就是一个mvc 设计模式。
 
M:model 即模型层,维护数据提供数据的访问  javaBean
V:view 即视图层 数据的显示  jsp
C:controller 控制层,用于业务处理。 Servlet
 
Model2 它是mvc 模式,mvc 它不是model2
 
Javaweb 开发中三层架构
       三层指的是web   service dao 它这种架构是我们在javaweb 开发中经常使用的。
      
       Web : 它包含了jsp servlet javaBean 相关内容
       Service : 它也叫做bussiness 它只处理业务逻辑操作,不包含web 相关API
Dao 数据层 也叫做持久化层 它的主要功能是负责对数据源访问,简单说,它就是包含对数据的CRUD 操作
 
Web 开发的三层架构与mvc 区别?
三层架构它是一个分层式的体系架构设计,它可适用于任何一个项目,MVC 它只是一个设计模式,它是根据项目的具体需求来决定是否适用于该项目。
在开发,首要对项目进行架构,在架构以后,我们要根据具体的需求,来选择设计模式。例如mvc  工厂模式等。
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以为您解答有关MVC设计模式JavaWeb中的简单实验。 MVC是一种常用的设计模式,用于将应用程序分为三个部分:模型(Model)、视图(View)和控制器(Controller)。在JavaWeb中,MVC模式可以用于实现Web应用程序的开发。 下面是一个简单的MVC模式实验,使用JavaWeb实现一个简单的登录页面: 1. 创建一个Model类,用于处理数据逻辑,例如User.java,包含用户名和密码的属性和相应的getter和setter方法。 ```java public class User { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } } ``` 2. 创建一个View类,用于显示用户界面,例如login.jsp,包含一个表单以供用户输入用户名和密码。 ```html <form action="loginController" method="post"> <input type="text" name="username" placeholder="Username"><br> <input type="password" name="password" placeholder="Password"><br> <input type="submit" value="Login"> </form> ``` 3. 创建一个Controller类,用于处理用户请求和响应,例如LoginController.java,包含一个doPost方法,用于验证用户输入的用户名和密码,并根据验证结果返回相应的视图。 ```java public class LoginController extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String username = request.getParameter("username"); String password = request.getParameter("password"); // 验证用户名和密码 if (username.equals("admin") && password.equals("password")) { // 如果验证通过,跳转到成功页面 request.getRequestDispatcher("success.jsp").forward(request, response); } else { // 如果验证失败,跳转到失败页面 request.getRequestDispatcher("failure.jsp").forward(request, response); } } } ``` 4. 配置web.xml文件,将请求映射到相应的Controller类中。 ```xml <servlet> <servlet-name>LoginController</servlet-name> <servlet-class>com.example.LoginController</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginController</servlet-name> <url-pattern>/loginController</url-pattern> </servlet-mapping> ``` 5. 创建成功页面和失败页面,例如success.jsp和failure.jsp,用于显示相应的结果。 ```html <!-- success.jsp --> <h1>Login successful!</h1> <!-- failure.jsp --> <h1>Login failed!</h1> ``` 以上就是一个简单的MVC模式实验,使用JavaWeb实现一个简单的登录页面。通过使用MVC模式,将应用程序分为三个部分,可以使代码更加清晰、易于维护和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值