
イタリックテキスト### 前提・実現したいこと
ここに質問の内容を詳しく書いてください。
MVCモデルでフォームに入力した文字(ひらがな、カタカナ)をローマ字に
変換したい。
Javaの文字変換ライブラリICU4JのjarファイルをHPからダウンロードし、
プロジェクトに読み込んで、ライブラリの変換を実装中に以下のエラーメッセージが発生しました。
非常に初歩的な問題で申し訳ないのですがご指導いただければ嬉しいです。
よろしくお願い致します。
発生している問題・エラーメッセージ
タイプ 例外報告 メッセージ サーブレットの実行により例外を投げました 説明 サーバーは予期しない条件に遭遇しました。それはリクエストの実行を妨げます。 例外 javax.servlet.ServletException: サーブレットの実行により例外を投げました org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因 java.lang.NoClassDefFoundError: com/ibm/icu/text/Transliterator servlet.KensakuGamen.doPost(KensakuGamen.java:53) javax.servlet.http.HttpServlet.service(HttpServlet.java:660) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 根本原因 java.lang.ClassNotFoundException: com.ibm.icu.text.Transliterator org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) servlet.KensakuGamen.doPost(KensakuGamen.java:53) javax.servlet.http.HttpServlet.service(HttpServlet.java:660) javax.servlet.http.HttpServlet.service(HttpServlet.java:741) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 注意 原因のすべてのスタックトレースは、サーバのログに記録されています
該当のソースコード
java
1package model; 2 3import com.ibm.icu.text.Transliterator; 4 5public class Henkan { 6 public static void henkan(String word) { 7 8 //リクエストパラメーターwordをローマ字に変換 9 10 String before; 11 String result; 12 Transliterator trans; 13 14 trans = Transliterator.getInstance("Hiragana-Latin"); 15 before = word; 16 result = trans.transliterate(before); 17 System.out.println(before + " → " + result); 18 19} 20 21 22 // TODO 自動生成されたメソッド・スタブ 23 24 } 25 26 27 28 29
servlet
1 2package servlet; 3 4import java.io.IOException; 5import java.io.PrintWriter; 6import java.util.regex.Matcher; 7import java.util.regex.Pattern; 8 9import javax.servlet.ServletException; 10import javax.servlet.annotation.WebServlet; 11import javax.servlet.http.HttpServlet; 12import javax.servlet.http.HttpServletRequest; 13import javax.servlet.http.HttpServletResponse; 14import javax.servlet.http.HttpSession; 15 16import com.ibm.icu.text.Transliterator; 17 18/** 19 * Servlet implementation class KensakuGamen 20 */ 21@WebServlet("/KensakuGamen") 22public class KensakuGamen extends HttpServlet { 23 24 private static final long serialVersionUID = 1L; 25 26 protected void doPost(HttpServletRequest request, HttpServletResponse response) 27 throws ServletException, IOException { 28 29 //リクエストパラメーターを取得 30 request.setCharacterEncoding("UTF-8"); 31 String word = request.getParameter("word"); 32 33 // 正規表現のパターンを作成 34 35 Pattern p = Pattern.compile("[あ-ン]");//正規表現の範囲を設定[あ-ん]と[ア-ン]を合成 36 Matcher m = p.matcher(word); 37 38 //リクエストパラメーターがnullでないかつ正規表現であるかのチェック 39 40 String errorMsg = ""; 41 if (word == null || word.length() == 0) { 42 errorMsg += "単語が入力されていません<br>"; 43 } 44 else if (m.find() == false) { 45 errorMsg += "ひらがな、カタカナ以外が入力されています<br>"; 46 System.out.println(m.find()); 47 } 48 49 50 51 //リクエストパラメーターwordをローマ字に変換 52 53 //HttpSession session=request.getSession();//セッションスコープを用意 54 //session.setAttribute("String", result);//セッションスコープに保存 55 //Henkan.henkan(word); 56 //Henkan h=new Henkan();//henkanクラスのインスタンスを生成 57 //h.henkan(word);//henkanクラスのメソッドを利用 58 59 60 61 62 //表示するメッセージを設定 63 String msg = word+"("+result+")" + "で検索を開始します"; 64 if (errorMsg.length() != 0) { 65 msg = errorMsg; 66 } 67 68 //HTMLを出力 69 70 response.setContentType("text/html; charset=UTF-8"); 71 PrintWriter out = response.getWriter(); 72 73 out.println("<!DOCTYPE html>"); 74 out.println("<html>"); 75 out.println("<head>"); 76 out.println("<meta charset=\"UTF-8\">"); 77 out.println("<title>ワード検索画面</title>"); 78 out.println("</head>"); 79 out.println("<body>"); 80 out.println("<p>" + msg + "</p>"); 81 out.println("</body>"); 82 out.println("</html>"); 83 } 84} 85 86 87
jsp
1 2<%@ page language="java" contentType="text/html; charset=UTF-8" 3 pageEncoding="UTF-8"%> 4<!DOCTYPE html> 5<html> 6<head> 7<meta charset="UTF-8"> 8<title>ワード検索機能</title> 9</head> 10<body> 11<form action="/word/KensakuGamen" method="post"> 12検索したい言葉:<br> 13<input type="text" name="word"><br> 14 15<input type="submit" value="検索"> 16</form> 17 18</body> 19</html> 20
試したこと
Henkan.henkan(word);でHenkanクラスのメソッド呼び出し⇒NG
Henkan h=new Henkan();⇒Henkanクラスのインスタンスを作りメソッド呼び出し⇒NG
h.henkan(word);
HttpSession session=request.getSession();⇒セッションスコープを用意して利用NG
session.setAttribute("String", result);
補足情報(FW/ツールのバージョンなど)
ICU4Jのバージョンは65.1です
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/01/17 10:39