Java Web开发方式讨论

Inhibitory 2010-08-12 09:06:19
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开发经验还是太少,只是觉得这样去做蛮舒服的。

希望大家说说自己的看法,经验等,互勉共进。
...全文
264 27 打赏 收藏 转发到动态 举报
写回复
用AI写文章
27 条回复
切换为时间正序
请发表友善的回复…
发表回复
mq8mq 2010-08-16
  • 打赏
  • 举报
回复
看不懂得路过
king138888 2010-08-16
  • 打赏
  • 举报
回复
在struts使用ajax来进行表单验证时,可以利用自定义的CSS处理显示效果吗?
肯定可以啦!!!
czp3158 2010-08-16
  • 打赏
  • 举报
回复
其实我觉得就得看项目的大小啦~
很小的话直接就用纯jsp就行啦~
稍大点在加上javabean ,servlet
再大的话可以用框架啦~ 毕竟效率第一嘛~
Mybeautiful 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用楼主 inhibitory 的回复:]
后台:Servlet只处理业务逻辑,如前台请求数据库中的数据,Servlet在后台取得数据,然后传递给前浏览器
[/Quote]

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

至于楼主说得其他部分,都是UI部分。
Inhibitory 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 24 楼 king138888 的回复:]

在struts使用ajax来进行表单验证时,可以利用自定义的CSS处理显示效果吗?
肯定可以啦!!!
[/Quote]
嗯,这个我看了Struts验证表单时生新的代码, 可以使用CSS来调整一下显示效果的, 但是因为验证时会生成一个新的table, 如果在设计要求不高的情况下, 加上CSS调整一下效果还是不错的, 但是却不能随心所欲的调整效果, 也算有得有失吧.
有空看看Struts的AJAX验证, 看看会是怎么样的.呵呵.
Inhibitory 2010-08-16
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 mybeautiful 的回复:]

引用楼主 inhibitory 的回复:
个人认为,这个Servlet糅合了界面、业务逻辑、数据持……
[/Quote]
这样的Servlet做了所有的事,代码中显示与业务逻辑,持久层全混在一起.即使MVC做得再好, 也只有后台的人能看得懂这种MVC模式.例如做美工和前台页面编程人员需要了解Servlet才行,但这很多时候是不现实的. 要么等前台的人把东西写好后, 做后台的再把Servlet加入到已经做好的前台代码中, 然而这个时候后台的人也需要了解很多前台方面的知识, 甚至在开发的时候, 因为代码必须混乱在一起, 不得不把已经做好的很好看的页面改得乱七八糟, 失去了原先设计好的效果.
AJAX的异步交互功能, 有一个特点就是可以通过消息使得前台和后台的代码完全分离, 这样Servlet只负责业务逻辑和持久层.
Inhibitory 2010-08-13
  • 打赏
  • 举报
回复
使用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结尾的请求(应该不会这么蛋疼)?
但这一点不是很明白。
Inhibitory 2010-08-13
  • 打赏
  • 举报
回复
使用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结尾的请求(应该不会这么蛋疼)?
但这一点不是很明白。
Inhibitory 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 dickli1986 的回复:]

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

我恰恰使用Hibernate,感觉太方便了,不用写SQL,配置一下XML就完成了,呵呵。因为Hibernate对每条记录需要生成一个对象,但是如果自己去使用JDBC完成DAO实现,一样对每条记录也需要生成一个对象,当一个页面的记录过多的时候,一般都会考虑分页的,毕竟谁也不知道这个会多到什么程度,1000条?10000条?如果不分页的话,都有可能,那即使用再好的JDBC都会崩溃。

刚看了看struts,最主要还是表单验证,可以通过配置文件进行验证条件设置,在复杂的验证时应该会比较好用。

配置框架的xml倒不是很难,照着规则做就好了。

因为我使用的这种方式看上去太没技术含量了,很简单,看到现在SSH那么火,所以心里没底。
我最关心的安全性问题,不知道我的做法在安全性上会不会遇到问题。
teemai 2010-08-13
  • 打赏
  • 举报
回复
楼主的做法蛮好的。
dickli1986 2010-08-13
  • 打赏
  • 举报
回复
这样很好啊,MVC完全可以自己去封装嘛,系统规模小没必要用SSH的,况且使用架构必然要配置一些相对较为复杂的XML,而且使用hibernate当页面输出数据比较多的时候,影响性能的,不过struts倒是个不错的东东,至少不用所有代码都放在一个service方法中,模块化对于系统维护也比较方便哈
同光和尘 2010-08-13
  • 打赏
  • 举报
回复
框架太多了,一般你到公司后公司有自己的一套开发“框架”
tuo_bing 2010-08-13
  • 打赏
  • 举报
回复
呵呵 ,前台也是 LZ 这样的开发方式 ,前台页面显得很干净 ,后台则用 struts2 和 spring 。。。。。
「已注销」 2010-08-13
  • 打赏
  • 举报
回复
感觉国内现在对SSH2真是过度崇拜,除非非常大的项目可以考虑 一般中小型项目完全可以采用Servlet+jsp来弄 个人意见
jiang521725 2010-08-13
  • 打赏
  • 举报
回复
我会关注你的
yearnqiao 2010-08-13
  • 打赏
  • 举报
回复
楼主的做法应该要是最原始的web开发了

各有各的好处
Inhibitory 2010-08-13
  • 打赏
  • 举报
回复
[Quote=引用 18 楼 lacus87 的回复:]

稍微大一点的项目SSH就不行了,每天几百万条的数据流量用hibernate能废掉你的服务器....

小点的项目用SSH也不划算,框架弄了那么多,真正的功能组建没多少

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

Hibernate里必要时可以使用createSQLQuery()来使用SQL查询,但是性能方面没做过测试。
lacus87 2010-08-13
  • 打赏
  • 举报
回复
稍微大一点的项目SSH就不行了,每天几百万条的数据流量用hibernate能废掉你的服务器....

小点的项目用SSH也不划算,框架弄了那么多,真正的功能组建没多少

SSH找工作是利器,不过实际开发用SSH的应该还真不多
haizilin 2010-08-13
  • 打赏
  • 举报
回复
路过,学习了
jorneyR 2010-08-13
  • 打赏
  • 举报
回复
(汗,还得开个号来回复,一个号最多只能连续回复三次)
我的程序对界面还有一点小小的要求
1. 不能太丑。
2. 利用Ajax技术在当前页面弹出一个"窗口"进行注册。

下图是现在注册窗口的效果: 后台使用的是servlet,所以前端页面可以使用js + css任意控制显示的效果。
但是看了些struts进行表单验证的例子,struts会使用自己的table来显示验证信息。这样一来,自己使用CSS来控制显示效果就比较困难(主要是没找到好的例子)。想问一下,在struts使用ajax来进行表单验证时,可以利用自定义的CSS处理显示效果吗?
加载更多回复(6)

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