Java Web经典的开发方式:
1. 使用Servlet:业务逻辑和界面显示都用Servlet来写。
2. JSP + Java Bean: JSP简化了Servlet的界面编程。不过,这两种方式都不太喜欢。我现在使用:
后台:Servlet只处理业务逻辑,如前台请求数据库中的数据,Servlet在后台取得数据,然后传递给前浏览器端。
前台:Html + JavaScript + CSS:前台得到后台返回的数据后,使用JavaScript(jQuery)操作DOM显示出来,而CSS去控制页面的显示效果。各施其职,感觉分工还算明确,修改的时候也容易,互相影响不太大。
通讯:使用AJAX方式,前台与后台进行交互,可以使用XML,JSON,Plain Text。
JSP页面:只是简单HTML+接收参数,JSP轮为了前台,与后台代码一点关系也没有了。如请求用户信息的JSP页面,就是一个HTML页面,加上一句与JSP相关的代码
<input type="hidden" id="userId" value=<%=request.getParameter("userId")%>>
发送请求时
var userId = $("#userId").val();
//...客户端验证可选(减少交互次数,提高用户体验),然后发送请求,如其他的请求,涉及到安全性的验证时都要在服务器端进行有效性验证.
$.ajax({url: "requestuser", type: "get", data: {userId: userId}, 
success: function(userdata) {
    // ....显示用户信息
}, 
error: function() {
    // ....
}});这种方式的优点:好像MVC的模式起到了作用,还有就是后台编程的语言可以随便换,如把Java换成PHP,只要通讯的信息格式不变就行,那么一点也不会影响到前台,前台甚至一句代码都不用修改,就进行了服务器端的替换。
正好我现在写的两个程序,一个要求使用PHP,另一个使用Java(使用了Servlet),正是使用这种方式,前台的编程完全一样。但现在我却不敢确定,这种开发方式在安全性上有没有问题(看到好多朋友都用SSH来开发,而自己正好不会这个,羡慕,最为难的是现在还没有时间去学),因为WEB开发经验还是太少,只是觉得这样去做蛮舒服的。希望大家说说自己的看法,经验等,互勉共进。

