请教各位老师,不改xml,如何在页面中提交后,修改数据库? 本帖最后由 dawnspace 于 2013-03-05 21:27:57 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 xml只是灵活配置的需要,可以舍弃灵活的话就不是必须的js是客户端代码,中间是跨网的,js发送请求给另外一个jsp页面(页面中包含数据库删除逻辑)倒是可以试试,或者通过ajax方式一样的 是不是通过js跳转到到其他JSP,中间传几个参数过去。然后对数据库的操作放在另一个JSP里面来处理? 直接用ajax 做 调用后台方法连接jdbc 进行数据库操作就可以了 这是可以的,不过有一些事情需要搞清楚:jsp的本质是一个servlet,或者说是标签化的servlet,每一个jsp页面都会被servlet容器生成对应的servlet,然后再开始执行。对于tomcat来说,他会被放在work文件夹路径下相应项目里,形如: 这说明了两个问题:一个,能用servlet做的就可以用jsp做,只不过需要用标签嵌套起来。另一个,如果你们老板不准你增加servlet的话,你增加Jsp也违背了他的要求。 其实,这种被勾选了就执行其他逻辑这一类的需求,不需要增加新的servlet。servlet毕竟处于控制层,将处理你jsp请求的servlet的响应方法中的逻辑拿出来,做一个业务类,里面有一个响应处理的方法,形如:public boolean requestOperate(String flag, ...){},通过标记参数决定做什么业务处理,在servlet中调用业务方法就好。 这么做是不是要加入到web.xml里面去? 我老板的意思是:可以加类,也可以新建servlet,唯一不许的就是修改配置xml文件。 完全不需要,加一个类根本月主配文件web.xml没有关系,只是需要在servlet中实例化调用罢了。 通常是要加一个类或者一个java文件 形如:public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException { String flag = ...; RequestBusiness bus = new RequestBusiness(); boolean result = bus.requestOperate(request, response, flag); ...}做一个业务类:public class RequestBusiness{ public boolean requestOperate(HttpServletRequest request,HttpServletResponse response,String flag) { if(flag.equals(xxx)) { //逻辑体 } else if(flag.equals(xxx)) { } ... else//无匹配执行的默认逻辑 { } return true; }}大致如此了 这位老师的这个方法,好像还是基于修改本jsp的提交doPost方法吧。可是我的这个jsp文件本身就没有提交功能。一开始就只是用来显示的。这个jsp自己就没有对应的处理提交的servlet。要写一个新的,还是要自己修改web.xml 我现在采用javascript的location.herf()跳转到一个新的jsp文件里面。然后用new.jsp?XXX=xxxx 传参数,在new.jsp里面 执行 处理业务的类。 但我觉得这样不是很安全,传的参数都在IE地址栏里面看到了。而且参数量的大小还要控制。 你的改动和xml一毛钱关系都没有啊。 那就用form:<form method="post" action="new.jsp"></form> 哎写个业务类直接在jsp里面加小脚本,在小脚本里面搞业务类 写了个例子,在同一个JSP页面处理删除操作,主要是将要删除的记录id作为当前jsp页面的参数传入,若参数不为空则获取deleteIds参数信息执行删除操作,希望能帮到你~~index.jsp文件如下:<%@ page contentType="text/html; charset=UTF-8"%><%@ page import="java.sql.*"%><%//驱动类名String className = "org.gjt.mm.mysql.Driver";// 数据库URLString url = "jdbc:mysql://localhost/win";// 用户名String userName = "root";// 密码String password = "";String listSql = "select * from email_history order by id limit 1,100";String deleteSql = "delete from email_history where id in (%s)";Class.forName(className);Connection conn = DriverManager.getConnection(url, userName, password);Statement stmt = conn.createStatement();String deleteIds = request.getParameter("deleteIds");if(deleteIds!=null && !"".equals(deleteIds)) { stmt.execute(String.format(deleteSql, deleteIds));}%><html><head><title>会议信息</title></head><body> <table border="1"><%ResultSet rs = stmt.executeQuery(listSql);String ids = "";while (rs.next()){ ids += "," + rs.getInt("id");%> <tr> <td><input type="checkbox" id='checkbox_<%=rs.getInt("id") %>' name='checkbox_<%=rs.getInt("id") %>' onclick="doCheck()" /></td> <td><%=rs.getInt("id") %></td> <td><%=rs.getString("title") %></td> <td><%=rs.getString("from_email").replaceAll("<","<").replaceAll(">",">") %></td> <td><%=rs.getString("to_email") %></td> </tr><%}if(!"".equals(ids)) { ids = ids.substring(1);}%> <tr> <td colspan="5"> <input type="checkbox" id="checkall" name="checkall" onclick="checkAll()" /> 全选 <input type="button" value="删除" onclick="doDelete()" /> </td> </tr> </table> <script type="text/javascript">var ids = '<%=ids %>';function doDelete() { if(ids=='') { return; } var deleteIds = ""; var idList = ids.split(","); var len = idList.length; for(var i=0; i<len; i++) { if($("checkbox_" + idList[i]).checked) { deleteIds += "," + idList[i]; } } if(deleteIds=="") { alert("请选择要删除的记录!"); return; } deleteIds = deleteIds.substr(1); location.href = "./index.jsp?deleteIds=" + deleteIds;}function doCheck() { if(ids=='') { return; } var deleteIds = ""; var idList = ids.split(","); var len = idList.length; var checkall = $("checkall"); for(var i=0; i<len; i++) { if(!$("checkbox_" + idList[i]).checked) { checkall.checked = false; return; } } checkall.checked = true;}function checkAll() { if(ids=='') { return; } var idList = ids.split(","); var len = idList.length; var checkall = $("checkall"); for(var i=0; i<len; i++) { $("checkbox_" + idList[i]).checked = checkall.checked; }}function $(id) { return document.getElementById(id);}</script></body></html> strutsX就是一个servlet.你的业务多了,可以考虑command模式来做。实现如下业务接受(唯一的一个servlet),业务中转(把action的类名挂在URl后面,通过反射跳用action),业务处理(action) 现在还有公司让jsp里面写java代码的? 这是个06年的web应用,以前用的struts开发的,现在老板还要在这个应用上打补丁,由于是个内部使用的web应用,所以只要能凑合着用就行,这个应用里面的各个jsp已经被改的乱七八糟了。呵呵 非常感谢,我最后正好就是用的您的这个方法。不过,这个页面里面一次选择的最大id数量可以达到500个,每个id都是8到12位的专利申请号码,我怕遇到一次需要删除500个id的时候,这个通过id传参数的办法会不会传不过去,我看晚上有说,好像ie地址栏传送参数最多只能2000多个字节(字符?),不知道最后能不能传过去。 500个,汗!!这确实可能存在url请求长度超出的默认长度情况,解决方法可参考以下几种方式:1、可调整web容器请求数据的最大长度为更大的值;2、可采用15 楼 rexiechuanqi提到的采用post方式处理,将相关的ids数据放入form中的某个字段,采用post方式提交,可支持较大的数据量;3、可将ids数据放入session; 为什么配置的拦截器,不起作用啊!! IFRAME 打开新窗口问题 jstl迭代标签问题 jsp让人都疼的乱码!!!! 规范的重要性大家发表下看法 Google发布Android,Sun将何去何从? js 如何同时获得多个<html:select>标签对象的值? 如何在IE中直接内嵌打开EXCEL文档?? 求救!!!!!! 大家是怎么做论坛的制顶功能的?高手都近来谈谈。 推荐一下java web开发要学的技术 谁开发过淘宝的UMP!
jsp的本质是一个servlet,或者说是标签化的servlet,每一个jsp页面都会被servlet容器生成对应的servlet,然后再开始执行。对于tomcat来说,他会被放在work文件夹路径下相应项目里,形如:
一个,能用servlet做的就可以用jsp做,只不过需要用标签嵌套起来。
另一个,如果你们老板不准你增加servlet的话,你增加Jsp也违背了他的要求。
servlet毕竟处于控制层,将处理你jsp请求的servlet的响应方法中的逻辑拿出来,做一个业务类,里面有一个响应处理的方法,形如:public boolean requestOperate(String flag, ...){},通过标记参数决定做什么业务处理,在servlet中调用业务方法就好。
完全不需要,加一个类根本月主配文件web.xml没有关系,只是需要在servlet中实例化调用罢了。
形如:
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException,IOException {
String flag = ...;
RequestBusiness bus = new RequestBusiness();
boolean result = bus.requestOperate(request, response, flag);
...
}做一个业务类:
public class RequestBusiness{
public boolean requestOperate(HttpServletRequest request,HttpServletResponse response,String flag)
{
if(flag.equals(xxx))
{
//逻辑体
}
else if(flag.equals(xxx))
{
}
...
else//无匹配执行的默认逻辑
{
}
return true;
}
}大致如此了
<form method="post" action="new.jsp">
</form>
写个业务类
直接在jsp里面加小脚本,在小脚本里面搞业务类
<%@ page import="java.sql.*"%>
<%
//驱动类名
String className = "org.gjt.mm.mysql.Driver";
// 数据库URL
String url = "jdbc:mysql://localhost/win";
// 用户名
String userName = "root";
// 密码
String password = "";String listSql = "select * from email_history order by id limit 1,100";
String deleteSql = "delete from email_history where id in (%s)";Class.forName(className);
Connection conn = DriverManager.getConnection(url, userName, password);
Statement stmt = conn.createStatement();String deleteIds = request.getParameter("deleteIds");
if(deleteIds!=null && !"".equals(deleteIds)) {
stmt.execute(String.format(deleteSql, deleteIds));
}
%>
<html>
<head>
<title>会议信息</title>
</head><body>
<table border="1">
<%
ResultSet rs = stmt.executeQuery(listSql);
String ids = "";
while (rs.next()){
ids += "," + rs.getInt("id");
%>
<tr>
<td><input type="checkbox" id='checkbox_<%=rs.getInt("id") %>' name='checkbox_<%=rs.getInt("id") %>' onclick="doCheck()" /></td>
<td><%=rs.getInt("id") %></td>
<td><%=rs.getString("title") %></td>
<td><%=rs.getString("from_email").replaceAll("<","<").replaceAll(">",">") %></td>
<td><%=rs.getString("to_email") %></td>
</tr>
<%
}
if(!"".equals(ids)) {
ids = ids.substring(1);
}
%>
<tr>
<td colspan="5">
<input type="checkbox" id="checkall" name="checkall" onclick="checkAll()" /> 全选
<input type="button" value="删除" onclick="doDelete()" />
</td>
</tr>
</table>
<script type="text/javascript">
var ids = '<%=ids %>';
function doDelete() {
if(ids=='') {
return;
}
var deleteIds = "";
var idList = ids.split(",");
var len = idList.length;
for(var i=0; i<len; i++) {
if($("checkbox_" + idList[i]).checked) {
deleteIds += "," + idList[i];
}
}
if(deleteIds=="") {
alert("请选择要删除的记录!");
return;
}
deleteIds = deleteIds.substr(1);
location.href = "./index.jsp?deleteIds=" + deleteIds;
}
function doCheck() {
if(ids=='') {
return;
}
var deleteIds = "";
var idList = ids.split(",");
var len = idList.length;
var checkall = $("checkall");
for(var i=0; i<len; i++) {
if(!$("checkbox_" + idList[i]).checked) {
checkall.checked = false;
return;
}
}
checkall.checked = true;
}
function checkAll() {
if(ids=='') {
return;
} var idList = ids.split(",");
var len = idList.length;
var checkall = $("checkall");
for(var i=0; i<len; i++) {
$("checkbox_" + idList[i]).checked = checkall.checked;
}
}
function $(id) {
return document.getElementById(id);
}
</script>
</body>
</html>
你的业务多了,可以考虑command模式来做。实现如下
业务接受(唯一的一个servlet),业务中转(把action的类名挂在URl后面,通过反射跳用action),业务处理(action)
500个,汗!!
这确实可能存在url请求长度超出的默认长度情况,解决方法可参考以下几种方式:
1、可调整web容器请求数据的最大长度为更大的值;
2、可采用15 楼 rexiechuanqi提到的采用post方式处理,将相关的ids数据放入form中的某个字段,采用post方式提交,可支持较大的数据量;
3、可将ids数据放入session;