抛出此方法
java.lang.IllegalStateException:在提交响应后无法转发
我无法发现问题.有帮助吗?
int noOfRows = Integer.parseInt(request.getParameter("noOfRows"));
String chkboxVal = "";
// String FormatId=null;
Vector vRow = new Vector();
Vector vRow1 = new Vector();
String GroupId = "";
String GroupDesc = "";
for (int i = 0; i < noOfRows; i++) {
if ((request.getParameter("chk_select" + i)) == null) {
chkboxVal = "notticked";
} else {
chkboxVal = request.getParameter("chk_select" + i);
if (chkboxVal.equals("ticked")) {
fwdurl = "true";
Statement st1 = con.createStatement();
GroupId = request.getParameter("GroupId" + i);
GroupDesc = request.getParameter("GroupDesc" + i); …Run Code Online (Sandbox Code Playgroud) servlets response forward illegalstateexception requestdispatcher
我是jsp和servlet的新手.我的方案如下
我有一个jsp页面,里面有一个表单.有两个字段.jsp页面的代码snipet如下.
MyFirstJSP.jsp文件
<body>
<h1> This is my first jsp and servlet project</h1>
<%
//System.out.println(request.getAttribute("fname"));
if(request.getAttribute("fname")!=null){
System.out.println(request.getAttribute("fname"));
}else{
System.out.println("No request ");
}
%>
<form action="MyFirstServlet" method="get">
First Name<input type="text" name="fname" value= ${fname}><br>
Last Name<input type="text" name="lname" value= ${lname}>
<input type="submit" value="Send">
</form>
</body>
Run Code Online (Sandbox Code Playgroud)
当我提交此表单时,会调用MyFirstServlet来检查用户输入的名字.如果第一个名称等于"abc",则servlet将该属性设置为请求对象,并将其重定向到调用jsp页面,即上面的页面.这将从请求对象获取值并将其填入表单的相应字段.我也有Java表达式语言,效果相同.
这是我的MyFirstServlet.java servlet文件的代码snipet
/**
* Servlet implementation class MyFirstServlet
*/
public class MyFirstServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public MyFirstServlet() {
super();
// TODO Auto-generated constructor stub …Run Code Online (Sandbox Code Playgroud) 我在学习RequestDispatcher时正在编写一些基本代码.我知道当调用rd.forward()时,控制(和响应处理)将被转发到路径中指定的资源 - 在本例中是另一个servlet.但是为什么由于代码中前面的out.write()语句,这段代码不会抛出IllegalStateException(不是我想要的)?
我想我真正要问的是,这些out.write()语句将如何或何时提交?
谢谢,杰夫
public class Dispatcher extends HttpServlet{
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException{
response.setContentType("text/plain");
PrintWriter out = response.getWriter();
out.write("In Dispatcher\n");
String modeParam = request.getParameter("mode");
String path = "/Receiver/pathInfo?fruit=orange";
RequestDispatcher rd = request.getRequestDispatcher(path);
if(rd == null){
out.write("Request Dispatcher is null. Please check path.");
}
if(modeParam.equals("forward")){
out.write("forwarding...\n");
rd.forward(request, response);
}
else if(modeParam.equals("include")){
out.write("including...\n");
rd.include(request, response);
}
out.flush();
out.close();
}
Run Code Online (Sandbox Code Playgroud)
}
我试图使用RequestDispatcher将数据从一个servlet传递到另一个servlet.这是Dispatcher的代码.
String address;
address = "/Java Resources/src/coreservlets/MapOut.java";
RequestDispatcher dispatcher =
request.getRequestDispatcher(address);
dispatcher.forward(request, response);
Run Code Online (Sandbox Code Playgroud)
当我尝试运行它时,它给出了一个错误,说路径不可用.我是否必须包含一些东西供调度员发送到另一个servlet?
在一个简单的Java Web应用程序中,例如,假设您有一个servlet TestServlet.java.在部署描述(web.xml)中,您可以将请求映射/testpage 到TestServlet,以便在/testapplication/testpage请求时TestServlet处理请求.例如,您可以编写"Hello World"并发送响应.
在目录结构(部署到Web服务器的应用程序)中,TestServlet.java将驻留在:
webapps\testapplication\WEB-INF\classes\com\packagename\TestClass.java
Run Code Online (Sandbox Code Playgroud)
这意味着无法使用浏览器访问此文件.(比如输入网址)
您还可以获取请求调度程序并将请求和响应对象转发到JSP文件,如.getRequestDispatcher("/test.jsp").但那时文件就会出现
webapps\testapplication\test.jsp
Run Code Online (Sandbox Code Playgroud)
所以连接到http:\\ server.com\test.jsp也会得到这个文件.
我想在WEB-INF文件夹中隐藏文件,因此除了我提供的映射之外,客户端无法访问它.
这样做的适当方法是什么?
这是我的prog1:
public class DispatcherSample extends HttpServlet
{
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
PrintWriter out=response.getWriter();
out.println("we are in first servlet.");
request.setAttribute("name","sanjay");
RequestDispatcher rd=request.getRequestDispatcher("/ss");
rd.forward(request,response);
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的prog2:
public class SecondServlet extends HttpServlet
{
public void service(HttpServletRequest request,HttpServletResponse response)throws IOException,ServletException
{
PrintWriter out=response.getWriter();
out.println("we are in second servlet.");
request.setAttribute("surname","korlepara");
//RequestDispatcher rd=request.getRequestDispatcher("/ts");
//rd.forward(request,response);
out.println(request.getAttribute("name"));
out.println(request.getAttribute("surname"));
}
}
Run Code Online (Sandbox Code Playgroud)
OUTPUT是:我们在第二个servlet中.null korlepara
问题是:无法检索属性名称
我经历了很多论坛和博客以获得答案,但无法得到任何有用的提示或建议.所以,如果有人可以在下面的问题上提供帮助,那将是一个很大的帮助.
尝试连接时,我收到以下警告和错误http://localhost:8080/SpringApp/hello:
INFO: Server startup in 6935 ms
Jul 19, 2014 11:15:42 AM org.springframework.web.servlet.PageNotFound noHandlerFound
WARNING: No mapping found for HTTP request with URI [/SpringApp/] in DispatcherServlet with name 'HelloWeb'
Jul 19, 2014 11:16:29 AM com.example.java.HelloController printHelloWorld
INFO: HelloController : printHelloWorld : ENTER
Jul 19, 2014 11:16:29 AM com.example.java.HelloController printHelloWorld
INFO: HelloController : printHelloWorld : EXIT
Jul 19, 2014 11:16:29 AM org.springframework.web.servlet.PageNotFound noHandlerFound
WARNING: No mapping found for HTTP request with URI [/SpringApp/WEB-INF/jsp/hello.jsp] in DispatcherServlet with name 'HelloWeb' …Run Code Online (Sandbox Code Playgroud) 这两行代码有什么不同,我们应该什么时候使用它们?
1.
RequestDispatcher view = request.getRequestDispatcher(“result.jsp”);
Run Code Online (Sandbox Code Playgroud)
2.
RequestDispatcher view = getServletContext().getRequestDispatcher(“/result.jsp”);
Run Code Online (Sandbox Code Playgroud) 我有一个http://www.mywebapp.com/sample.html从远程服务器使用的HTML页面.我在同一HTML表单中将HTML URL作为隐藏表单传递给
<form action="/myservlet?userid=12345" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="Submit">
<input type="hidden" name="url" value="http://www.mywebapp.com/sample.html"/>
</form>
Run Code Online (Sandbox Code Playgroud)
在我的servlet中,我得到了隐藏的URL http://www.mywebapp.com/sample.html并将其存储为
String fieldValue = http://www.mywebapp.com/sample.html
现在,当我尝试RequestDispatcher将页面转发到这样的隐藏URL时,
RequestDispatcher rd = req.getRequestDispatcher(fieldValue);
rd.forward(req, resp);
Run Code Online (Sandbox Code Playgroud)
我明白了ERROR 404.
任何人都可以建议我解决这个问题.
EDITED
我真正想做的是,从远程服务器,HTML页面将请求我的REST Web服务.Web服务的响应将以JSON输出.现在我想将此JSON响应发送到请求的HTML表单(即到远程服务器HTML页面)
任何人都可以提出解决这个问题的想法.我们将不胜感激.
我在这里遇到一个奇怪的问题,我真的被困住了,需要把这项工作搞得很糟糕.
所以我有一个页面说index.jsp,链接说"a href = servlet?id = 10".当我点击这个链接时,它将转到我的servlet上的doGet(),这是我的servlet中的代码.
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String action = request.getParameter("id");
// search database and create an arraylist
if(//user logged in)
address = "s/results.jsp";
else
address = "results.jsp";
// set arraylist in session object
RequestDispatcher dispatcher = request.getRequestDispatcher(address);
dispatcher.forward(request,response);
}
Run Code Online (Sandbox Code Playgroud)
所以上面的代码工作正常,但在请求转发后,我的浏览器显示网址为
http:// localhost/project/servlet?id = 10.
我不想要上面的网址,因为我根据用户登录状态转发到两个不同的jsp,一个位于's'文件夹中,而另一个位于该文件夹之外.如果用户已登录,则我转发到's/results.jsp',如果用户未登录,我将转发到'results.jsp'.
在s/results.jsp的情况下,我通过在results.jsp中使用../来访问's'文件夹外部的图像和脚本等资源.
由于url没有更改为s/results.jsp,我无法使用'../'访问资源,因为我正在使用jsp分页,当我点击下一步时,url正在更改为s/results.jsp并且我可以使用../访问资源
我认为一个解决方案是复制s文件夹中的所有资源,但这会增加冗余.
在我的脑海中另一个解决方案是为两个jsp创建两个不同的servlet但我不知道在哪里放置servlet以便它可以使用../访问s文件夹之外的资源
是他们能做任务的其他好方法..
我试图找到有关这方面的信息,但一直无法弄清楚.
任何帮助将非常感谢.
servlets ×9
java ×4
jsp ×3
commit ×1
forward ×1
response ×1
rest ×1
spring-mvc ×1
web-inf ×1
web-services ×1