Щоб опублікований код виглядав красиво, можна скористатися двома опціями:
- gist -це проект на GitHub. Там можна не реєструючись вставити шматок коду, натиснути кнопочку і отримати посилання, яке буде вести на репозитарій, де буде збережено стилізований код. Посилання вставляєте в повідомлення на блозі. Питання в тому, скільки часу цей код буде зберігатись на їх сервері?
- hilite.me - цим буду користуватись я.
Потрібно вставити фрагмент коду, натиснути на кнопку HighLight! і
скопіювати стилізований HTML, який вставляєте в свій блог. Таким чином, у
вас зберігається весь код, а не на чужому сервері.
вівторок, 1 вересня 2015 р.
Spring MVC: Доступ до статичних ресурсів
Статичні ресурси - це елементи веб-програми, які є статичними. Ось так просто. Тобто, це файли, які не змінюються протягом виконання програми, такі як CSS-стилі, HTML-сторінки, скрипти JavaScript, зображення і т.п. Все б нічого, але, виявляється, Spring MVC не вміє їх обробляти, якщо йому в цьому не допомогти.
Справа в тому, що по-замовчуванню, статичні запити обробляє так званий DefaultServlet, який створюється самим сервером і який привязаний до адреси /, тобто до кореневої папки веб-програми (web application root). Якщо програма отримала запит (request) і для нього зареєстровано відповідний сервлет в файлі web.xml, то цей сервлет буде викликано для обробки запиту. А коли відповідного сервлету не зареєстровано, запит буде оброблено згаданим "сервлетом по-замовчуванню" (java-allandsundry.com). Це він знає, як обробляти запити до статичних ресурсів.
Але згідно концепції Spring MVC феймворку, коренева папка веб-програми закріплена за так званим фронт-контролером, який називається DispatcherServlet (див. метод getServletMappings()):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | public class MusicBoxDispatcherServlet extends AbstractAnnotationConfigDispatcherServletInitializer { @Override protected String[] getServletMappings() { return new String[] { "/" }; } @Override protected Class<?>[] getRootConfigClasses() { return new Class<?>[] { RootConfig.class }; } /* * DispatcherServlet loads beans containing web components * such as controllers, view resolvers, and handler mappings * that are defined in the SpringAppConfig configuration * class (using Java configuration). */ @Override protected Class<?>[] getServletConfigClasses() { return new Class<?>[] { SpringAppConfig.class }; } } |
субота, 29 серпня 2015 р.
web.xml is missing and <failOnMissingWebXml> is set to true
Ви не використовуєте web.xml для свого J2EE проекту, а pom-файл Maven видає наступну помилку:
Це тому, що за замовчуванням ця опція для
web.xml is missing and <failOnMissingWebXml> is set to true
Це тому, що за замовчуванням ця опція для
maven-war-plugin має значення true. Щоб прибрати цю помилку, можна або створити пустий web.xml, або змінити значення згаданої опції наступним чином:
<plugins>
.........
.........
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<configuration>
<failOnMissingWebXml>false</failOnMissingWebXml>
</configuration>
</plugin>
.........
.........
</plugins>
MockMvc: тестування в Spring - java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
Якщо для тестування Java-програми, написаної на основі Spring MVC фреймворку, ви використвуєте їхнє API (модуль MockMvc), то під час виконання тесту може виникнути наступна помилка:
Причина - MockMvc фреймворк працює тільки в середовищі Servlet 3.0+ . Тож якщо ви отримали цю помилку, швидше за все ви використовуєте jar-бібліотеку для старішої Servlet-специфікації. Перевірте доступні бібліотеки в classpath. Або якщо працюєте з Maven, відкрийте pom-файл, там ви можете побачити щось подібне:
java.lang.NoClassDefFoundError: javax/servlet/SessionCookieConfig
at org.springframework.test.web.servlet.setup.StandaloneMockMvcBuilder.initWebAppContext(StandaloneMockMvcBuilder.java:329)
at org.springframework.test.web.servlet.setup.AbstractMockMvcBuilder.build(AbstractMockMvcBuilder.java:127)
at com.musicbox.springmvcproject.HomeControllerTest.testHomePage(HomeControllerTest.java:28)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:675)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)
Caused by: java.lang.ClassNotFoundException: javax.servlet.SessionCookieConfig
at java.net.URLClassLoader$1.run(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
... 25 more
Причина - MockMvc фреймворк працює тільки в середовищі Servlet 3.0+ . Тож якщо ви отримали цю помилку, швидше за все ви використовуєте jar-бібліотеку для старішої Servlet-специфікації. Перевірте доступні бібліотеки в classpath. Або якщо працюєте з Maven, відкрийте pom-файл, там ви можете побачити щось подібне:
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
неділя, 24 травня 2015 р.
Tomcat & Eclipse: Port NUMBER required by Tomcat v7.0 Server at localhost is already in use
Ви запускаєте веб-компонент на сервері і отримуєте помилку:
Port 8080 required by Tomcat v7.0 Server at localhost is already in use. The server may already be running in another process, or a system process may be using the port. To start this server you will need to stop the other process or change the port number(s).
субота, 23 травня 2015 р.
Java Web-розробка в Eclipse
Щоб створювати Java веб-додатки в Eclipse потрібно з офіційного сайту Eclipse встановити оболонку розробника Eclipse IDE for Java EE Developers (її ще називають Eclipse Web Tool Platform, WTP).
понеділок, 11 травня 2015 р.
GIT: основи роботи
GIT (вимовляється "ґіт") - це безкоштовна програма з відкритим кодом, розроблена для розподіленого контролю за версіями проекту (distributed version control system, VCS). "Проектом" може бути будь-що, що зберігається на комп'ютері у вигляді файлів. В тому числі, звичайно, проекти програмістів.
Роботу над Git розпочав Лайнус Торвальдс (Linus Torvalds) в 2005 році з метою керування версіями для написання ядра операційної системи Linux. Слово git в британському слензі має значення "неприємна персона".
Підписатися на:
Дописи (Atom)


