how2j.cn

相关下载
文件名 文件大小
j2ee.rar 1m
使用站长秘制下载工具
步骤 1 : 先运行,看到效果,再学习   
步骤 2 : 模仿和排错   
步骤 3 : 效果   
步骤 4 : 资源   
步骤 5 : GetManyServlet   
步骤 6 : web.xml   
步骤 7 : getMany.html   
步骤 8 : 测试   

步骤 1 :

先运行,看到效果,再学习

老规矩,先下载右上角的可运行项目,配置运行起来,确认可用之后,再学习做了哪些步骤以达到这样的效果。
步骤 2 :

模仿和排错

在确保可运行项目能够正确无误地运行之后,再严格照着教程的步骤,对代码模仿一遍。
模仿过程难免代码有出入,导致无法得到期望的运行结果,此时此刻通过比较正确答案 ( 可运行项目 ) 和自己的代码,来定位问题所在。
采用这种方式,学习有效果,排错有效率,可以较为明显地提升学习速度,跨过学习路上的各个槛。

推荐使用diffmerge软件,进行文件夹比较。把你自己做的项目文件夹,和我的可运行项目文件夹进行比较。
这个软件很牛逼的,可以知道文件夹里哪两个文件不对,并且很明显地标记出来
这里提供了绿色安装和使用教程:diffmerge 下载和使用教程
步骤 3 :

效果

访问地址:
http://127.0.0.1:8080/getMany.html
效果
步骤 4 :

资源

要运行起来需要jquery.min.js,各种jar包,都在右上角的j2ee.rar中提供,请自行下载解压获取。
步骤 5 :

GetManyServlet

1. 准备一个集合
2. 向集合中放入 10个Hero对象
3. 通过JSONSerializer.toJSON(heros)把集合转换为JSON字符串
4. 返回给浏览器
import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.sf.json.JSONSerializer; public class GetManyServlet extends HttpServlet { protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { List<Hero> heros = new ArrayList<>(); for (int i = 0; i < 10; i++) { Hero hero = new Hero(); hero.setName("name"+i); hero.setHp(500+i); heros.add(hero); } String result =JSONSerializer.toJSON(heros).toString(); response.setContentType("text/html;charset=utf-8"); response.getWriter().print(result); } public static void main(String[] args) { List<Hero> heros = new ArrayList<>(); for (int i = 0; i < 10; i++) { Hero hero = new Hero(); hero.setName("name"+i); hero.setHp(500+i); heros.add(hero); } System.out.println(JSONSerializer.toJSON(heros).toString()); } }
步骤 6 :

web.xml

配置映射
<?xml version="1.0" encoding="UTF-8"?> <web-app> <servlet> <servlet-name>SubmitServlet</servlet-name> <servlet-class>SubmitServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>SubmitServlet</servlet-name> <url-pattern>/submitServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>GetOneServlet</servlet-name> <servlet-class>GetOneServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GetOneServlet</servlet-name> <url-pattern>/getOneServlet</url-pattern> </servlet-mapping> <servlet> <servlet-name>GetManyServlet</servlet-name> <servlet-class>GetManyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>GetManyServlet</servlet-name> <url-pattern>/getManyServlet</url-pattern> </servlet-mapping> </web-app>
步骤 7 :

getMany.html

1. 通过ajax访问getManyServlet
2. 把返回的数据,通过 $.parseJSON 转换为json数组
3. 遍历数组,显示在div中
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>用AJAX以JSON方式获取数据</title> <script type="text/javascript" src="jquery.min.js"></script> </head> <body> <input type="button" value="通过AJAX获取多个Hero对象" id="sender"> <div id="messageDiv"></div> <script> $('#sender').click(function(){ var url="getManyServlet"; $.post( url, function(data) { var heros = $.parseJSON(data); for(i in heros){ var old = $("#messageDiv").html(); var hero = heros[i]; $("#messageDiv").html(old + "<br>"+hero.name+" ----- "+hero.hp); } }); }); </script> </body> </body> </html>
步骤 8 :

测试

重启tomcat,并测试


http://127.0.0.1:8080/getMany.html


HOW2J公众号,关注后实时获知布最新的教程和优惠活动,谢谢。


问答区域    
2018-01-19 请教,getMany.html里边的一句话,我不知道什么意思
竹影



这个for循环里边的 old 是做什么用的,为什么要这样做 for(i in heros){ var old = $("#messageDiv").html(); var hero = heros[i]; $("#messageDiv").html(old + "<br>"+hero.name+" ----- "+hero.hp); }
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
<title>用AJAX以JSON方式获取数据</title> 
<script type="text/javascript" src="jquery.min.js"></script> 
</head> 
<body> 
    <input type="button" value="通过AJAX获取多个Hero对象" id="sender">  
   
    <div id="messageDiv"></div> 
       
    <script> 
    $('#sender').click(function(){ 
        var url="getManyServlet"; 
        $.post(
                url,
                function(data) {
                    var heros = $.parseJSON(data);
                     for(i in heros){
                         var old = $("#messageDiv").html();
                         var hero = heros[i];
                         $("#messageDiv").html(old + "<br>"+hero.name+"   -----   "+hero.hp); 
                     }
         });  
    }); 
    </script> 
</body> 
   
</body>
</html>

							


1 个答案

木凡 答案时间:2018-02-19
表示id为messageDiv的标签的原有内容,这样每一次循环会在前一次的基础上增加hero数据




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到





2017-09-20 AJAX获取不到对象
zuige



