<?xml version="1.0" encoding="UTF-8"?>
<feed version="0.3" xmlns="http://purl.org/atom/ns#" xml:lang="en-US">
	<title>Angel's Blog</title>
	<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php" />
	<modified>2026-05-27T15:39:08Z</modified>
	<author>
		<name>Angel</name>
	</author>
	<copyright>Copyright 2026, Angel</copyright>
	<generator url="http://www.sourceforge.net/projects/sphpblog" version="0.7.0">SPHPBLOG</generator>
	<entry>
		<title>JAVA: Initializing Spring Boot Application</title>
		<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php?entry=entry250602-032204" />
		<content type="text/html" mode="escaped"><![CDATA[<pre>angelcool@lolcahost:~/code-learning/Java/spring-boot$ date<br />Sun Jun  1 12:30:32 PM PDT 2025<br />angelcool@lolcahost:~/code-learning/Java/spring-boot$ pwd<br />/home/angelcool/code-learning/Java/spring-boot<br /><br /># INITIALIZE APPLICATION<br />angelcool@lolcahost:~/code-learning/Java/spring-boot$ spring init -a my-demo -l java --build maven -x my-demo<br />Using service at <a href="https://start.spring.io" >https://start.spring.io</a><br />Project extracted to &#039;/home/angelcool/code-learning/Java/spring-boot/my-demo&#039;<br />angelcool@lolcahost:~/code-learning/Java/spring-boot$<br /><br /># INSTALL MAVEN<br />angelcool@localhost:~/code-learning/Java/spring-boot/my-demo$ sudo dnf install maven<br />...<br />angelcool@localhost:~/code-learning/Java/spring-boot/my-demo$ mvn --version<br />Apache Maven 3.9.6 (Red Hat 3.9.6-7)<br />...<br /><br /># RUN APPLICATION, NOTE: I think I had to update the artifactId in pom.xml to &#039;spring-boot-starter-web&#039;<br />angelcool@localhost:~/code-learning/Java/spring-boot/my-demo$ mvn spring-boot:run<br />...<br /><br /># MAKE REQUEST<br />angelcool@localhost:~/code-learning/Java/spring-boot/my-demo$ http  <a href="http://localhost:8080/coffees" >http://localhost:8080/coffees</a><br />HTTP/1.1 200 <br />Connection: keep-alive<br />Content-Type: application/json<br />Date: Mon, 02 Jun 2025 03:13:46 GMT<br />Keep-Alive: timeout=60<br />Transfer-Encoding: chunked<br /><br />[<br />    {<br />        &quot;id&quot;: &quot;3d1256a7-c5c8-4a9b-9ef3-60da3107b06b&quot;,<br />        &quot;name&quot;: &quot;Black&quot;<br />    },<br />    {<br />        &quot;id&quot;: &quot;7fc475b2-7c39-4412-baeb-6ac01f46128c&quot;,<br />        &quot;name&quot;: &quot;French Vanilla&quot;<br />    },<br />    {<br />        &quot;id&quot;: &quot;690c16af-3931-4dbd-b573-a9d8c86e0a3c&quot;,<br />        &quot;name&quot;: &quot;Hazelnut&quot;<br />    }<br />]<br /><br /># SOURCE CODE<br />angelcool@localhost:~/code-learning/Java/spring-boot/my-demo$ cat src/main/java/com/example/my_demo/DemoApplication.java <br />package com.example.my_demo;<br /><br />import org.springframework.boot.SpringApplication;<br />import org.springframework.boot.autoconfigure.SpringBootApplication;<br />// import org.springframework.stereotype.Controller;<br />import org.springframework.web.bind.annotation.RequestMapping;<br />// import org.springframework.web.bind.annotation.ResponseBody;<br />import org.springframework.web.bind.annotation.RestController;<br />// import org.springframework.ui.Model;<br />import java.util.ArrayList;<br />import java.util.List;<br />import org.springframework.web.bind.annotation.RequestMethod;<br />import java.util.UUID;<br /><br />@SpringBootApplication<br />public class DemoApplication {<br /><br />	public static void main(String[] args) {<br />		SpringApplication.run(DemoApplication.class, args);<br />	}<br />}<br /><br />class Coffee {<br />	private final String id;<br />	private String name;<br /><br />	public Coffee(String id, String name) {<br />		this.id = id;<br />		this.name = name;<br />	}<br /><br />	public Coffee (String name) {<br />		this(UUID.randomUUID().toString(),name);<br />	}<br /><br />	public String getId(){<br />		return this.id;<br />	}<br /><br />	public String getName(){<br />		return this.name;<br />	}<br /><br />	public void setName(String name){<br />		this.name = name;<br />	}<br />}<br /><br />@RestController<br />class RestApiController{<br />	private List&lt;Coffee&gt; coffees = new ArrayList&lt;&gt;();<br /><br />	public RestApiController(){<br />		this.coffees.addAll(List.of(<br />			new Coffee(&quot;Black&quot;),<br />			new Coffee(&quot;French Vanilla&quot;),<br />			new Coffee(&quot;Hazelnut&quot;)<br />		));<br />	}<br /><br />	@RequestMapping(value = &quot;/coffees&quot;, method = RequestMethod.GET)<br />	Iterable&lt;Coffee&gt; getCoffees() {<br />		return this.coffees;<br />	}<br />}<br /></pre>]]></content>
		<id>https://angelcool.net/sphpblog/blog_index.php?entry=entry250602-032204</id>
		<issued>2025-06-02T00:00:00Z</issued>
		<modified>2025-06-02T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Java: Installing Spring Boot CLI</title>
		<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php?entry=entry250601-000603" />
		<content type="text/html" mode="escaped"><![CDATA[<pre>angelcool@localhost:~$<br />angelcool@localhost:~$ date<br />Sat May 31 04:57:16 PM PDT 2025<br />angelcool@localhost:~$ cat /etc/redhat-release <br />Fedora release 41 (Forty One)<br />angelcool@localhost:~$ <br /># INSTALL SDKMAN<br />angelcool@localhost:~$ curl -s &quot;https://get.sdkman.io&quot; | bash<br />...<br /># CHECK SDKMAN VERSION<br />angelcool@localhost:~$ sdk version<br /><br />SDKMAN!<br />script: 5.19.0<br />native: 0.7.4 (linux x86_64)<br /><br /># INSTALL SPRING BOOT CLI<br />angelcool@localhost:~$ sdk install springboot<br />...<br /># CHECK SPRING BOOT CLI VERSION<br />angelcool@localhost:~$ spring --version<br />Spring CLI v3.5.0<br />angelcool@localhost:~$<br />angelcool@localhost:~$<br /></pre>]]></content>
		<id>https://angelcool.net/sphpblog/blog_index.php?entry=entry250601-000603</id>
		<issued>2025-06-01T00:00:00Z</issued>
		<modified>2025-06-01T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Java: My First Servlet</title>
		<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php?entry=entry241124-015310" />
		<content type="text/html" mode="escaped"><![CDATA[<pre>angelcool@fedora-laptop$date<br />Sat Nov 23 05:57:16 PM PST 2024<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$java --version<br />openjdk 17.0.13 2024-10-15<br />OpenJDK Runtime Environment (Red_Hat-17.0.13.0.11-1) (build 17.0.13+11)<br />OpenJDK 64-Bit Server VM (Red_Hat-17.0.13.0.11-1) (build 17.0.13+11, mixed mode, sharing)<br />angelcool@fedora-laptop$jar --version<br />jar 17.0.13<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$pwd<br />/home/angelcool/java-practice/HelloWorldServlet<br />angelcool@fedora-laptop$tree<br />.<br />├── deploy<br />│   └── helloworld.war<br />├── Notes.txt<br />├── src<br />│   ├── HelloWorld.class<br />│   └── HelloWorld.java<br />└── web<br />    └── WEB-INF<br />        ├── classes<br />        │   └── com<br />        │       └── coolwriter<br />        │           └── helloworld<br />        │               └── HelloWorld.class<br />        └── web.xml<br /><br />9 directories, 6 files<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$cat Notes.txt <br /># Compile java class, this will create HelloWorld.class<br />angelcool@fedora-laptop$javac --class-path /usr/share/tomcat/lib/tomcat-servlet-api.jar src/HelloWorld.java<br /><br /># Copy compiled .class file to WEB-INF <br />angelcool@fedora-laptop$cp src/HelloWorld.class web/WEB-INF/classes/com/coolwriter/helloworld/<br /><br /># Create WAR file<br />angelcool@fedora-laptop$jar cvf deploy/helloworld.war -C web .<br /><br /># Move WAR file to Tomcat webapps directory<br />angelcool@fedora-laptop$sudo  cp deploy/helloworld.war /usr/share/tomcat/webapps/<br /><br /># Reload servlet in /manager page ( or restart Tomcat I think )<br /><br /># Access servlet: <a href="http://localhost:8080/helloworld/Hello" >http://localhost:8080/helloworld/Hello</a><br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$cat web/WEB-INF/web.xml <br />&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;<br />&lt;web-app version=&quot;4.0&quot; xmlns=&quot;http://xmlns.jcp.org/xml/ns/javaee&quot;<br />   xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;<br />   xsi:schemaLocation=&quot;http://xmlns.jcp.org/xml/ns/javaee <br />   <a href="http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd&quot;&gt;" >http://xmlns.jcp.org/xml/ns/javaee/web- ... &quot;&gt;</a><br /><br />  &lt;display-name&gt;Hello World!&lt;/display-name&gt;<br /><br />  &lt;servlet&gt;<br />    &lt;servlet-name&gt;helloworld&lt;/servlet-name&gt;<br />    &lt;servlet-class&gt;com.coolwriter.helloworld.HelloWorld&lt;/servlet-class&gt;<br />  &lt;/servlet&gt;<br /><br />  &lt;servlet-mapping&gt;<br />    &lt;servlet-name&gt;helloworld&lt;/servlet-name&gt;<br />    &lt;url-pattern&gt;/Hello&lt;/url-pattern&gt;<br />  &lt;/servlet-mapping&gt;<br /><br />&lt;/web-app&gt;<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$cat src/HelloWorld.java <br />package com.coolwriter.helloworld;<br /><br />import java.io.*;<br />import javax.servlet.*;<br />import javax.servlet.http.*;<br />import java.util.*;<br /><br />public class HelloWorld extends HttpServlet<br />{<br />    public void doGet(HttpServletRequest request, HttpServletResponse response)<br />        throws IOException, ServletException<br />    {<br />        response.setContentType(&quot;text/html&quot;);<br /><br />        PrintWriter out = response.getWriter();<br />        <br />        String msg = this.getGreeting();<br /><br />        out.println(msg);<br />    }<br /><br />    private String getGreeting()<br />    {<br />        String msg = null;<br /><br />        int rand = (int) (Math.random() * (6)) +1;<br /><br />        switch (rand) {<br />        case 1:<br />            msg = &quot;Hello There!&quot;;<br />            break;<br />        case 2:<br />            msg = &quot;Hello Friend!&quot;;<br />            break;<br />        case 3:<br />            msg = &quot;Hello Stranger!&quot;;<br />            break;<br />        case 4:<br />            msg = &quot;Hello! My name is Angel!&quot;;<br />            break;<br />        default:<br />            msg = &quot;Hello World!&quot;;<br />        }<br /><br />        return msg;<br />    }<br />}<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$<br /></pre>]]></content>
		<id>https://angelcool.net/sphpblog/blog_index.php?entry=entry241124-015310</id>
		<issued>2024-11-24T00:00:00Z</issued>
		<modified>2024-11-24T00:00:00Z</modified>
	</entry>
	<entry>
		<title>Java: Installing Tomcat in Fedora 39</title>
		<link rel="alternate" type="text/html" href="https://angelcool.net/sphpblog/blog_index.php?entry=entry241123-202018" />
		<content type="text/html" mode="escaped"><![CDATA[<pre>angelcool@fedora-laptop$date<br />Sat Nov 23 12:00:14 PM PST 2024<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$cat /etc/redhat-release <br />Fedora release 39 (Thirty Nine)<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$dnf info tomcat<br />Last metadata expiration check: 0:42:59 ago on Sat 23 Nov 2024 11:18:54 AM PST.<br />Installed Packages<br />Name         : tomcat<br />Epoch        : 1<br />Version      : 9.0.96<br />Release      : 1.fc39<br />Architecture : noarch<br />Size         : 323 k<br />Source       : tomcat-9.0.96-1.fc39.src.rpm<br />Repository   : @System<br />From repo    : updates<br />Summary      : Apache Servlet/JSP Engine, RI for Servlet 4.0/JSP 2.3 API<br />URL          : <a href="http://tomcat.apache.org/" >http://tomcat.apache.org/</a><br />License      : ASL 2.0<br />Description  : Tomcat is the servlet container that is used in the official Reference<br />             : Implementation for the Java Servlet and JavaServer Pages technologies.<br />             : The Java Servlet and JavaServer Pages specifications are developed by<br />             : Sun under the Java Community Process.<br />             : <br />             : Tomcat is developed in an open and participatory environment and<br />             : released under the Apache Software License version 2.0. Tomcat is intended<br />             : to be a collaboration of the best-of-breed developers from around the world.<br /><br />angelcool@fedora-laptop$<br />angelcool@fedora-laptop$sudo dnf install tomcat<br />...<br />angelcool@fedora-laptop$sudo dnf install tomcat-admin-webapps<br />...<br />angelcool@fedora-laptop$sudo dnf install tomcat-docs-webapp<br />...<br />angelcool@fedora-laptop$sudo systemctl start tomcat.service<br />...</pre><br /><br />Enable admin user, uncomment the following in /etc/tomcat/tomcat-users.xml<br /><pre>&lt;role rolename=&quot;admin&quot;/&gt;<br />&lt;role rolename=&quot;admin-gui&quot;/&gt;<br />&lt;role rolename=&quot;admin-script&quot;/&gt;<br />&lt;role rolename=&quot;manager&quot;/&gt;<br />&lt;role rolename=&quot;manager-gui&quot;/&gt;<br />&lt;role rolename=&quot;manager-script&quot;/&gt;<br />&lt;role rolename=&quot;manager-jmx&quot;/&gt;<br />&lt;role rolename=&quot;manager-status&quot;/&gt;<br />&lt;user name=&quot;admin&quot; password=&quot;admin&quot; roles=&quot;admin,manager,admin-gui,admin-script,manager-gui,manager-script,manager-jmx,manager-status&quot; /&gt;</pre><br /><br />Restart server and go to: <a href="http://localhost:8080/manager/html" >http://localhost:8080/manager/html</a><br /><br />For reference:<br /><pre>angelcool@fedora-laptop$<br />angelcool@fedora-laptop$tree /usr/share/tomcat/webapps/<br />/usr/share/tomcat/webapps/<br />├── host-manager<br />│   ├── css<br />│   │   └── manager.css<br />│   ├── images<br />│   │   ├── asf-logo.svg<br />│   │   └── tomcat.svg<br />│   ├── index.jsp<br />│   ├── META-INF<br />│   │   └── context.xml<br />│   └── WEB-INF<br />│       ├── jsp<br />│       │   ├── 401.jsp<br />│       │   ├── 403.jsp<br />│       │   └── 404.jsp<br />│       ├── manager.xml<br />│       └── web.xml<br />└── manager<br />    ├── css<br />    │   └── manager.css<br />    ├── images<br />    │   ├── asf-logo.svg<br />    │   └── tomcat.svg<br />    ├── index.jsp<br />    ├── META-INF<br />    │   └── context.xml<br />    ├── status.xsd<br />    ├── WEB-INF<br />    │   ├── jsp<br />    │   │   ├── 401.jsp<br />    │   │   ├── 403.jsp<br />    │   │   ├── 404.jsp<br />    │   │   ├── connectorCerts.jsp<br />    │   │   ├── connectorCiphers.jsp<br />    │   │   ├── connectorTrustedCerts.jsp<br />    │   │   ├── sessionDetail.jsp<br />    │   │   └── sessionsList.jsp<br />    │   └── web.xml<br />    └── xform.xsl<br /><br />13 directories, 26 files<br />angelcool@fedora-laptop$</pre>]]></content>
		<id>https://angelcool.net/sphpblog/blog_index.php?entry=entry241123-202018</id>
		<issued>2024-11-23T00:00:00Z</issued>
		<modified>2024-11-23T00:00:00Z</modified>
	</entry>
</feed>
