Java 通过使用链接增加计数器
我的servlet代码是:Java 通过使用链接增加计数器,java,jsp,servlets,Java,Jsp,Servlets,我的servlet代码是: <form action="<%=application.getContextPath()%>/Controller" method="get" id="Form"> <input type="hidden" value="" name="prev" id="prev"></input> <a class="button_prev" href="javascript:prev('<%=(i-1)%>')
<form action="<%=application.getContextPath()%>/Controller" method="get" id="Form">
<input type="hidden" value="" name="prev" id="prev"></input>
<a class="button_prev" href="javascript:prev('<%=(i-1)%>')">prev</a>
</form>
function prev(i)
{
if(i==-1)
i=0;
document.getElementById("prev").value=i;
request.setAttribute("count",i);
document.getElementById("Form").submit();
}
请您仔细检查一下,告诉我哪里出了问题,或者您能告诉我一个更好的实现方法吗
我的错误是:控制器请求未定义
我的web xml文件是
Integer num=(Integer)request.getAttribute("chapter");
if(num==1)
request.getRequestDispatcher("/jsp/Page2.jsp").forward(request, response);
else if(num==2)
request.getRequestDispatcher("/jsp/Page3.jsp").forward(request, response);
else if(num==3)
request.getRequestDispatcher("/jsp/Page4.jsp").forward(request, response);
网站
控制器
控制器
com.tcs.website.Controller
控制器
/控制器
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
看起来您混淆了服务器端和客户端代码。诸如
之类的表达式是在服务器上计算的,其中的变量i将与javascript上的变量i不同
您需要查看您的业务需求,柜台应存放在哪里?在服务器/客户端?表单值作为请求参数传递给servlet。 您只需获取request.getParameter(“prev”)中的值;
您正在分配值request.setAttribute(i);这不是必需的。试试这个
Javascript代码
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Website</display-name>
<servlet>
<description>
</description>
<display-name>Controller</display-name>
<servlet-name>Controller</servlet-name>
<servlet-class>
com.tcs.website.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>/Controller</url-pattern>
</servlet-mapping>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
</web-app>
Servlet代码
`function prev(){`
`var i = parseInt(document.getElementById("prev").value)-1;
if(i==-1)i=0;
document.getElementById("prev").value=i;
document.getElementById("Form").submit();
}`
1) 你为什么叫我“数组计数器”
2) servlet代码检索“chapter”属性,但在html或javascript中没有提到“chapter”
3) 您的javascript代码:
Integer num=Integer.valuesOf(request.getParameter("prev"));
if(num==1)
request.getRequestDispatcher("/jsp/Page2.jsp").forward(request, response);
else if(num==2)
…在浏览器中执行。在浏览器中执行的代码不知道服务器上存在哪些变量和方法。同样,在服务器上执行的servlet不知道在浏览器中执行的某些javascript代码中存在哪些变量和方法。那么在javascript代码中,变量请求指的是什么
4) 下面是一个您可以尝试的完整示例。您有很多移动部件,每个组件的路径由不同的规则控制
要输入浏览器的url:
function prev(i)
{
if(i==-1)
i=0;
document.getElementById("prev").value=i;
request.setAttribute("count",i);
document.getElementById("Form").submit();
}
(我已将Tomcat配置为在端口8181上侦听)
Tomcat中的目录结构:
http://localhost:8181/myapp2/Go/fish/in/a/lake
web.xml-------------------------------------------
webapps/myapp2/
js/
jquery-1.9.1.js
jquery-ui-1.10.2.js
myjs.js
jsp/
Initial.jsp
Page2.jsp
Page3.jsp
WEB-INF/
web.xml
classes/
com/
tcs/
website/
Controller.class
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>MySuperAwesomeController</servlet-name>
<servlet-class>com.tcs.website.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MySuperAwesomeController</servlet-name>
<url-pattern>/Go/fish/in/a/lake</url-pattern>
</servlet-mapping>
</web-app>
<!DOCTYPE html>
<html>
<head>
<title>Initial.jsp</title>
<script type='text/javascript' src='/myapp2/js/jquery-1.9.1.js'></script>
<script type='text/javascript' src='/myapp2/js/jquery-ui-1.10.2.js'></script>
<script type='text/javascript' src='/myapp2/js/myjs.js'></script>
</head>
<body>
<div id="chapter_div">5</div>
<a class="button_prev"
href="<%= application.getContextPath() %>/Go/fish/in/a/lake">prev</a>
</body>
</html>
Initial.jsp--------------
package com.tcs.website;
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class Controller extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse resp)
throws IOException,
ServletException {
String chapter = req.getParameter("chapter");
String jsp_path = null;
if (chapter == null) {
jsp_path = "/jsp/Initial.jsp";
}
else {
int chapter_num = 0;
try {
chapter_num = Integer.parseInt(req.getParameter("chapter"));
if ( (chapter_num == 3) || (chapter_num == 4) ) {
jsp_path = "/jsp/Page" +
Integer.toString(--chapter_num) +
".jsp";
}
}
catch (NumberFormatException e) {
System.out.println("Bad chapter number");
}
}
System.out.println("*********jsp_path=" + jsp_path); #goes to logs/catalina.out
req.getRequestDispatcher(jsp_path).forward(req, resp);
}
}
Initial.jsp
5.
页面2.jsp------------------------
webapps/myapp2/
js/
jquery-1.9.1.js
jquery-ui-1.10.2.js
myjs.js
jsp/
Initial.jsp
Page2.jsp
Page3.jsp
WEB-INF/
web.xml
classes/
com/
tcs/
website/
Controller.class
<?xml version="1.0" encoding="UTF-8"?>
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<servlet>
<servlet-name>MySuperAwesomeController</servlet-name>
<servlet-class>com.tcs.website.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>MySuperAwesomeController</servlet-name>
<url-pattern>/Go/fish/in/a/lake</url-pattern>
</servlet-mapping>
</web-app>
<!DOCTYPE html>
<html>
<head>
<title>Initial.jsp</title>
<script type='text/javascript' src='/myapp2/js/jquery-1.9.1.js'></script>
<script type='text/javascript' src='/myapp2/js/jquery-ui-1.10.2.js'></script>
<script type='text/javascript' src='/myapp2/js/myjs.js'></script>
</head>
<body>
<div id="chapter_div">5</div>
<a class="button_prev"
href="<%= application.getContextPath() %>/Go/fish/in/a/lake">prev</a>
</body>
</html>
页面2.jsp
第3.jsp页--------------------
<!DOCTYPE html>
<html>
<head>
<title>Page2.jsp</title>
<script type='text/javascript' src='/myapp2/js/jquery-1.9.1.js'></script>
<script type='text/javascript' src='/myapp2/js/jquery-ui-1.10.2.js'></script>
<script type='text/javascript' src='/myapp2/js/myjs.js'></script>
</head>
<body>
<div id="chapter_div"><%= request.getParameter("chapter") %></div>
<a class="button_prev"
href="<%= application.getContextPath() %>/Go/fish/in/a/lake">prev</a>
</body>
</html>
页面3.jsp
问题似乎出在Servlet URL映射定义中。你能发布整个Servlet代码吗?这是我的整个doGet方法。我在doPost方法中所做的一切。您想看到吗?对不起,我要求的是servlet配置,这意味着,它的名称和url映射在web.xml文件上,或者使用@WebServlet
进行配置(取决于您是如何开发的)。是吗??我对这方面还不太熟悉,所以不确定这是否是你想要的。。对不起,是的,就是这样。现在,请在运行页面时发布生成的HTML代码。在FireFox或Chrome等浏览器中打开页面并按Ctrl+U时,您可以看到它。这不是问题所在。请参阅问题的底线:我的错误是:控制器请求未定义。计数器应存储在服务器中side@user2411994,我发布了一个完整的servlet示例供您查看。
<!DOCTYPE html>
<html>
<head>
<title>Page3.jsp</title>
<script type='text/javascript' src='/myapp2/js/jquery-1.9.1.js'></script>
<script type='text/javascript' src='/myapp2/js/jquery-ui-1.10.2.js'></script>
<script type='text/javascript' src='/myapp2/js/myjs.js'></script>
</head>
<body>
<div id="chapter_div"><%= request.getParameter("chapter") %></div>
<a class="button_prev"
href="<%= application.getContextPath() %>/Go/fish/in/a/lake">prev</a>
</body>
</html>