Skip to main content

[TOMCAT]How to set external path to app root

Testing environment is following:
  • Windows XP Professional ServicePack 2
  • Tomcat 6.0.32
  • Java 6.0 (JDK 1.6.0.24)
Directory Structure of Tomcat (Version 6.x above)
I wanted my tomcat project to be located in different directory from sub of webapp folder. Above Tomcat 6, Tomcat has a config fiile for the application. See the Tomcat_Installed_Dir\conf\Catalina\Host_Name (ex. c:\tomcat\Catalina\localhost) directory and then you can find configuraion files XMF format. If the application name is "faces" then tomcat directories will look like following:

tomcat_installed_dir
  - bin
  - conf
     - Catalina
        - localhost
           - faces.xml
  - logs
  - temp
  - webapps
     - faces
        - WEB-INF
           - classes
           - lib
     - ROOT
    - work

Configuration XML file for application context
Create tomcat_installed_dir/conf/Catalina/localhost/faces.xml (same name with application) and edit the file like following. The docBase attribute means the directory for your project and workDir is the one that Web containor generates compiled JSP pages.

<Context path="/faces" reloadable="true"
docBase="D:\Projects\JSF\faces"
workDir="D:\Projects\JSF\faces\work" />

Now shutdown and restart tomcat. Create index.jsp and go to http://localhost:8080/, then you can see index.jsp on your Web browser.

Tomcat Plug-in for Eclipse
If you are Eclipse user then, it will be helful to install tomcat plug-in. Please go to http://www.eclipsetotale.com/tomcatPlugin.html#A3 to download it. (If the link does not work, please ask to Google.)

Comments

Popular posts from this blog

Apply Kotlin DataBinding to Android Studio Generated Main Activity

I posted how to setup Kotlin and DataBinding in Android Stuido in the last blog (http://marksunghunpark.blogspot.com.au/2017/04/kotlin-binding-library-setup-in-android.html). In this post, I am going to how to use DataBiding in the MainActivity when you create a navigation drawer project from Android Studio templates. Layouts You will have four layouts in app/src/res/layout folder: app/src/main/res/layout/activity_main.xml app/src/main/res/layout/app_bar_main.xml app/src/main/res/layout/content_main.xml app/src/main/res/layout/nav_header_main.xml And activity_main.xml contains all other layout using include layout. You need to have tag in activity_main.xml , app_bar_main.xml and content_main.xml . If you don't have the tag, Binding library cannot recognise the sub layouts properly. Binding library doesn't support toolbar and navigation drawer yet, so you can use using BindingAdapter if you want to use binding library.(But I'm gong to skip this part for simplici...

How to test AsyncTask in Android

In Android, test is not as easy as any other platform. Because Android test cannot be run without emulator. Particulary when it comes to AsyncTask or Service, it is difficult to test because they are different type of thread and hard to check their result. Then, how can we ensure the result of AsyncTask valid? AsyncTask is a thread and an asynchnorous as the name means. So, we need to wait for it finishes its job and need to capture the event. Then, when it happens in AsyncTask. It can be one of onBackground() and onPostExecute() methods. It doesn't matter you use onBackground() or onPostExecute() but I prefer onPostExecute(). Anyway, we can test an AsyncTask if we can hook it. Then, how can we hook it? For that, we can use callback pattern. But we need to delay main thread to wait for the AsyncTask's job done because we want to check the result. So the structure for the test would be like: 1. Create AsyncTask A 2. Injection a callback into A 3. Wait until A finish 4....

How to setup Kotlin in Android Studio

Brief about Kotlin What I am impressed in Kotlin is Android Extensions. It enables you to remove boiler plate code of setting views. You have bind your view object by calling findViewbyId() but Kotlin supports it just importing kotlinx.android.synthetic. .* package. Let's have a look at an example: res/layout/login.xml LoginActivity.kt package com.ispark.kotlin.login import kotlinx.android.synthetic.login.* import android.os.Bundle import android.support.v7.app.AppCompatActivity import android.text.TextUtils import android.util.Log import android.widget.TextView import android.widget.Toast import com.ispark.kotlin.R import kotlin.String public class LoginActivity : AppCompatActivity() { private val LOG_TAG: kotlin.String = "LoginActivity" override fun onCreate(savedInstanceState : Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.login) setTitle(R.string.pleaseSignIn) log...