<%@ page contentType="text/html; charset=gb2312"%> 使用Java进行web开发的随想
网站公告:   ◆北天JAVA技术网热情为java爱好者服务,本网内容包括JAVA(JSP、servlet、EJB、webservice、j2ee、javabean、应用服务器、JavaScript),数据库(MYSQL、SQL Server、Sybase、Oracle、DB2、数据库综合知识),设计研究(设计模式、Struts、Spring、Hibernate、设计框架、设计综合知识),WEB2.0新技术(主要介绍AJAX),以及各种技术的入门、实例、例子等等,欢迎各位多来坐坐!◆  诚邀各位JAVA爱好者加盟!◆  本网站内容丰富,更新快,保证每周20篇以上!  
加入收藏
设为首页
联系站长
承接项目
  相关资源:网站首页 | 免费培训学院 | 技术论坛 | JAVA聊天室 | 作家专栏 | 开发工具 | 认证考试 | 会员俱乐部
  JAVA技术初学者园地 | jsp与servlet | javascript | Java源代码 | EJB | web service | 应用服务器 | JAVA综合知识
  设计研究设计模式 | 设计框架 | Struts | Spring | Hibernate | 开源项目 | 面向对象设计 | 设计综合知识
  数 据 库MYSQL | SQL Server | Sybase | Oracle | DB2 | Informix | Access | 数据库综合知识
  其他资源:AJAX新技术 | 网站开发 | ERP软件 | OA办公软件 | 商业智能BI | 开发综合知识 | 承接项目 | 项目试用

 
 
使用Java进行web开发的随想
     发布者: 发布时间:2006-10-10

小子自学Java已经一载有余,当然是和大大们不能相比。然而偶在用Java进行web开发的时候,不管是用什么web框架(Struts、SpringMVC...等等)都会让和我一起搭档的Javascript朋友头痛不已--她不会Java,看不明白Java的标签,而且在修改web页面的时候总是拉我陪他通宵,否则就不知道那个标签是不能修改的。我那个累啊~

我朋友经常引用我的一句话就是:你的Java对我的Javascript是侵入的.... T_T,仿佛她比我还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[i].getName();
if( methodName.matches("get.*") )
list.add(array[i]);
}
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( "\tvar " + 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( "\t"+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也一起给出吧,虽然不是关键

代码
 

<?xml version="1.0" encoding="UTF-8"?>
<taglib version="2.0" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee web-jsptaglibrary_2_0.xsd">
<tlibversion>1.0</tlibversion>
<jspversion>1.1<
/jspversion>
<shortname>J2J</shortname>
<uri>
/J2J</uri>

<tag>

<name>newObject<
/name>
<tagclass>net.vlinux.tag.j2j.NewObject</tagclass>
<bodycontent>JSP<
/bodycontent>
<info></info>

<attribute>
<name>distName<
/name>
<required>true</required>
<
/attribute>

<attribute>
<name>dist</name>
<required>true<
/required>
</attribute>

<attribute>
<name>scope<
/name>
<required>true</required>
<
/attribute>

<attribute>
<name>source</name>
<required>true<
/required>
</attribute>

<
/tag>
</taglib>

具体调用的JSP页面

代码
 

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

<!--
这里要注意
dist是目标Javascript对象,这个是必须和web设计人员事先约定好的
distName 是目标Javascript对象实例的名,这个也是必须和web设计人月事先约定好
scope 告诉标签去那个范围寻找java对象的实例
source 源对象,也就是java对象,标签会通过scope确定的范围搜寻source
-->
<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支持.... T_T

以上是我对用java进行web设计的一些随想,谈不是感悟... 没有写过大的项目,不知道大的项目如果采用这样的方式开发会有什么影响。欢迎各位大大拍砖。

(转载文章请保留出处:北天JAVA技术网(www.java114.com))
 
更多精彩文章:
不要乱用ajax中异步操作
Spring2.0的新特性点评
MD5加密的JavaScript实现
在 Java 应用程序中访问 USB 设备
Java socket 入门编程实例
实战体会Java的多线程编程
 
最近评论:
        
冰封的往事!
wow power leveling,wow gold,wow power leveling,wow gold max(7188)
        
冰封的往事!
wow power leveling,wow gold,WoW Gold,wow gold max(6359)
        
飞舞的传奇!
传世私服,传世私服.传奇世界私服传奇世界私服,传世私服传世私服, 传奇世界私服传奇世界私服.传奇私服传奇私服. max(9012)
        
回复:使用Java进行web开发的随想
想要程序跟美工分开,随便找个开源模板就行啦``
        
标 题:   
内 容:   
 
                                  
 
免责声明:该文章由网友发表,如果对您造成侵权,请联系站长

首页 - 承接项目 - 网站地图 - 联系我们 -
版权所有北天JAVA技术工作室 ICP证号:粤ICP备06079815号