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. 使用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开发经验还是太少,只是觉得这样去做蛮舒服的。希望大家说说自己的看法,经验等,互勉共进。
Hibernate与安全相关的话可能就是能够防止sql注入了。我觉得其实系统效率最高的还是Servlet+JSP的开发模式。
用SSH的话一是层次更清晰,二是开发效率更高吧!
不过会ssh可能确实是找工作的利器
我恰恰使用Hibernate,感觉太方便了,不用写SQL,配置一下XML就完成了,呵呵。因为Hibernate对每条记录需要生成一个对象,但是如果自己去使用JDBC完成DAO实现,一样对每条记录也需要生成一个对象,当一个页面的记录过多的时候,一般都会考虑分页的,毕竟谁也不知道这个会多到什么程度,1000条?10000条?如果不分页的话,都有可能,那即使用再好的JDBC都会崩溃。刚看了看struts,最主要还是表单验证,可以通过配置文件进行验证条件设置,在复杂的验证时应该会比较好用。配置框架的xml倒不是很难,照着规则做就好了。因为我使用的这种方式看上去太没技术含量了,很简单,看到现在SSH那么火,所以心里没底。
我最关心的安全性问题,不知道我的做法在安全性上会不会遇到问题。
<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结尾的请求(应该不会这么蛋疼)?
但这一点不是很明白。
<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结尾的请求(应该不会这么蛋疼)?
但这一点不是很明白。
我的程序对界面还有一点小小的要求
1. 不能太丑。
2. 利用Ajax技术在当前页面弹出一个"窗口"进行注册。下图是现在注册窗口的效果: 后台使用的是servlet,所以前端页面可以使用js + css任意控制显示的效果。
但是看了些struts进行表单验证的例子,struts会使用自己的table来显示验证信息。这样一来,自己使用CSS来控制显示效果就比较困难(主要是没找到好的例子)。想问一下,在struts使用ajax来进行表单验证时,可以利用自定义的CSS处理显示效果吗?
找工作SSH应该是利器,羡慕。
小项目使用Hibernate操作数据库也比较方便,自己写SQL容易出错,还都是些体力活,不过Hibernate性能损失主也许主要在反射上了吧。自己实现DAO,不需要反射了,性能直观上比Hibernate是要高些,但是Hibernate有缓存。如果在自己的DAO数据库操作没有缓存机制,那结果不知道最后是自己的好还是Hibernate好。如果自己写缓存,那难度又要增加太多。
反正结果就是:为难.Hibernate里必要时可以使用createSQLQuery()来使用SQL查询,但是性能方面没做过测试。
首先,这个Servlet不只是处理的业务逻辑,处理Ajax的请求,就是界面逻辑。
其次,业务逻辑远不止取得数据这么简单;甚至可以说,取数据本身根本就算不得业务逻辑。
所以,个人认为,这个Servlet糅合了界面、业务逻辑、数据持久层 于一体。至于楼主说得其他部分,都是UI部分。
很小的话直接就用纯jsp就行啦~
稍大点在加上javabean ,servlet
再大的话可以用框架啦~ 毕竟效率第一嘛~
肯定可以啦!!!
AJAX的异步交互功能, 有一个特点就是可以通过消息使得前台和后台的代码完全分离, 这样Servlet只负责业务逻辑和持久层.
有空看看Struts的AJAX验证, 看看会是怎么样的.呵呵.