利用Java举办Web开拓的随想
当前位置:以往代写 > JAVA 教程 >利用Java举办Web开拓的随想
2019-06-14

利用Java举办Web开拓的随想

利用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"/>

#p#副标题#e#

这样我们就获得这样的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支持….

    关键字:

在线提交作业