利用Java举办Web开拓的随想
副标题#e#
我伴侣常常引用我的一句话就是:你的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[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( " 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;
} }
#p#副标题#e#
标签的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页面
代码
#p#分页标题#e#
<%@ 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支持….