AJAX获取不到信息

							
九月 20, 2017 12:08:35 上午 org.apache.tomcat.util.digester.SetPropertiesRule begin
警告: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property 'source' to 'org.eclipse.jst.jee.server:j2ee' did not find a matching property.
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server version:        Apache Tomcat/7.0.64
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server built:          Aug 19 2015 17:18:06 UTC
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Server number:         7.0.64.0
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Name:               Windows 7
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: OS Version:            6.1
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Architecture:          x86
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Java Home:             C:\Program Files\Java\jre1.8.0_141
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Version:           1.8.0_141-b15
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: JVM Vendor:            Oracle Corporation
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_BASE:         D:\download\.metadata\.plugins\org.eclipse.wst.server.core\tmp2
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: CATALINA_HOME:         D:\Apache\tocat7-8080-eclispse
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.base=D:\download\.metadata\.plugins\org.eclipse.wst.server.core\tmp2
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dcatalina.home=D:\Apache\tocat7-8080-eclispse
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dwtp.deploy=D:\download\.metadata\.plugins\org.eclipse.wst.server.core\tmp2\wtpwebapps
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Djava.endorsed.dirs=D:\Apache\tocat7-8080-eclispse\endorsed
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.VersionLoggerListener log
信息: Command line argument: -Dfile.encoding=GBK
九月 20, 2017 12:08:35 上午 org.apache.catalina.core.AprLifecycleListener lifecycleEvent
信息: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_141\bin;C:\Windows\Sun\Java\bin;C:\Windows\system32;C:\Windows;C:/Program Files/Java/jre1.8.0_141/bin/client;C:/Program Files/Java/jre1.8.0_141/bin;C:/Program Files/Java/jre1.8.0_141/lib/i386;;C:\Program Files\Java\jdk1.8.0_111\binC:\Users\Administrator.PC-201607102038\algs4\java\bin;C:\ProgramData\Oracle\Java\javapath;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\Java\jdk1.8.0_111\bin;C:\Program Files\Java\jdk1.8.0_111\jre\bin;C:\Program Files\Microsoft\Web Platform Installer\;D:\Program Files\100\Tools\Binn\;D:\Program Files\100\DTS\Binn\;D:\软件\mysql-5.7.19-win32\bin;C:\Program Files\Java\jdk1.8.0_111\jre\bin;C:\Program Files\Java\jdk1.8.0_111\bin;D:\软件\apache-maven\bin;J:\GoogleChrome56.0.2924\GoogleChrome56.0.2924\GoogleChromePortable.exe;C:\Users\Administrator.PC-201607102038\algs4\bin;C:\Users\Administrator.PC-201607102038\algs4\java\bin;;D:\软件\eclipse;;.
九月 20, 2017 12:08:35 上午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["http-bio-8080"]
九月 20, 2017 12:08:35 上午 org.apache.coyote.AbstractProtocol init
信息: Initializing ProtocolHandler ["ajp-bio-8089"]
九月 20, 2017 12:08:35 上午 org.apache.catalina.startup.Catalina load
信息: Initialization processed in 589 ms
九月 20, 2017 12:08:35 上午 org.apache.catalina.core.StandardService startInternal
信息: Starting service Catalina
九月 20, 2017 12:08:35 上午 org.apache.catalina.core.StandardEngine startInternal
信息: Starting Servlet Engine: Apache Tomcat/7.0.64
九月 20, 2017 12:08:36 上午 org.apache.catalina.util.SessionIdGeneratorBase createSecureRandom
信息: Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [208] milliseconds.
九月 20, 2017 12:08:36 上午 org.apache.catalina.startup.TldConfig execute
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
九月 20, 2017 12:08:36 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["http-bio-8080"]
九月 20, 2017 12:08:36 上午 org.apache.coyote.AbstractProtocol start
信息: Starting ProtocolHandler ["ajp-bio-8089"]
九月 20, 2017 12:08:36 上午 org.apache.catalina.startup.Catalina start
信息: Server startup in 628 ms
九月 20, 2017 12:09:02 上午 org.apache.catalina.core.ApplicationContext log
信息: Marking servlet GetManyServlet as unavailable
九月 20, 2017 12:09:02 上午 org.apache.catalina.core.StandardWrapperValve invoke
严重: Allocate exception for servlet GetManyServlet
java.lang.ClassNotFoundException: GetManyServlet
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1858)
	at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1709)
	at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:506)
	at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:488)
	at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:115)
	at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1148)
	at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:864)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:134)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:318)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
	at java.lang.Thread.run(Unknown Source)


4 个答案

how2j 答案时间:2017-09-21
没洗手吧~

zuige 答案时间:2017-09-20
突然可以了。。。。

zuige 答案时间:2017-09-20
我就是用下载的项目跑的,有这个问题

how2j 答案时间:2017-09-20
我刚才用右上角的可运行项目下载并运行,是可以出现如教程所示的效果的,并没有出现你提到的错误呢。 请按照第一个步骤下载右上角的可运行项目,在本地跑起来看有没有问题呢。 如果也没有问题再比较和你的代码的区别,定位问题所在。




答案 或者 代码至少填写一项, 如果是自己有问题,请重新提问,否则站长有可能看不到









提问之前请登陆
关于 J2EE-Servlet-获取多个对象 的提问

尽量提供截图代码异常信息,有助于分析和解决问题。 也可进本站QQ群交流: 389538688
站长会在每个工作日早上尽量回答提问(如果有漏掉没有回答的,请进群提醒一下)
提问尽量提供完整的代码,环境描述,越是有利于问题的重现,您的问题越能更快得到解答。
对教程中代码有疑问,请提供是哪个步骤,哪一行有疑问,这样便于快速定位问题,提高问题得到解答的速度
站长是玻璃心,提问的时候请语气温柔些 kiss~
截止2017-5-19日累计提问 1638个,站长回答了 1546个
截止2017-8-15日累计提问 2788个,站长回答了 2544个

上传截图