iT邦幫忙

0

jstl 沒辦法使用 ? ?

請教前輩問題出在哪,小弟我趁休假時上網爬文想了兩天,改的改,但仍運行不出來,懇請前輩指出盲點所在。

<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<html>

<head>
<title>Duke's Soccer League: Add a New League</title>
</head>

<body bgcolor='white'>
<!-- ${pageContext.request.contextPath}/AddLeague -->
<!-- <c:url value="/AddLeague"/> -->

	<form action='<c:url value="/AddLeague"/>' method='POST'>
		
		Year: <input type='text' name='year' /> <br /> <br /> 
		Season: 
		<select	name='season'>
			<option value='UNKNOWN'>select...</option>
			<option value='Spring'>Spring</option>
			<option value='Summer'>Summer</option>
			<option value='Fall'>Fall</option>
			<option value='Winter'>Winter</option>
		</select> <br /> <br /> 
		Title: <input type='text' name='title' /> <br /> <br />
		<input type='submit' value='Add League' />
	</form>

</body>
</html>
package course.c04;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/AddLeague")
public class AddLeague extends HttpServlet {
	private static final long serialVersionUID = 1L;

	protected void doGet(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		response.setContentType("text/html;charset=UTF-8");
		request.setCharacterEncoding("UTF-8");
		String season = request.getParameter("season");
		String title = request.getParameter("title");
		String year = request.getParameter("year");
		response.getWriter()
			.append("Season: " + season + ", Title: " + title + ", Year: " + year);
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {
		doGet(request, response);
	}

}

taglibs-standard-impl-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
以上是我的程式碼跟島包
執行jsp出現的例外狀況
javax.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:338)
javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)

1.我用了不同來源的jar包(如tomcat裡面的,網友提供的連結),結果是一樣的
2.我亂猜classpath沒設定好,多設定以下內容,但結果相同
    a.%CATALINA_HOME%\lib\*
    b.%CATALINA_HOME%\lib\servlet-api.jar
3.用cmd 直接編譯 AddLeague.java -> javax相關的檔案都不存在,可是用eclipse運行不會出錯,只有jsp不行。

1 個回答

0
Darwin Watterson
iT邦研究生 4 級 ‧ 2019-11-19 19:56:30
最佳解答

如果是用 Eclipse 開發的話, 先檢查看看是不是
Dynamic Web Project專案 !
是的話, 再檢查看看 Java Build Path 的 Libaray 是否有導入 tomcat
https://ithelp.ithome.com.tw/upload/images/20191119/20109107iCJ3DnNTf6.jpg
你漏的那些理論上導入tomcat包就能找到了 !
/images/emoticon/emoticon19.gif

原則上, JSP 需透過 tomcat 轉譯成 Servlet 給 JVM
所以如果執意要用 cmd java 方式執行網頁, 建議直接寫 Servlet
細節可參考 :
良葛格語言技術:Servlet/JSP Gossip

或者改用 intlliJ community + Springboot 來開發網站 (內嵌tomcat) /images/emoticon/emoticon12.gif

qs2366 iT邦新手 5 級 ‧ 2019-11-19 21:03:45 檢舉

非常感謝你的回答/images/emoticon/emoticon02.gif
1.cmd只是不知道還有什麼方法可以測試,亂槍打鳥看可不可以發現新大陸
2.eclipse、tomcat與java全部刪掉重新下載(這次學乖了不要自己指定檔案位置),也不知道為什麼就可以運行
3.jar包等配置與刪掉重灌前後並無二異,所以我猜想可能是後台讀取路徑的差異?差異在於,重設後,預設路徑都是在C:\Program Files下面,但先前我把它們分開?
4.我console顯示少的包,tomcat裡面有,這網路上有提供方法:把tomcat中少的jar檔複製到jdk\lib下面就可以運行,實際運行結果仍失敗
/images/emoticon/emoticon06.gif
說實在,我現在頭腦一片混亂,反正現在是可以運行了(應該吧),為什麼可以,仍然是個謎 @@,如果前輩有什麼頭緒,也請別吝嗇告訴小弟

快點擊 良葛格語言技術:Servlet/JSP Gossip 我貼給你的連結了解
/images/emoticon/emoticon12.gif

我要發表回答

立即登入回答