Podłączenie Jersey do projektu Java EE.

Podłączenie Jersey do projektu Java EE.
bajos
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:UwUdź
  • Postów:267
0

Witajcie,

Przeszło mi w tym momencie zrobić REST API. Wyczytałem o JAX-RS i wybrałem implementację Jersey. Dodałem w MVN wersję 2.22.1. Czytam User Guide: https://jersey.java.net/documentation/latest/user-guide.html#d0e3312 , tylko jest jeden problem. Do web.xml dodałem:

Kopiuj
<servlet>
        <servlet-name>jersey</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>
                pl.bajos
            </param-value>
        </init-param>
</servlet>

<servlet-mapping>
        <servlet-name>jersey</servlet-name>
        <url-pattern>/*</url-pattern>
</servlet-mapping>

IntelliJ zaznacza mi <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>, że klasa ServletContainernie i paczka servlet nie istnieje. Jak mam skonfigurować web.xml do tej wersji skoro dokumentacja (do tej wersji o_O) podaje złe rozwiązanie...?

pom.xml:

Kopiuj
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-server</artifactId>
    <version>2.22.1</version>
</dependency>

128 postów [25.06.2015r. 21:03]
edytowany 2x, ostatnio: bajos
M9
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 6 lat
1
  1. Z jakiego serwera aplikacji korzystasz? Np. na GlassFishu full-profile masz Jersey od razu dostępne w API JEE i nie trzeba dorzucać specjalnej zależności w pom.xml.
  2. W JAX-RS 2.0 nie musisz dodawać servlet'u w web.xml (chyba, że deployujesz do kontenera servlerów niższego niż 3.0). Zamiast tego lepiej wykorzystać konfigurację za pomocą adnotacji.
bajos
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:UwUdź
  • Postów:267
0

@margor90, korzystam z Java EE 7 Web Profile SDK i Glassfish 4.1. Co zrobić, żeby IntelliJ mi podpowiadało klasy z ${glassfish.home}/glassfish/modules? Jak określić wersje JAX-RS i kontenera servletów?


128 postów [25.06.2015r. 21:03]
edytowany 1x, ostatnio: bajos
bajos
@margor90, po edycji i dodaniu adnotacji usera nie wyswietli powiadomienia, więc wołam tutaj.
M9
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 6 lat
2

Na GlassFish 4 masz JAX-RS 2.0 i Servlet 3.1.
Taka zależność może być przydatna (scope provided) dla full-profile:
http://mvnrepository.com/artifact/javax/javaee-api/7.0
Jest dostępna analogiczna dla WebProfile.

bajos
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:UwUdź
  • Postów:267
0

@margor90, usunąłem z pom.xml takie zależności:

Kopiuj
<dependency>
    <groupId>javax</groupId>
    <artifactId>javaee-api</artifactId>
    <version>7.0</version>
</dependency>
<dependency>
    <groupId>javax.persistence</groupId>
    <artifactId>persistence-api</artifactId>
    <version>1.0.2</version>
</dependency>

Do IntelliJ dodałem ścieżkę w Glassfishu {glassfish.home}/glassfish/modules, ale teraz Mejven mi nie chce wyszukać tych bibliotek przy kompilacji. Jak to ustrojstwo naprawić? Chciałbym uruchomić chociaż tego Helloworlda i rozbudowywać to. Jakoś trzeba zacząć naukę.


128 postów [25.06.2015r. 21:03]
EvilOne
  • Rejestracja:prawie 14 lat
  • Ostatnio:19 dni
  • Postów:78
1

Osobiście używam takiej konfiguracji:

pom.xml

Kopiuj
<project
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">

	<modelVersion>4.0.0</modelVersion>

	<name>...</name>

	<groupId>...</groupId>
	<artifactId>...</artifactId>
	<version>1.0</version>

	<packaging>war</packaging>
	
	<build>
		<finalName>...</finalName>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>2.5.1</version>
				<inherited>true</inherited>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
				</configuration>
			</plugin>
		</plugins>
	</build>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.glassfish.jersey</groupId>
				<artifactId>jersey-bom</artifactId>
				<version>${jersey.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>

	<dependencies>
		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet-core</artifactId>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-moxy</artifactId>
		</dependency>
	</dependencies>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<jersey.version>2.22.1</jersey.version>
	</properties>
</project>

web.xml

Kopiuj
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
    <servlet>
        <servlet-name>Jersey Web Application</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>jersey.config.server.provider.packages</param-name>
            <param-value>...</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>Jersey Web Application</servlet-name>
        <url-pattern>/webapi/*</url-pattern>
    </servlet-mapping>
</web-app>

w miejsce ... wstaw własne nazwy projektowe/paczek.

bajos
@EvilOne, ale też na tym Glassfishu i SDK?
EvilOne
tak - używam Glassfish 4.1.1 (WebProfile).
M9
na WebProfile miałem kiedyś sytuację, że chyba rzeczywiście trzeba podać jersey-container-servlet-core, a zdaje się że niby JAX-RS jest oficjalnie w WebProfile (bez tego nie było jakby sewera na GlassFish 4.0 WebProfile)
M9
  • Rejestracja:prawie 10 lat
  • Ostatnio:prawie 6 lat
1

Konfiguracja w web.xml jest niepotrzebna, można dodać endpointy adnotacjami np.

Kopiuj
import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath("/jersey")
public class JerseyApp extends Application {
  @Override
  public Set<Class<?>> getClasses() {
    Set set = new HashSet();
    set.add(RestResource.class);
    return set;
  }
}

RestResource to oczywiście endpoint REST (dowolny stateless session bean lub singleton).

Co do pom.xml to w dependencies na full profile:

Kopiuj
<dependency>
  <groupId>javax</groupId>
  <artifactId>javaee-api</artifactId>
  <version>7.0</version>
  <scope>provided</scope>
</dependency>

Na web profile być może trzeba dopisać jersey-container-servlet-core.

Ja wole adnotacjami konfigurować. Jak ktoś preferuje XML to ok.

edytowany 1x, ostatnio: margor90
bajos
@margor90, to scope: provided to oznacza, że jest to zależność, ale z zew źródła jest zapewniona?
M9
provided oznacza, że zależność jest już na serwerze aplikacyjnym, jest pobierana na potrzeby IDE i kompilacji. http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html#Dependency_Scope
EvilOne
  • Rejestracja:prawie 14 lat
  • Ostatnio:19 dni
  • Postów:78
1

@margor90 masz rację - sprawdziłem i potwierdzam, że w wersji (WP) nie ma konieczności dodawania/konfiguracji web.xml. Również dobrze dodać wspomnianą przez Ciebie zależność i wszystko działa, jak należy. Konfiguracja przez adnotację jest jednak wygodniejsza i przy niej zostanę.

Po prostu wcześniej projekt tworzyłem z następującego repozytorium: http://mvnrepository.com/artifact/org.glassfish.jersey.archetypes/jersey-quickstart-webapp/2.22.1 i nie zmieniałem zbytnio konfiguracji.

bajos
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:UwUdź
  • Postów:267
0

Zmieniłem mój pom.xml. Usunąłem w IntelliJ folder z server-owymi zależnościami (z indexera IJ). Zrobiłem cele mvn clean i install. W folderze target mam paczkę blog-0.1.war. Dodałem w IntelliJ serwer Glassfish i artefakt który ma deployować, czyli mój .war. Mój nowy pom.xml:

Kopiuj
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>pl.bajos</groupId>
    <artifactId>blog</artifactId>
    <version>0.1</version>
    <packaging>war</packaging>

    <dependencies>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <version>9.4-1204-jdbc41</version>
        </dependency>
        <dependency>
            <groupId>org.mindrot</groupId>
            <artifactId>jbcrypt</artifactId>
            <version>0.3m</version>
        </dependency>
        <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-api</artifactId>
            <version>7.0</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>persistence-api</artifactId>
            <version>1.0.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.0.5.Final</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-entitymanager</artifactId>
            <version>5.0.5.Final</version>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-server</artifactId>
            <version>2.22.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.containers</groupId>
            <artifactId>jersey-container-servlet</artifactId>
            <version>2.22.1</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>
</project>

Deskryptor wdrożenia pozostał jak wcześniej. Przy deployu dostaję taki skrócony log: http://4programmers.net/Pastebin/4625 .
Server.log jest dużo dłuższy: http://4programmers.net/Pastebin/4624 . Z tego co rozumiem to wyjątek pochodzi od Hibernate, ponieważ on z tego co wiem używa JBossa do logów, czyli jest jego zależnością, ale już jeden jest na Glassfishu to chyba z tąd błędy.


128 postów [25.06.2015r. 21:03]
edytowany 1x, ostatnio: bajos
bajos
Może zamiast GF będzie lepiej użyć Tomcata?
M9
Na początek daj spokój z Hibernate, bo masz EclipseLink na GlassFishu. Zbuduj jakiś Hello World zwracający JSON bez bazy. Można użyć Tomcata, ale na GlassFishu jest prościej, bo Jersey jest jego częścią. I masz integracje z EJB i CDI out-of-box.
EvilOne
  • Rejestracja:prawie 14 lat
  • Ostatnio:19 dni
  • Postów:78
1

Niestety Twojego IDE nie znam, ale widzę, że serwer używamy taki sam. Osobiście używam środowisko NetBeans 8.1 i GlassFish 4.0 (build 89). Czemu wróciłem do wcześniejszej wersji 4.0 z 4.1.1? Wczoraj natknąłem się na kolejne poważne błędy podczas niektórych operacji i podziękowałem. Więc jeśli chcesz sobie zaoszczędzić nerwów to wróć do tej wcześniejszej.

Wkleję Ci aktualną konfigurację mojego pom.xml:

Kopiuj
<?xml version="1.0" encoding="UTF-8"?>
<project
	xmlns="http://maven.apache.org/POM/4.0.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

	<modelVersion>4.0.0</modelVersion>
	
	<groupId>_paczka_</groupId>
	<artifactId>_nazwa_artefaktu_</artifactId>
	<version>1.0</version>
	<packaging>war</packaging>

	<name>_nazwa_projektu_</name>

	<properties>
		<endorsed.dir>${project.build.directory}/endorsed</endorsed.dir>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<jersey.version>2.22.1</jersey.version>
	</properties>

	<dependencyManagement>
		<dependencies>
			<dependency>
				<groupId>org.glassfish.jersey</groupId>
				<artifactId>jersey-bom</artifactId>
				<version>${jersey.version}</version>
				<type>pom</type>
				<scope>import</scope>
			</dependency>
		</dependencies>
	</dependencyManagement>
	
	<dependencies>
		<dependency>
			<groupId>javax</groupId>
			<artifactId>javaee-web-api</artifactId>
			<version>7.0</version>
			<scope>provided</scope>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.containers</groupId>
			<artifactId>jersey-container-servlet</artifactId>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.core</groupId>
			<artifactId>jersey-client</artifactId>
		</dependency>
		<dependency>
			<groupId>org.glassfish.jersey.media</groupId>
			<artifactId>jersey-media-moxy</artifactId>
		</dependency>
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
	</dependencies>

	<build>
		<plugins>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<version>3.1</version>
				<configuration>
					<source>1.7</source>
					<target>1.7</target>
					<compilerArguments>
						<endorseddirs>${endorsed.dir}</endorseddirs>
					</compilerArguments>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-war-plugin</artifactId>
				<version>2.3</version>
				<configuration>
					<failOnMissingWebXml>false</failOnMissingWebXml>
				</configuration>
			</plugin>
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-dependency-plugin</artifactId>
				<version>2.6</version>
				<executions>
					<execution>
						<phase>validate</phase>
						<goals>
							<goal>copy</goal>
						</goals>
						<configuration>
							<outputDirectory>${endorsed.dir}</outputDirectory>
							<silent>true</silent>
							<artifactItems>
								<artifactItem>
									<groupId>javax</groupId>
									<artifactId>javaee-endorsed-api</artifactId>
									<version>7.0</version>
									<type>jar</type>
								</artifactItem>
							</artifactItems>
						</configuration>
					</execution>
				</executions>
			</plugin>
		</plugins>
	</build>
</project>

jeszcze niech @margor90 rzuci na niego okiem, ale u mnie prawidłowo wdraża aplikację na serwer.

edytowany 1x, ostatnio: EvilOne
Zobacz pozostały 1 komentarz
M9
Z ciekawości, na jakie błędy w 4.1.1 się natknąłeś? Pytam, bo mam produkcję na 4.0 na jednym z serwerów i chciałbym stopniowo podnieść: dużo poprawek znanych błędów. Słyszałeś o Payara? To częściej łatany i wspierany komercyjnie wariant GlassFisha, do tego chcę migrować. W configu nie podoba mi się nie podawanie wersji redundantnych pakietów. Poza tym wydaje mi się, że javaee-api powinno spokojnie wystarczyć dla REST w full profile. Dzięki Payara rozwój GlassFisha mocno przyspieszył. Czy te błędy są śledzone w Payara?
M9
Kiedyś mocno irytował mnie zepsuty zdalny deploy w GlassFish 4.1, ale był na to patch.
M9
Chyba wiem po co to zależność: jersey-media-moxy. W standardzie jest JAXB. Z ciekawości, dlaczego Moxy? Klient to jasna sprawa.
EvilOne
irytujące, że nawet najprostsza funkcjonalność, przy tworzeniu Connection pool nie działa: http://stackoverflow.com/a/33066856. Tutaj nawet w odpowiedzi radzą zastanowić się nad wspomnianą przez Ciebie alternatywą (i sam się teraz zaczynam zastanawiać).
EvilOne
druga sprawa to właśnie jersey-media-moxy. Dodałem ją dla obsługi formatu Json. Oczywiście w wersji 4.1.1 nie działa.
SP
  • Rejestracja:ponad 9 lat
  • Ostatnio:ponad 2 lata
  • Postów:127
1

Web Profile to wykastrowany Full Profile, więc jak nie macie powodu to używajcie drugiego. Poza tym w JEE7 JAX-RS jest w Web Profile, więc nie potrzeba dodatkowych zależności

bajos
@student pro, myślałem, że jest odwrotnie. Na stronie Oracle w pobieraniu z opisu Web Profile miało coś więcej. Co? Nie pisało, oprócz tego "Web Profile", więc w ciemno to wybrałem. Teraz sobie wpisałem coś w stylu "glassfish web profile" w G i zobaczyłem Full Profile vs. Web Profile, ale trochę za późno :D. Pobiorę wersję Full Profile.
bajos
  • Rejestracja:prawie 12 lat
  • Ostatnio:ponad rok
  • Lokalizacja:UwUdź
  • Postów:267
0

Pany, pobrałem najnowszego Tomcata, skonfigurowałem IntelliJ do współpracy z kotkiem i deploy się udał. Nie wiem co będzie dalej, jak zajdzie potrzeba DżejBossa albo Glassfisha itp., ale to wtedy się pomyśli.

PS. Co lepsze działa testowy serwis RESTfulowy wyświetlający legendarne "Hello world" od zapytania GET :D
PS2. Nie działa tylko welcome-file którego ścieżka welcome-file jest podana jako index.jsp i znajduje się w {root}/src/main/resources/index.jsp, a w archiwum war w głównym katalogu po otwarciu archiwum?


128 postów [25.06.2015r. 21:03]
edytowany 3x, ostatnio: bajos
bajos
PS. Ogólnie to czytam kursy na www.kobietydokodu.pl (troche xD), a tam jadą na Tomcat'cie.
EvilOne
  • Rejestracja:prawie 14 lat
  • Ostatnio:19 dni
  • Postów:78
1

jak deploy się udał to dobrze. Jeśli już chodzi o samą naukę tworzenia RESTfulowego API z JAX-RS to na początek bardzo polecam Ci ten kurs: https://javabrains.io/courses/javaee_jaxrs

Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)