Я думаю, что мой Apache Tomcat не может найти web.xml в стойках 1.3 - PullRequest
0 голосов
/ 02 августа 2011

Я новичок в Struts и начинаю со Struts 1.3, Apache Tomcat 7 и jdk 1.6.

Это мой простой JSP-файл login.jsp:

<%@page import="org.apache.struts.faces.util.StrutsContext"%>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<%@ page import="java.util.*" %>
<%@ page import="org.apache.struts.action.ActionForm" %>
<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %> 
<html:form action="/login.do" focus="username">
<table>
<tr>
<th align="right">Username:</th>
<td align="left"><html:text property="username" maxlength="12"/></td>
</tr>
</table>
<html:submit/>
</html:form>

это мой веб.xml:

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app 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_3_0.xsd"
version="3.0"
metadata-complete="true">  

<display-name>Welcome to Tomcat</display-name>
<description>
  Welcome to Tomcat
</description>
     <servlet>
         <servlet-name>TRS</servlet-name>
         <servlet-class>org.apache.struts.action.ActionServlet</servlet-class>
         <init-param>
                    <param-name>config</param-name>
                    <param-value>/WEB-INF/struts-config.xml</param-value>
            </init-param>
            <load-on-startup>2</load-on-startup>
    </servlet>

      <servlet-mapping>
            <servlet-name>TRS</servlet-name>
            <url-pattern>*.do</url-pattern>
    </servlet-mapping>


<jsp-config>
<taglib>
   <taglib-uri>/WEB-INF/struts-html.tld</taglib-uri>
   <taglib-location>/WEB-INF/struts-html.tld</taglib-location>
</taglib>
</jsp-config>
<!-- Struts Tag Library Descriptors -->
</web-app>

После запуска tomcat и запуска файла jsp я получаю эту ошибку:

org.apache.jasper.JasperException: /test/WebContent/index.jsp (line: 8, column: 56) File "/WEB-INF/struts-html.tld" not found
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:407)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:132)
org.apache.jasper.compiler.TagLibraryInfoImpl.<init>(TagLibraryInfoImpl.java:166)
org.apache.jasper.compiler.Parser.parseTaglibDirective(Parser.java:410)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:475)
org.apache.jasper.compiler.Parser.parseElements(Parser.java:1425)
org.apache.jasper.compiler.Parser.parse(Parser.java:138)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:242)
org.apache.jasper.compiler.ParserController.parse(ParserController.java:102)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:198)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:373)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:353)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:340)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:644)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:358)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:389)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:333)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

Я определил struts-html.tld в web.xml, но эта ошибка говориткоторый не может найти этот файл TLD.Я уже поместил * .tld, .jar, .xml и * .jsp в правильное местоположение.

Файл TLD в WEB-INF, файл XML в WEB-INF, файл JARв WEB-INF / lib,

Я очень ценю, если кто-нибудь мне поможет с этим.

1 Ответ

0 голосов
/ 02 августа 2011

Я не совсем уверен, поможет ли это вам, но мои страницы jsp используют

<%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

вместо

<%@ taglib uri="/WEB-INF/struts-html.tld" prefix="html" %>

Я работаю на Tomcat 6 и мне не нужно настраивать мои taglibs в web.xml, если я помещаю их в /META-INF/my.tld и ссылаюсь на них в моем jsps с

<%@ taglib uri="/META-INF/my.tld" prefix="my"%>

Надеюсь, это поможет вам ...

* редактировать *

Чтобы решить «java.lang.NullPointerException: модуль« null »не найден». проблема вставить этот фрагмент в ваш раздел "action-mappings" в struts-config.xml

    <action path="/login" type="my.app.web.LoginAction" validate="false" name="loginForm">
        <forward name="SUCCESS" path="/login.jsp" />
    </action>

и этот в ваш раздел "form-beans":

<form-bean name="loginForm" type="my.app.web.LoginForm" />

Затем создайте действие распорок, подобное этому (LoginAction.java):

package my.app.web;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

public class LoginAction extends BaseAction {

    @Override
    protected ActionForward run(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
                LoginForm loginForm = (LoginForm) form;
        return mapping.findForward("SUCCESS");
    }
}

Кроме того, вам нужна форма ввода (LoginForm.java):

package my.app.web;

import org.apache.struts.validator.ValidatorForm;

public class LoginForm extends ValidatorForm {

    private Integer username;

    public Integer getUsername() {
        return username;
    }

    public void setUsername(Integer username) {
        this.username = username;
    }
}

Откройте страницу входа в браузере, набрав http://localhost:8080/myApp/login.do

...