我的工程名是StuInfo,在页面中需要换页和编辑、新建、删除,在第一页时可以正常工作,可是换页之后就会出现404错误,
主页面AllUser.jsp:
function edit(vid){
window.location.href="Euse.jsp?eid="+vid; }

function del(did){
var b =confirm("确认要删除吗?");
if(b){
window.location.href="../servlet/UserServlet?opflag=del&did="+did;
}else{
alert("删除操作取消!");
}
}
</script>
  </head>
  
  <body>
    <%
  
   UserDAO userdao = new UserDAO(); 
   PageHelp pagehelp=null;
   List list = null;
   pagehelp=(PageHelp)request.getAttribute("pagehelp");
    if(pagehelp==null){
     //System.out.println("起始页");
        int currentPage=1;
        pagehelp =userdao.queryUser(" ",currentPage);
     }
list=pagehelp.getObjectlist();
 
  %>
   <form name="search" method="post" action="./servlet/UserServlet" target="_self"  onSubmit="return docheck()">
<input type="hidden" name="opflag" value="search">
<table   align="center"  > 
     <tr>
       <td height="40" colspan="29" align="center"> <font size="5" face="华文楷体"><strong>用户信息</strong></font></td>
     </tr>
     <tr>
     <td height="10" colspan="3"><div align="center"></div></td>
   </tr>
   <tr>
<td align="right">ID:<input type="text" style="width:90px;height:20px;" name="uID" ></td>
<td align="right">角色:
<select name="urole">
       <option value="">请选择</option>
       <option value="0">学生</option>
       <option value="1">教师</option>
       <option value="2">管理员</option>
      </select>

<td><input type="submit"  value="查询"></td>
</tr>
<tr>
     <td height="5" colspan="3"><div align="center"></div></td>
   </tr>
     </table>
     </form> 
   
   <form name="AllUser" action="AllUser.jsp">
     <table   align="center"   border="1"> 
     <tr>
     <td width="80" ><div align="center"><font size="2" face="宋体"><strong>ID</strong></font></div></td>
     <td width="80" ><div align="center"><font size="2" face="宋体"><strong>姓名</strong></font></div></td>
     
     <td width="80" ><div align="center"><font size="2" face="宋体"><strong>密码</strong></font></div></td>
     <td width="40" ><div align="center"><font size="2" face="宋体"><strong>角色</strong></font></div></td>
     <td></td>
     <td><input name="tnew" type="button" onClick=" window.location.href='NewUser.jsp'" value="新建"></td>
     </tr>
     <%
          
           Iterator it =list.iterator();
while(it.hasNext()){
 UserVO uservo=(UserVO)it.next();
       
      %>
         
      
      <tr >
      <td width="80" ><div align="center"><%=uservo.getUserID() %></div></td>
      <%//String vsid=stuinfvo.getStuID();
      //System.out.println(stuinfvo.getStuID());%>
       <td width="80" ><div align="center"><%=uservo.getUserName() %></div></td>
       
      <td width="80" ><div align="center"><%=uservo.getPassWord() %></div></td>
      <td width="40" ><div align="center" >
      <% int role=0;
        role=uservo.getUserRole();
        if(role==0){%>学生
        
        <%}
        else if(role==1){%>教师<%
     }else{%>
       管理员
      <%}%></div></td>
     
      
      
       <td><input name="tedit" type="button" onClick="edit('<%=uservo.getUserID() %>')" value="编辑"></td>
    <td><input name="delete" type="button" value="删除" onClick="del('<%=uservo.getUserID() %>')"></td>
      </tr>
      
      
      <%} %>
     
 
     </table>此时第一页正常,换页之后新建和编辑出现404,应为换页操作跳到了servlet里面,错误:
The requested resource (/StuInfo/servlet/NewUser.jsp) is not available.
这个我理解了,
然后我把
function edit(vid){
window.location.href="Euse.jsp?eid="+vid;
}
改成了:
function edit(vid){
window.location.href="/WebRoot/User/Euse.jsp?eid="+vid;
}
在第一页点编辑的时候,也出现404错:
The requested resource (/WebRoot/User/Euse.jsp) is not available.这个我不懂Euse.jsp的确是在User下啊,最后我又改成:
function edit(vid){
window.location.href="../WebRoot/User/Euse.jsp?eid="+vid;
}
同样是404错:
The requested resource (/StuInfo/WebRoot/User/Euse.jsp) is not available.servlet里换页操作如下:
if("changePage".equals(opflag)){
String sqlCondition =" ";
sqlCondition=request.getParameter("condi");
String currentpage=request.getParameter("currentPage");
//System.out.println(currentpage);
int  intcurrentpage=Integer.parseInt(currentpage);
UserDAO userdao = new UserDAO(); 
PageHelp pagehelp=new PageHelp();
//System.out.println(intcurrentpage+sqlCondition+intcurrentpage);
try {
pagehelp=userdao.queryUser(sqlCondition,intcurrentpage);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
request.setAttribute("pagehelp",pagehelp);
//response.sendRedirect("../Contact/AllContact.jsp");
request.getRequestDispatcher("../User/AllUser.jsp").forward(request,response);

}难道我只能把点击编辑之后的响应传到servlet里去,然后再传到EUser.jsp里吗?
后面两个404错是为什么呢?看起来的确是存在的啊?

解决方案 »

  1.   

    估计是LZ没有理解URI和站点物理文件路径之间的关系问题。
    不妨在JSP中用application.getRealPath("/StuInfo/WebRoot/User/Euse.jsp")看看文件的物理路径应该在哪里就知道了什么问题了。
      

  2.   

    404 错误,不用找了,肯定是你的请求路径url不存在,或者是非法的,楼主web开发的话需要了解一下错误的类型,楼主可以先打印一下路径,再来比较一下
      

  3.   

    认为就是这样的,我也出现过这种问题。
    后来所有的路径都是用:绝对路径:${pageContext.request.contextPath }又或者相对路径:../User/AllUser.jsp注:统一成一个样式来写。
      

  4.   

    我在AllUser.jsp里写了:application.getRealPath("/StuInfo/WebRoot/User/Euse.jsp")
    得到的物理路径是:
    D:\Program Files\Tomcat 6.0\webapps\StuInfo\StuInfo\WebRoot\User\Euse.jsp
    换页操作的servlet里写的是:
    request.getRequestDispatcher("../User/AllUser.jsp").forward(request,response);那我在
    <script type="text/javascript">
    function edit(vid){
    window.location.href="./Euse.jsp?eid="+vid;
    }
    </script>究竟应该怎么写呢?
    关于路径方面的问题的确不太懂哎,根据网上的方法试了几次都不行哎
      

  5.   

    是直接把${pageContext.request.contextPath }放到Euse.jsp的前面吗?还是换成物理路径啊,物理路径又该取哪一段呢,试了几次都没试对哎
      

  6.   

    try:[code=jscript]
    window.location.href="~/Euse.jsp?eid="+vid;
    [code]
      

  7.   


    您所指的是怎么写呢?我想下面这样加是错误的:
    <td><input name="tedit" type="button" onClick="
          <% try:
           {
            [code=jscript]
            window.location.href="~/Euse.jsp?eid="+vid;
            [code]
            }%>" value="编辑"></td>我本来是在onclick调用script里的edit函数,能不能直接把edit里的函数改一下呢
      

  8.   

    你的这个配置路径是要匹配struts-config中的路径的,你这么陪它肯定找不到