Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 544|回复: 0

[jsp学习]用Java进行Web开发的随想

[复制链接]
  • TA的每日心情
    开心
    2021-3-12 23:18
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2014-10-1 23:33:08 | 显示全部楼层 |阅读模式
    我朋友经常引用我的一句话就是:你的
        Java对我的javascript是侵入的....,仿佛她比我还OO来着。
       

           我自己就提出了一个解决的方法:就是把Java对象写成JS对象,这样Web设计人员只要关注JS对象,用JS对象来渲染整个Web页面,这样我就不会和他的领域冲突了。

    简单来说,我们平常的WEB框架都是号称MVC的,这样它们就把V这个事情压在了JAVA程序员的身上,可怜我的审美观啊~所以我们应该把V继续往下推,推给对JAVA什么都不懂,但是却有非常丰富的WEB设计人员的身上。总不能让别人去学JAVA呀,那就只好把JAVA对象写成JS对象,这样WEB设计人员就可以轻松调用JS了。

    大体实现过程是这样的:

    1、双方先讨论项目的需求,然后确定下个个页面需要显示什么内容,怎么显示不管。讨论完后便确定了JS对象和数据库的大体结构。   
      
       
       
       

       
      




          2、各自写各自的东西...

    3、双方写好后把WEB页面通过JS对象和Java连接起来,调试,完工。

    具体关键代码:

    J2J.java的代码,功能是获取scope范围内,名称为source的java对象,然后把这个java对象写成名称为distName类别为dist的JS对象。

    代码:








      
       
       
        /*
    * J2J.java
    *
    * Created on 2006年10月2日, 下午7:16
    *
    * To change this template, choose Tools | Template Manager
    * and open the template in the editor.
    */

    package net.vlinux.tag.j2j;
    import javax.Servlet.jsp.*;
    import javax.servlet.jsp.tagext.*;
    import java.lang.reflect.*;
    import java.util.*;

    /**
    *
    * @author vlinux
    */
    public class NewObject extends TagSupport {
    private String dist;
    private String distName;
    private String scope;
    private String source;

    private List<Method> getGetMethods( Object aObject ) {
    Method[] array = aObject.getClass().getMethods();
    List<Method> list = new ArrayList<Method>();
    for( int i=0;i<array.length;i++ ){
    String methodName = array.getName();
    if( methodName.matches("get.*") )
    list.add(array);
    }
    return list;
    }

    private String getFieldName( Method aMethod){
    String methodName = aMethod.getName();
    String subName = methodName.substring(3,methodName.length());
    return subName.toLowerCase();
    }

    private Object getSourceObject(String scope, String source){
    if( scope.equals("request") ){
    return pageContext.getRequest().getAttribute(source);
    }else if( scope.equals("session") ){
    return pageContext.getSession().getAttribute(source);
    }else if( scope.equals("page") ){
    return pageContext.getAttribute(source);
    }else{
    System.out.println("xxx");
    return null;
    }
    }

    public int doStartTag(){
    JspWriter out = pageContext.getOut();
    Object sourceObject = getSourceObject(getScope(),getSource());
    List list = getGetMethods( sourceObject );
    try{
    out.println( "<script>" );
    out.println( "        var " + getDistName() + " = new " + getDist() + "();");
    for( int i=0;i<list.size();i++ ){
    try{
    String fieldName = getFieldName((Method)list.get(i));
    String value = ((Method)list.get(i)).invoke( getSourceObject(getScope(),getSource())).toString();
    out.println( "        "+getDistName() + "." + fieldName + " = "" + value +""");
    }catch(Exception e){
    //
    }
    }
    out.println( "</script>" );
    }catch( java.io.IOException ioe){
    //
    }
    return (EVAL_BODY_INCLUDE);
    }
    public int doEndTag(){
    return (EVAL_PAGE);
    }

    public String getDist() {
    return dist;
    }

    public void setDist(String dist) {
    this.dist = dist;
    }

    public String getDistName() {
    return distName;
    }

    public void setDistName(String distName) {
    this.distName = distName;
    }

    public String getScope() {
    return scope;
    }

    public void setScope(String scope) {
    this.scope = scope;
    }

    public String getSource() {
    return source;
    }

    public void setSource(String source) {
    this.source = source;
    } }
       
       
      

    标签的tld也一起给出吧,虽然不是关键



    代码:




      
       
       
       
    1. <?xml version="1.0" encoding="UTF-8"?>
    2. <taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee"
    3.  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    4.  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
    5.   <tlibversion>1.0</tlibversion>
    6.   <jspversion>1.1</jspversion>
    7.   <shortname>J2J</shortname>
    8.   <uri>/J2J</uri>
    9.   <tag>
    10.     <name>newObject</name>
    11.      <tagclass>net.vlinux.tag.j2j.NewObject</tagclass>
    12.      <bodycontent>JSP</bodycontent>
    13.      <info></info>
    14.      <attribute>
    15.         <name>distName</name>
    16.         <required>true</required>
    17.      </attribute>
    18.      <attribute>
    19.         <name>dist</name>
    20.         <required>true</required>
    21.      </attribute>
    22.      <attribute>
    23.         <name>scope</name>
    24.         <required>true</required>
    25.      </attribute>
    26.      <attribute>
    27.         <name>source</name>
    28.         <required>true</required>
    29.      </attribute>
    30.    </tag>
    31. </taglib>
    复制代码

       
       
      

    具体调用的JSP页面



    代码




      
       
       
        <%@ taglib uri="/WEB-INF/J2J.tld" prefix="jj"%>
    1.  <%
    2.    //创建一个简单对象
    3.    net.vlinux.test.User user = new net.vlinux.test.User();
    4.    user.setId(new Integer(1));
    5.    user.setName("vlinux");
    6.    user.setPassword("lovefs");
    7.    user.setUsername("oldmanpushcart");
    8.    //把对象放到request中去
    9.    request.setAttribute("user",user);
    10. %>

    11. <!--  
    12.     这里要注意
    13.         dist是目标Javascript对象,这个是必须和web设计人员事先约定好的
    14.         distName 是目标Javascript对象实例的名,这个也是必须和web设计人月事先约定好
    15.         scope 告诉标签去那个范围寻找java对象的实例
    16.         source 源对象,也就是java对象,标签会通过scope确定的范围搜寻source
    17. -->
    18. <jj:newObject dist="User" distName="user" scope="request" source="user"/>
    复制代码

       
       
      

    这样我们就得到这样的HTML代码。



    代码:




      
       
       
        <script>
    var user = new User();
    user.username = "oldmanpushcart"
    user.name = "vlinux"
    user.id = "1"
    user.password = "lovefs"
    user.class = "class net.vlinux.test.User"
    </script>
       
       
      

    控制页面输出代码为,JS程序员就是这样来渲染WEB页面的:



    代码:




      
       
       
        <script>document.writeln(user.id);</script><br>
    <script>document.writeln(user.name);</script><br>
    <script>document.writeln(user.username);</script><br>
    <script>document.writeln(user.password);</script><br>  
       
       
      

    输出内容:

    1 vlinux
    oldmanpushcart
    lovefs

    JavaToJS我喜欢叫她j2j.

    j2j的优点在于:

    1、Java程序员和JS程序员相互之间不会干扰,各自干各自的。

    2、JS程序员不用依赖JAVA代码才能进行测试,相反,它们很早就可以通过构造一些JS银弹来对页面情况进行测试了,开发速度一般比JAVA部分还快。很多项目都是先弄个大体框架,然后再慢慢细调。这样效率低,而且也不方便和客户交流--客户喜欢看到实际的东西。如果是J2J就是一步到位。

    3、方便日后的维护和替换--万一有一天我死了(T_T),我的朋友还可以找其他的WEB程序员进行维护,如果找不到JAVA程序员,她甚至还可以找个ASP程序员把我的代码全部重写而不用修改页面的任何地方--也许表单的action需要改一下。

    4、天生支持AJAX

    当然,任何东西都是有缺点的,j2j的缺点在于:

    1、不适合用来改写以前的代码,因为j2j的JS对于其他页面来说是侵入的

    2、HTTP页面上会有大量的<script></script>段的存在,显得非常的不美观

    3、没有IDE支持....  
      
       
       
         
         

          
         

          
         
       
      
       


    源码下载:http://file.javaxxz.com/2014/10/1/233308203.zip
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2025-2-27 05:39 , Processed in 0.368032 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表