我在登录页面(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>
运行时错误:
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>
但是用login.jsp登录到welcome.jsp都没什么问题哦login.jsp在WEB-INF外,welcome.jsp在WEB-INF内
对哦。。难道说编编就<a href>不能跳转过去吗??其他的都可以?
href里面应该写xxx.action,随后在配置文件里写/WEB-INF/NewFile34.jsp
jsp可以放在它的上一曾里。
extends="admin">
<action name="historylist" class="com.mn.action.HistoryAction"
method="list">
<result>aa.jsp</result>
</action>
</package>这个样子,根据你的项目路径+mnb/historyhistorylist.action 根据action跳转过去,不过一直没有在web-info下放过东西!!!
<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>注意路径
这位楼主说的对,你根本就没有通过struts跳转,你这就好像是一个http请求,如果要用struts的跳转,你要在struts.xml 中配置你的NewFile34.jsp的路径
然后在前台通过xxx.action进入到action中,action中的方法的返回值跟你在struts.xml中的NewFile34.jsp这个的result值相同。像你这样直接通过get请求似乎是不能直接请求到web-Info下的文件的,这也是为什么很多网站的后台都习惯放在这个下面的原因。本来我们都可以把文件放在web-info外,但是有时候我们却要这样做。就是为了安全了