实例介绍
【实例简介】与Java平台无缝集成的Jython,涵盖了最新的Jython 2.5(或2.5.x),从基础特性到高级特性
【实例截图】
【核心代码】
Contents Contents at a Glance...........................................................................................................................iii Contents ............................................................................................................................................... v Foreword ........................................................................................................................................... xix About the Authors.............................................................................................................................. xx About the Technical Reviewers....................................................................................................... xxii Acknowledgments .......................................................................................................................... xxiii Introduction..................................................................................................................................... xxvi Part I: Jython Basics: Learning the Language....................................................................................1 ■ Chapter 1: Language and Syntax....................................................................................................3 The Difference between Jython and Python........................................................................................ 4 Installing and Configuring Jython ....................................................................................................... 4 Identifiers and Declaring Variables ..................................................................................................... 5 Reserved Words................................................................................................................................. 6 Coding Structure................................................................................................................................ 6 Operators........................................................................................................................................... 8 Expressions ....................................................................................................................................... 8 Functions........................................................................................................................................... 9 Classes ............................................................................................................................................ 10 Statements ...................................................................................................................................... 11 if-elif-else Statement ................................................................................................................... 12 print Statement............................................................................................................................ 13 try-except-finally ......................................................................................................................... 15 raise Statement ........................................................................................................................... 16 import Statement......................................................................................................................... 17 Iteration ........................................................................................................................................... 17 While Loop................................................................................................................................... 19 For Loop ...................................................................................................................................... 20 Basic Keyboard Input ....................................................................................................................... 20 ■ CONTENTS vi Other Python Statements ................................................................................................................. 21 Documenting Code........................................................................................................................... 22 Python Help ..................................................................................................................................... 23 Summary ......................................................................................................................................... 24 ■ Chapter 2: Data Types and Referencing .......................................................................................25 Python Data Types ........................................................................................................................... 25 Strings and String Methods.......................................................................................................... 27 String Formatting..................................................................................................................... 31 Lists, Dictionaries, Sets, and Tuples............................................................................................. 33 Lists ........................................................................................................................................ 33 List Comprehensions ............................................................................................................... 40 Tuples ..................................................................................................................................... 41 Dictionaries ............................................................................................................................. 42 Sets......................................................................................................................................... 45 Ranges .................................................................................................................................... 48 Range Format.......................................................................................................................... 49 Jython-specific Collections .......................................................................................................... 50 Files............................................................................................................................................. 52 Iterators ....................................................................................................................................... 54 Referencing and Copies ............................................................................................................... 55 Garbage Collection....................................................................................................................... 57 Summary ......................................................................................................................................... 58 ■ Chapter 3: Operators, Expressions, and Program Flow ...............................................................59 Types of Expressions ....................................................................................................................... 59 Mathematical Operations ................................................................................................................. 59 Comparison Operators ................................................................................................................. 63 Bitwise Operators ........................................................................................................................ 65 Augmented Assignment ............................................................................................................... 66 Boolean Expressions .................................................................................................................... 68 Conversions ................................................................................................................................. 70 Using Expressions to Control Program Flow...................................................................................... 72 if-elif-else Statement ................................................................................................................... 72 while Loop ................................................................................................................................... 73 continue Statement...................................................................................................................... 74 break Statement .......................................................................................................................... 75 ■ CONTENTS vii for Loop ....................................................................................................................................... 76 Example Code.............................................................................................................................. 77 Summary ......................................................................................................................................... 79 ■ Chapter 4: Defining Functions and Using Built-ins ......................................................................81 Function Syntax and Basics.............................................................................................................. 81 The def Keyword.......................................................................................................................... 82 Naming the Function.................................................................................................................... 82 Function Parameters and Calling Functions.................................................................................. 84 Recursive Function Calls .......................................................................................................... 86 Function Body.............................................................................................................................. 86 Documenting Functions ........................................................................................................... 86 Returning Values...................................................................................................................... 87 Introducing Variables ............................................................................................................... 88 Other Statements..................................................................................................................... 89 Empty Functions ...................................................................................................................... 89 Miscellaneous Information for the Curious Reader............................................................................ 90 Built-in Functions............................................................................................................................. 90 Alternative Ways to Define Functions ............................................................................................... 90 Lambda Functions ....................................................................................................................... 91 Generator Functions......................................................................................................................... 91 Defining Generators ..................................................................................................................... 92 Generator Expressions ................................................................................................................. 95 Namespaces, Nested Scopes, and Closures ..................................................................................... 95 Function Decorators......................................................................................................................... 96 Coroutines ....................................................................................................................................... 99 Decorators in Coroutines............................................................................................................ 101 Coroutine Example..................................................................................................................... 102 Summary ....................................................................................................................................... 102 ■ Chapter 5: Input and Output........................................................................................................105 Input from the Keyboard................................................................................................................. 105 sys.stdin and raw_input............................................................................................................. 105 Obtaining Variables from Jython Environment ............................................................................ 106 File I/O........................................................................................................................................... 107 Pickle............................................................................................................................................. 110 Output Techniques..................................................................................................................... 111 ■ CONTENTS viii Summary ....................................................................................................................................... 112 ■ Chapter 6: Object-Oriented Jython .............................................................................................113 Basic Syntax .................................................................................................................................. 113 Object Attribute Lookups................................................................................................................ 117 Inheritance and Overloading........................................................................................................... 119 Underscore Methods ...................................................................................................................... 121 Protocols........................................................................................................................................ 123 Default Arguments ......................................................................................................................... 127 Runtime Binding of Methods .......................................................................................................... 128 Caching Attribute Access ............................................................................................................... 128 Summary ....................................................................................................................................... 131 ■ Chapter 7: Exception Handling and Debugging..........................................................................133 Exception Handling Syntax and Differences with Java .................................................................... 133 Catching Exceptions................................................................................................................... 134 Raising Exceptions..................................................................................................................... 142 Defining Your Own Exceptions........................................................................................................ 143 Issuing Warnings ........................................................................................................................... 143 Assertions and Debugging.............................................................................................................. 148 Context Managers.......................................................................................................................... 148 Summary ....................................................................................................................................... 150 ■ Chapter 8: Modules and Packages for Code Reuse ...................................................................151 Imports for Reuse .......................................................................................................................... 151 Import Basics............................................................................................................................. 151 breakfast.py........................................................................................................................... 151 The Import Statement ................................................................................................................ 153 An Example Program...................................................................................................................... 153 greetings.py........................................................................................................................... 154 greet/__init__.py................................................................................................................... 154 greet/hello.py......................................................................................................................... 154 greet/people.py...................................................................................................................... 154 Trying Out the Example Code ..................................................................................................... 154 Types of Import Statements ........................................................................................................... 155 From Import Statements ............................................................................................................ 155 Relative Import Statements ........................................................................................................ 156 ■ CONTENTS ix Aliasing Import Statements ........................................................................................................ 156 Hiding Module Names................................................................................................................ 157 Module Search Path, Compilation, and Loading.............................................................................. 157 Java Import Example ................................................................................................................. 157 Module Search Path and Loading............................................................................................... 158 Java Package Scanning ................................................................................................................. 158 How Jython Finds the Jars and Classes to Scan......................................................................... 159 Compilation ............................................................................................................................... 160 Python Modules and Packages versus Java Packages.................................................................... 160 sys.path..................................................................................................................................... 160 Naming Python Modules and Packages...................................................................................... 160 Proper Python Naming ............................................................................................................... 161 Advanced Import Manipulation....................................................................................................... 161 Import Hooks ............................................................................................................................. 161 sys.path_hooks.......................................................................................................................... 161 sys.meta_path........................................................................................................................... 162 Summary ....................................................................................................................................... 162 Part II: Using the Language .............................................................................................................163 ■ Chapter 9: Scripting With Jython................................................................................................165 Getting the Arguments Passed to a Script ...................................................................................... 165 Searching for a File........................................................................................................................ 166 Manipulating Files.......................................................................................................................... 167 Making a Script a Module .............................................................................................................. 168 Parsing Commandline Options ....................................................................................................... 169 Compiling Java Source................................................................................................................... 170 Example Script: Builder.py ............................................................................................................. 170 HelloWorld.java .............................................................................................................................. 172 Summary ....................................................................................................................................... 173 ■ Chapter 10: Jython and Java Integration ...................................................................................175 Using Java Within Jython Applications ........................................................................................... 175 Using Jython Within Java Applications ........................................................................................... 178 Object Factories......................................................................................................................... 179 One-to-One Jython Object Factories ...................................................................................... 179 Summary of One-to-One Object Factory................................................................................. 182 ■ CONTENTS x Making Use of a Loosely Coupled Object Factory ................................................................... 182 More Efficient Version of Loosely Coupled Object Factory....................................................... 186 Returning __doc__ Strings .................................................................................................... 188 Applying the Design to Different Object Types........................................................................ 190 JSR-223 .................................................................................................................................... 192 Utilizing PythonInterpreter.......................................................................................................... 193 Summary ....................................................................................................................................... 195 ■ Chapter 11: Using Jython in an IDE ............................................................................................197 Eclipse........................................................................................................................................... 197 Installing PyDev ......................................................................................................................... 197 Minimal Configuration................................................................................................................ 198 Hello PyDev!: Creating Projects and Executing Modules ............................................................. 200 Passing Command-line Arguments and Customizing Execution.................................................. 201 Playing with the Editor ............................................................................................................... 202 A Bit of Structure: Packages, Modules, and Navigation............................................................... 204 Testing ...................................................................................................................................... 207 Adding Java Libraries to the Project ........................................................................................... 210 Debugging ..................................................................................................................................... 211 Conclusion about Eclipse ........................................................................................................... 213 Netbeans ....................................................................................................................................... 213 IDE Installation and Configuration................................................................................................... 214 Advanced Python Options............................................................................................................... 215 General Python Usage .................................................................................................................... 216 Standalone Jython Apps................................................................................................................. 216 Jython and Java Integrated Apps ................................................................................................... 221 Using a JAR or Java Project in Your Jython App ......................................................................... 221 Using Jython in Java.................................................................................................................. 222 The Netbeans Python Debugger..................................................................................................... 223 Other Netbeans Python Features .................................................................................................... 228 Summary ....................................................................................................................................... 228 ■ Chapter 12: Databases and Jython: Object Relational Mapping and Using JDBC ....................231 ZxJDBC—Using Python’s DB API via JDBC..................................................................................... 231 Getting Started........................................................................................................................... 232 Connections............................................................................................................................... 233 ZxJDBC.lookup .......................................................................................................................... 237 ■ CONTENTS xi Cursors.................................................................................................................................. 237 Creating and Executing Queries ............................................................................................. 240 Prepared Statements ................................................................................................................. 243 Resource Management .............................................................................................................. 243 Metadata ................................................................................................................................... 244 Data Manipulation Language and Data Definition Language ....................................................... 245 Calling Procedures................................................................................................................. 246 Customizing zxJDBC Calls...................................................................................................... 247 History ....................................................................................................................................... 249 Object Relational Mapping.............................................................................................................. 249 SqlAlchemy................................................................................................................................ 249 Installation ................................................................................................................................. 249 Using SqlAlchemy ...................................................................................................................... 250 Hibernate................................................................................................................................... 254 Entity Classes and Hibernate Configuration ................................................................................ 254 Jython Implementation Using the Java Entity Classes................................................................. 256 Summary ....................................................................................................................................... 261 Part III: Developing Applications with Jython ................................................................................263 ■ Chapter 13: Simple Web Applications ........................................................................................265 Servlets ......................................................................................................................................... 265 Configuring Your Web Application for Jython Servlets................................................................. 266 Writing a Simple Servlet............................................................................................................. 266 Using JSP with Jython ............................................................................................................... 268 Configuring for JSP................................................................................................................ 269 Coding the Controller/View..................................................................................................... 269 Applets and Java Web Start ........................................................................................................... 272 Coding a Simple GUI-Based Web Application.............................................................................. 272 Object Factory Application Design.......................................................................................... 272 Distributing via Standalone JAR ................................................................................................. 276 WSGI and Modjy............................................................................................................................. 276 Running a Modjy Application in Glassfish ................................................................................... 277 Summary ....................................................................................................................................... 280 ■ Chapter 14: Web Applications With Django................................................................................281 Getting Django ............................................................................................................................... 281 ■ CONTENTS xii A Quick Tour of Django .................................................................................................................. 282 Starting a Project (and an “App”) ............................................................................................... 283 Models....................................................................................................................................... 284 Bonus: The Admin...................................................................................................................... 287 Views and Templates................................................................................................................. 292 Reusing Templates Without “include”: Template Inheritance...................................................... 297 Forms ........................................................................................................................................ 300 Feeds......................................................................................................................................... 302 Comments ................................................................................................................................. 304 And More................................................................................................................................... 306 J2EE Deployment and Integration................................................................................................... 307 Deploying Your First Application................................................................................................. 308 Disabling PostgreSQL Logins ..................................................................................................... 308 A Note About WAR Files ............................................................................................................. 309 Extended Installation.................................................................................................................. 311 Connection Pooling With JavaEE ................................................................................................ 312 Dealing With Long-running Tasks .............................................................................................. 315 Thread Pools.............................................................................................................................. 315 Passing Messages Across Process Boundaries........................................................................... 318 Summary ....................................................................................................................................... 325 ■ Chapter 15: Introduction to Pylons .............................................................................................327 A Guide for the Impatient ............................................................................................................... 327 A Note about Paste ........................................................................................................................ 329 Pylons MVC.................................................................................................................................... 329 An Interlude into Java’s Memory Model.......................................................................................... 330 Invoking the Pylons Shell ............................................................................................................... 331 request.GET ............................................................................................................................... 332 request.POST............................................................................................................................. 332 request.params.......................................................................................................................... 332 request.headers......................................................................................................................... 333 Context Variables and Application Globals ...................................................................................... 333 Routes ........................................................................................................................................... 333 Controllers and Templates ............................................................................................................. 334 Adding a JSON API......................................................................................................................... 340 Unit Testing, Functional Testing, and Logging ................................................................................ 341 ■ CONTENTS xiii Deployment into a Servlet Container .............................................................................................. 346 Summary ....................................................................................................................................... 346 ■ Chapter 16: GUI Applications ......................................................................................................347 Summary ....................................................................................................................................... 357 ■ Chapter 17: Deployment Targets ................................................................................................359 Application Servers ........................................................................................................................ 359 Tomcat ...................................................................................................................................... 360 Deploying Web Start .............................................................................................................. 360 Deploying a WAR or Exploded Directory Application ............................................................... 360 Glassfish.................................................................................................................................... 361 Deploying Web Start .............................................................................................................. 361 WAR File and Exploded Directory Deployment........................................................................ 362 Glassfish v3 Django Deployment............................................................................................ 362 Other Java Application Servers .................................................................................................. 362 Google App Engine......................................................................................................................... 362 Starting With an SDK Demo ....................................................................................................... 363 Deploying to the Cloud............................................................................................................... 363 Working With a Project............................................................................................................... 364 Object Factories with App Engine............................................................................................... 365 Using PyServlet Mapping ........................................................................................................... 365 Example Jython Servlet Application for App Engine .................................................................... 366 Using Eclipse ............................................................................................................................. 369 Deploy Modjy to GAE.................................................................................................................. 370 Java Store...................................................................................................................................... 370 Deploying a Single JAR .............................................................................................................. 371 Mobile............................................................................................................................................ 375 Summary ....................................................................................................................................... 375 Part IV: Strategy and Technique......................................................................................................377 ■ Chapter 18: Testing and Continuous Integration .......................................................................379 Python Testing Tools...................................................................................................................... 379 UnitTest ..................................................................................................................................... 379 Doctests .................................................................................................................................... 384 A Complete Example.................................................................................................................. 388 Nose .......................................................................................................................................... 395 ■ CONTENTS xiv Integration with Java?................................................................................................................ 400 Continuous Integration ................................................................................................................... 401 Hudson ...................................................................................................................................... 401 Getting Hudson .......................................................................................................................... 401 Installing the Jython Plug-in....................................................................................................... 402 Creating a Hudson Job for a Jython Project................................................................................ 403 Using Nose on Hudson ............................................................................................................... 407 Summary ....................................................................................................................................... 410 ■ Chapter 19: Concurrency.............................................................................................................413 Java or Python APIs?...................................................................................................................... 414 Working With Threads.................................................................................................................... 414 Thread Locals ................................................................................................................................ 416 No Global Interpreter Lock.............................................................................................................. 417 Module Import Lock ....................................................................................................................... 417 Working With Tasks ....................................................................................................................... 418 Thread Safety ................................................................................................................................ 422 Synchronization ......................................................................................................................... 423 Deadlocks.................................................................................................................................. 426 Other Synchronization Objects ................................................................................................... 427 Atomic Operations ..................................................................................................................... 431 Thread Confinement .................................................................................................................. 432 Python Memory Model ................................................................................................................... 433 Interruption .................................................................................................................................... 433 Summary ....................................................................................................................................... 436 ■ Appendix A: Using Other Tools with Jython ...............................................................................437 The Jython Registry ....................................................................................................................... 437 Registry Properties..................................................................................................................... 437 python.cachedir..................................................................................................................... 437 python.verbose ...................................................................................................................... 437 python.security.respectJavaAccessibility................................................................................ 438 python.jythonc.compiler......................................................................................................... 438 python.jythonc.classpath ....................................................................................................... 438 python.jythonc.compileropts .................................................................................................. 438 python.console ...................................................................................................................... 438 python.console.readlinelib ..................................................................................................... 438 ■ CONTENTS xv Finding the Registry File............................................................................................................. 438 Setuptools...................................................................................................................................... 438 Virtualenv....................................................................................................................................... 442 ■ Appendix B: Jython Cookbook ....................................................................................................445 Logging.......................................................................................................................................... 445 Using log4j with Jython, Josh Juneau ........................................................................................ 445 Setting Up Your Environment ................................................................................................. 445 Using log4j in a Jython Application......................................................................................... 446 Working with Spreadsheets............................................................................................................ 447 Creating and Reading Spreadsheets Using Apache Poi............................................................... 447 Create Spreadsheet ............................................................................................................... 447 Read an Excel File.................................................................................................................. 449 Jython and XML ............................................................................................................................. 450 Writing and Parsing RSS with ROME, Josh Juneau..................................................................... 450 Setting up the CLASSPATH..................................................................................................... 450 Parsing Feeds........................................................................................................................ 450 Creating Feeds....................................................................................................................... 451 Summary............................................................................................................................... 454 Working with CLASSPATH.............................................................................................................. 454 Using the CLASSPATH, Steve Langer.......................................................................................... 454 What to Do?........................................................................................................................... 454 Method .................................................................................................................................. 454 Summary............................................................................................................................... 456 Ant................................................................................................................................................. 456 Writing Ant Tasks with Jython, Ed Takema................................................................................. 456 Writing Custom Ant Tasks...................................................................................................... 457 Setup Development Environment ........................................................................................... 457 SimpleTask Jython Class ....................................................................................................... 457 Compiling Jython Code to a Jar.............................................................................................. 458 Build.XML File to Use the Task............................................................................................... 458 A Task Container Task ........................................................................................................... 458 Build.XML File to Use the TaskContainer ................................................................................ 459 Things to Look Out For........................................................................................................... 460 Summary............................................................................................................................... 461 Developing Django Web Apps......................................................................................................... 461 ■ CONTENTS xvi Using Django in Netbeans, Josh Juneau..................................................................................... 461 ■ Appendix C: Built-in Functions ...................................................................................................463 Constructor Functions .................................................................................................................... 463 bool([x]) ..................................................................................................................................... 463 chr(i).......................................................................................................................................... 463 complex([real[, imag]])............................................................................................................... 464 dict([arg])................................................................................................................................... 464 file(filename[, mode[, bufsize]]).................................................................................................. 464 float([x]) ..................................................................................................................................... 464 frozenset([iterable]).................................................................................................................... 464 int([x[, radix]]) ............................................................................................................................ 464 iter(o[, sentinel])......................................................................................................................... 465 list([iterable]).............................................................................................................................. 465 object() ...................................................................................................................................... 465 open(filename[, mode[, bufsize]])............................................................................................... 465 range([start,] stop[, step])........................................................................................................... 466 set([iterable]) ............................................................................................................................. 466 slice([start,] stop[, step]) ............................................................................................................ 466 str([object]) ................................................................................................................................ 467 tuple([iterable]) .......................................................................................................................... 467 type(name, bases, dict).............................................................................................................. 467 unichr(i) ..................................................................................................................................... 467 unicode([object[, encoding [, errors]]])........................................................................................ 467 xrange([start,] stop[, step])......................................................................................................... 468 Math Built-in Functions .................................................................................................................. 468 abs(x)......................................................................................................................................... 468 cmp(x, y).................................................................................................................................... 468 divmod(a, b)............................................................................................................................... 468 pow(x, y[, z]) .............................................................................................................................. 468 round(x[, n]) ............................................................................................................................... 469 Functions on Iterables.................................................................................................................... 469 all(iterable)................................................................................................................................. 469 any(iterable)............................................................................................................................... 469 enumerate(sequence[, start=0])................................................................................................. 469 filter(function, iterable)............................................................................................................... 469 ■ CONTENTS xvii map(function, iterable, ...).......................................................................................................... 470 max(iterable[, key])or max([, arg, ...][, key])................................................................................ 470 min(iterable[, key]) or min([, arg, ...][, key]) ................................................................................ 470 reduce(function, iterable[, initializer]) ......................................................................................... 470 reversed(seq)............................................................................................................................. 470 sorted(iterable[, cmp[, key[, reverse]]])....................................................................................... 470 sum(iterable[, start=0]).............................................................................................................. 471 zip([iterable, ...])......................................................................................................................... 471 Conversion Functions..................................................................................................................... 472 hex(x)......................................................................................................................................... 472 long([x[, radix]]).......................................................................................................................... 472 oct(x) ......................................................................................................................................... 472 ord(c)......................................................................................................................................... 472 Functions for Working with Code.................................................................................................... 472 classmethod(function)................................................................................................................ 472 compile(source, filename, mode[, flags[, dont_inherit]]) ............................................................. 473 eval(expression[, globals[, locals]])............................................................................................. 474 execfile(filename[, globals[, locals]]) .......................................................................................... 474 property([fget[, fset[, fdel[, doc]]]]) ............................................................................................. 475 staticmethod(function) ............................................................................................................... 476 super(type[, object-or-type]) ...................................................................................................... 476 Input Functions .............................................................................................................................. 477 input([prompt])........................................................................................................................... 477 raw_input([prompt])................................................................................................................... 477 Functions for Working with Modules and Objects ........................................................................... 478 callable(object)........................................................................................................................... 478 delattr(object, name).................................................................................................................. 478 dir([object]) ................................................................................................................................ 478 getattr(object, name[, default])................................................................................................... 479 globals()..................................................................................................................................... 479 hasattr(object, name)................................................................................................................. 479 hash(object)............................................................................................................................... 480 help([object]).............................................................................................................................. 480 id(object).................................................................................................................................... 480 isinstance(object, classinfo) ....................................................................................................... 480 ■ CONTENTS xviii issubclass(class, classinfo) ........................................................................................................ 480 len(s) ......................................................................................................................................... 480 locals()....................................................................................................................................... 481 reload(module)........................................................................................................................... 481 repr(object) ................................................................................................................................ 482 setattr(object, name, value)........................................................................................................ 482 type(object)................................................................................................................................ 482 vars([object]).............................................................................................................................. 482 __import__(name[, globals[, locals[, fromlist[, level]]]]).............................................................. 483 Index................................................................................................................................................485
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明
网友评论
我要评论