本帖最后由 dawnspace 于 2013-03-05 21:27:57 编辑

解决方案 »

  1.   

    xml只是灵活配置的需要,可以舍弃灵活的话就不是必须的js是客户端代码,中间是跨网的,js发送请求给另外一个jsp页面(页面中包含数据库删除逻辑)倒是可以试试,或者通过ajax方式一样的
      

  2.   

    是不是通过js跳转到到其他JSP,中间传几个参数过去。然后对数据库的操作放在另一个JSP里面来处理?
      

  3.   

    直接用ajax 做    调用后台方法连接jdbc 进行数据库操作就可以了
      

  4.   

    这是可以的,不过有一些事情需要搞清楚:
    jsp的本质是一个servlet,或者说是标签化的servlet,每一个jsp页面都会被servlet容器生成对应的servlet,然后再开始执行。对于tomcat来说,他会被放在work文件夹路径下相应项目里,形如:
      

  5.   

    这说明了两个问题:
    一个,能用servlet做的就可以用jsp做,只不过需要用标签嵌套起来。
    另一个,如果你们老板不准你增加servlet的话,你增加Jsp也违背了他的要求。
      

  6.   

    其实,这种被勾选了就执行其他逻辑这一类的需求,不需要增加新的servlet。
    servlet毕竟处于控制层,将处理你jsp请求的servlet的响应方法中的逻辑拿出来,做一个业务类,里面有一个响应处理的方法,形如:public boolean requestOperate(String flag, ...){},通过标记参数决定做什么业务处理,在servlet中调用业务方法就好。
      

  7.   

    这么做是不是要加入到web.xml里面去?
      

  8.   

    我老板的意思是:可以加类,也可以新建servlet,唯一不许的就是修改配置xml文件。
      

  9.   


    完全不需要,加一个类根本月主配文件web.xml没有关系,只是需要在servlet中实例化调用罢了。
      

  10.   

    通常是要加一个类或者一个java文件
      

  11.   


    形如:
    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;
        }
    }大致如此了
      

  12.   

    这位老师的这个方法,好像还是基于修改本jsp的提交doPost方法吧。可是我的这个jsp文件本身就没有提交功能。一开始就只是用来显示的。这个jsp自己就没有对应的处理提交的servlet。要写一个新的,还是要自己修改web.xml
      

  13.   

    我现在采用javascript的location.herf()跳转到一个新的jsp文件里面。然后用new.jsp?XXX=xxxx 传参数,在new.jsp里面 执行 处理业务的类。  但我觉得这样不是很安全,传的参数都在IE地址栏里面看到了。而且参数量的大小还要控制。
      

  14.   

    你的改动和xml一毛钱关系都没有啊。
      

  15.   

    那就用form:
    <form method="post" action="new.jsp">
    </form>
      

  16.   


    写个业务类
    直接在jsp里面加小脚本,在小脚本里面搞业务类
      

  17.   

    写了个例子,在同一个JSP页面处理删除操作,主要是将要删除的记录id作为当前jsp页面的参数传入,若参数不为空则获取deleteIds参数信息执行删除操作,希望能帮到你~~index.jsp文件如下:<%@ page contentType="text/html; charset=UTF-8"%>
    <%@ 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("<","&lt;").replaceAll(">","&gt;") %></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>
      

  18.   

    strutsX就是一个servlet.
    你的业务多了,可以考虑command模式来做。实现如下
    业务接受(唯一的一个servlet),业务中转(把action的类名挂在URl后面,通过反射跳用action),业务处理(action)
      

  19.   

    现在还有公司让jsp里面写java代码的?
      

  20.   

    这是个06年的web应用,以前用的struts开发的,现在老板还要在这个应用上打补丁,由于是个内部使用的web应用,所以只要能凑合着用就行,这个应用里面的各个jsp已经被改的乱七八糟了。呵呵
      

  21.   

    非常感谢,我最后正好就是用的您的这个方法。不过,这个页面里面一次选择的最大id数量可以达到500个,每个id都是8到12位的专利申请号码,我怕遇到一次需要删除500个id的时候,这个通过id传参数的办法会不会传不过去,我看晚上有说,好像ie地址栏传送参数最多只能2000多个字节(字符?),不知道最后能不能传过去。
      

  22.   


    500个,汗!!
    这确实可能存在url请求长度超出的默认长度情况,解决方法可参考以下几种方式:
    1、可调整web容器请求数据的最大长度为更大的值;
    2、可采用15 楼 rexiechuanqi提到的采用post方式处理,将相关的ids数据放入form中的某个字段,采用post方式提交,可支持较大的数据量;
    3、可将ids数据放入session;