我在登录页面(login.jsp)登录后显示(welcome.jsp)页面一切正常,但在welcome.jsp页面中的<a href="/WEB-INF/NewFile34.jsp>查看所有书籍</a>点击后却提示404的错误信息(找不到NewFile34.jsp)。之前我想用Vector储存所有的信息然后想要通过<s:iterator>打印出来,但不成功,我便改回书上那样,但无论怎么改都显示404,为什么这么奇怪呢?我重启过电脑亦是如此麻烦高手帮一下忙。。
运行时错误:
HTTP Status 404 - /WEB-INF/NewFile34.jsp--------------------------------------------------------------------------------type Status reportmessage /WEB-INF/NewFile34.jspdescription The requested resource (/WEB-INF/NewFile34.jsp) is not available.(我的NewFile34.jsp放在WEB-INF中的,welcome.jsp也是放在WEB-INF中,只有login.jsp放在WEB-INF外的,这是没有问题的,我之前编其他事例都正常的)welcome.jsp:
<%@ taglib prefix="s" uri="/struts-tags" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title><s:text name="WelcomePage"/></title>
</head>
<body>
欢迎再次光临,${sessionScope.userName }!<br />
您的当时访问时间为:<%=new java.util.Date().toLocaleString() %>

<br /><br />

<a href="/WEB-INF/NewFile34.jsp">查看所有书籍</a>
</body>
</html>GetBooksAction:
package com.struts2;import com.opensymphony.xwork2.Action;
import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ModelDriven;public class GetBooksAction implements Action, ModelDriven<BooksList> {
private BooksList bl = new BooksList();

@Override
public BooksList getModel() {
if(bl == null) bl = new BooksList();
return bl;
}

@Override
public String execute() throws Exception {
// TODO Auto-generated method stub
String userName = ActionContext.getContext().getSession().get("userName").toString();
if(userName != null  &&  userName.equals("QQAA2233")) {
bl.setBooks(bl.getAllBooks());

return SUCCESS;
}
else
return LOGIN;
}
}
BooksList.java:
package com.struts2;public class BooksList {
String[] books = {
"大便书", "给女孩的第一本理财书", "与神对话:一生等待的书",
"假装的艺术:一本让你看起来无所不知的书", "别笑我是英文单词书2"
};

public String[] getAllBooks() { return books; }

public void setBooks(String[] books) { this.books = books; }
public String[] getBooks() { return this.books; }
}
struts.xml:
<package name="GetBooks" extends="struts-default">
<action name="GetBooks" class="com.struts2.GetBooksAction">
<result>/WEB-INF/NewFile34.jsp</result>
<result name="login">/login.jsp</result>
</action>
</package>

解决方案 »

  1.   

    jsp文件不要放在WEB-INF下面 直接放到WebRoot或者WebContent下
      

  2.   


    但是用login.jsp登录到welcome.jsp都没什么问题哦login.jsp在WEB-INF外,welcome.jsp在WEB-INF内
      

  3.   

    web-inf是不能直接访问.但是struts可以跳转过去
      

  4.   


    对哦。。难道说编编就<a href>不能跳转过去吗??其他的都可以?
      

  5.   

    我看网络教程说不想公开的JSP文件就放在WEB-INF中这句话正确吗
      

  6.   

    有些网站为了安全,就把jsp放在web-inf下。。当然就连A标签都是通过struts跳转的
      

  7.   

    因为这个根本没用struts跳转。
    href里面应该写xxx.action,随后在配置文件里写/WEB-INF/NewFile34.jsp
      

  8.   

    WEB-INF里放你的dao和service配置等。
    jsp可以放在它的上一曾里。
      

  9.   

    配置一个action地址,指向/WEB-INF/NewFile34.jsp..然后通过访问action
      

  10.   

    同意!一般想链接到web-inf下面的文件是不行的。百度一下web-inf就知道了,出于安全性考虑。可以通过配置action,通过你的逻辑判断跳转到相应的页面是可以的!
      

  11.   

    通过struts2的action来访问web-inf下的jsp
      

  12.   

    <package name="/mnb/history" namespace="/mnb/history"
    extends="admin">
    <action name="historylist" class="com.mn.action.HistoryAction"
    method="list">
    <result>aa.jsp</result>
    </action>
    </package>这个样子,根据你的项目路径+mnb/historyhistorylist.action    根据action跳转过去,不过一直没有在web-info下放过东西!!!
      

  13.   

    jsp页面中这样写:
    <p><a href="getBooksAction.action" target="_blank">查看所有书籍</a></p>strut2.xml中这样写:
    <action name="getBooksAction" class="...........GetBooksAction" method="execute">
    <result name="listbooks">/NewFile34.jsp</result>
    </action>注意路径
      

  14.   

    web_inf下边的jsp文件必须有请求才能访问!你从logn.jsp跳转到wel.jsp是经过控制器请求而来,超链接直接访问不可以,必须有请求才能访问
      

  15.   


    这位楼主说的对,你根本就没有通过struts跳转,你这就好像是一个http请求,如果要用struts的跳转,你要在struts.xml 中配置你的NewFile34.jsp的路径
    然后在前台通过xxx.action进入到action中,action中的方法的返回值跟你在struts.xml中的NewFile34.jsp这个的result值相同。像你这样直接通过get请求似乎是不能直接请求到web-Info下的文件的,这也是为什么很多网站的后台都习惯放在这个下面的原因。本来我们都可以把文件放在web-info外,但是有时候我们却要这样做。就是为了安全了
      

  16.   

    +1  在strurs配置文件里加个action 转发那个action吧
      

  17.   

    没有在web_root目录下的  都是要用action访问的  不能用jsp直接访问   建议直接把链接写成<a href="xx.action"></a>这样 应该就OK了  
      

  18.   

    WEB-INF 下面的东西不能直接访问的,你只能通过程序跳转过去。
      

  19.   

    为什么非得放在web-info下呢  你要区分不能再建一个文件夹吗?
      

  20.   

    怎么可以吧自己写的jsp放到web_inf,你可真是高手,你放别的地方不可以吗,你先了解下每个包代表什么意思吧
      

  21.   

    不能这样的,必须经过跳转,或者放在webroot下面
      

  22.   

    要么放到webroot下面 要么将请求转发到web-info的jsp文件