解决方案 »

  1.   

    还没,不过马上要毕业了,愁ing.
      

  2.   

    Struts中与安全相关的可能就是表单校验,防止非法数据进入系统。
    Hibernate与安全相关的话可能就是能够防止sql注入了。我觉得其实系统效率最高的还是Servlet+JSP的开发模式。
    用SSH的话一是层次更清晰,二是开发效率更高吧!
      

  3.   

    对ssh甚是喜欢。。可能我对web还不够深入,因为当我用ssh来写的时候,才能感觉原来分层能分到这种程度。MVC模式也完美展现出来。单纯用servlet来写,我感觉也太繁琐了。。而jsp+javabean,业务逻辑不是太清晰,代码重用性感觉不够强。可能我理解太浅薄了吧。
      

  4.   

    你这挺好的吧,现在国人过度崇拜ssh,我估计你给老外说ssh2,没几个人会往这三个库上去想,包括去google上查下ssh2就知道了,确实好像现在java越来越注重企业级项目这个方向,所以这框架那框架一个接一个,如果真的需要,无可厚非,对于一个较大团队共同开发可能帮助很大,但这不等于说现在java web=ssh2啊,不能查个数据库生成个表格就一下用三个库,杀鸡焉用宰牛刀
    不过会ssh可能确实是找工作的利器
      

  5.   

    我们公司现在的开发方式就是LZ说的这种,不过我们还不用jquery
      

  6.   

    感觉国内现在对SSH2真是过度崇拜,除非非常大的项目可以考虑 一般中小型项目完全可以采用Servlet+jsp来弄 个人意见 
      

  7.   

       呵呵 ,前台也是 LZ 这样的开发方式 ,前台页面显得很干净 ,后台则用  struts2 和 spring   。。
      

  8.   

    这样很好啊,MVC完全可以自己去封装嘛,系统规模小没必要用SSH的,况且使用架构必然要配置一些相对较为复杂的XML,而且使用hibernate当页面输出数据比较多的时候,影响性能的,不过struts倒是个不错的东东,至少不用所有代码都放在一个service方法中,模块化对于系统维护也比较方便哈
      

  9.   


    我恰恰使用Hibernate,感觉太方便了,不用写SQL,配置一下XML就完成了,呵呵。因为Hibernate对每条记录需要生成一个对象,但是如果自己去使用JDBC完成DAO实现,一样对每条记录也需要生成一个对象,当一个页面的记录过多的时候,一般都会考虑分页的,毕竟谁也不知道这个会多到什么程度,1000条?10000条?如果不分页的话,都有可能,那即使用再好的JDBC都会崩溃。刚看了看struts,最主要还是表单验证,可以通过配置文件进行验证条件设置,在复杂的验证时应该会比较好用。配置框架的xml倒不是很难,照着规则做就好了。因为我使用的这种方式看上去太没技术含量了,很简单,看到现在SSH那么火,所以心里没底。
    我最关心的安全性问题,不知道我的做法在安全性上会不会遇到问题。
      

  10.   

    使用Struts2.1的时候,还遇到一个struts url pattern过滤的问题,如下面的配置文件
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
        version="2.5">
        <filter>
            <filter-name>struts2</filter-name>
            <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
        </filter>    <!-- FilterDispatcher用来初始化struts2并且处理.action和.jsp的WEB请求。 -->    <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>*.action</url-pattern>
        </filter-mapping>
        <filter-mapping>
            <filter-name>struts2</filter-name>
            <url-pattern>*.make</url-pattern>
        </filter-mapping>
    </web-app>当html页面请求  sum.action的时候,会被struts正确处理,但是如果调用sum.make,struts却接收不到请求。是不是struts2要求要么struts使用<url-pattern>/*</url-pattern>处理所有的请求,要么只能处理以.action结尾的请求(应该不会这么蛋疼)?
    但这一点不是很明白。
      

  11.   

    使用Struts2.1的时候,还遇到一个struts url pattern过滤的问题,如下面的配置文件:
    <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
      version="2.5">
      <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class>
      </filter>  <!-- FilterDispatcher用来初始化struts2并且处理.action和.jsp的WEB请求。 -->  <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.action</url-pattern>
      </filter-mapping>
      <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>*.make</url-pattern>
      </filter-mapping>
    </web-app>
    当html页面请求 sum.action的时候,会被struts正确处理,但是如果调用sum.make,struts却接收不到请求。是不是struts2要求要么struts使用<url-pattern>/*</url-pattern>处理所有的请求,要么只能处理以.action结尾的请求(应该不会这么蛋疼)?
    但这一点不是很明白。
      

  12.   

    (汗,还得开个号来回复,一个号最多只能连续回复三次)
    我的程序对界面还有一点小小的要求
    1. 不能太丑。
    2. 利用Ajax技术在当前页面弹出一个"窗口"进行注册。下图是现在注册窗口的效果: 后台使用的是servlet,所以前端页面可以使用js + css任意控制显示的效果。
    但是看了些struts进行表单验证的例子,struts会使用自己的table来显示验证信息。这样一来,自己使用CSS来控制显示效果就比较困难(主要是没找到好的例子)。想问一下,在struts使用ajax来进行表单验证时,可以利用自定义的CSS处理显示效果吗?
      

  13.   

    稍微大一点的项目SSH就不行了,每天几百万条的数据流量用hibernate能废掉你的服务器....小点的项目用SSH也不划算,框架弄了那么多,真正的功能组建没多少SSH找工作是利器,不过实际开发用SSH的应该还真不多
      

  14.   

    每天几百万条数据流量好像不是很大哦(以前用sqlite 1秒向数据库好像是插入10万条记录做测试,所以几百万应该不多吧)。
    找工作SSH应该是利器,羡慕。
    小项目使用Hibernate操作数据库也比较方便,自己写SQL容易出错,还都是些体力活,不过Hibernate性能损失主也许主要在反射上了吧。自己实现DAO,不需要反射了,性能直观上比Hibernate是要高些,但是Hibernate有缓存。如果在自己的DAO数据库操作没有缓存机制,那结果不知道最后是自己的好还是Hibernate好。如果自己写缓存,那难度又要增加太多。
    反正结果就是:为难.Hibernate里必要时可以使用createSQLQuery()来使用SQL查询,但是性能方面没做过测试。
      

  15.   

    楼主的做法应该要是最原始的web开发了各有各的好处
      

  16.   


    首先,这个Servlet不只是处理的业务逻辑,处理Ajax的请求,就是界面逻辑。
    其次,业务逻辑远不止取得数据这么简单;甚至可以说,取数据本身根本就算不得业务逻辑。
    所以,个人认为,这个Servlet糅合了界面、业务逻辑、数据持久层 于一体。至于楼主说得其他部分,都是UI部分。 
      

  17.   

    其实我觉得就得看项目的大小啦~
    很小的话直接就用纯jsp就行啦~
    稍大点在加上javabean ,servlet
    再大的话可以用框架啦~ 毕竟效率第一嘛~
      

  18.   

    在struts使用ajax来进行表单验证时,可以利用自定义的CSS处理显示效果吗?
    肯定可以啦!!!
      

  19.   

    这样的Servlet做了所有的事,代码中显示与业务逻辑,持久层全混在一起.即使MVC做得再好, 也只有后台的人能看得懂这种MVC模式.例如做美工和前台页面编程人员需要了解Servlet才行,但这很多时候是不现实的. 要么等前台的人把东西写好后, 做后台的再把Servlet加入到已经做好的前台代码中, 然而这个时候后台的人也需要了解很多前台方面的知识, 甚至在开发的时候, 因为代码必须混乱在一起, 不得不把已经做好的很好看的页面改得乱七八糟, 失去了原先设计好的效果.
    AJAX的异步交互功能, 有一个特点就是可以通过消息使得前台和后台的代码完全分离, 这样Servlet只负责业务逻辑和持久层.
      

  20.   

    嗯,这个我看了Struts验证表单时生新的代码, 可以使用CSS来调整一下显示效果的, 但是因为验证时会生成一个新的table, 如果在设计要求不高的情况下, 加上CSS调整一下效果还是不错的, 但是却不能随心所欲的调整效果, 也算有得有失吧. 
    有空看看Struts的AJAX验证, 看看会是怎么样的.呵呵.