2013-08-02 3 views
1

Пытается создать приложение Struts2, которое направляет пользователя на страницу (Display.jsp), которая показывает цвет пользовательской конфигурации цвета RGB. Я приведу пример из учебника Struts2 от Budi Karniawan. Когда я вручную вырезаю и вставляю исходный код и создаю приложение вручную в качестве веб-приложения NB, он работает нормально, хотя параметры RGB вызывают ошибки проверки, несмотря на то, что они вводятся в правильном формате (я проверил, что я вводил с использованием номеров, разделенных запятыми, для RGB, т. Е. Зеленый - 0,255,0). Структура каталога:Struts2 Ошибка при запуске Netbeans 731

enter image description here

Тогда я решил импортировать файл проекта (создание веб-приложения из существующего параметра Sources). Я использовал файл ant build.xml для компиляции и запуска приложения.

При запуске приложения через имя приложения:

http://localhost:8084/Budi7c 

я получаю:

no Action mapped for namespace [/] 

Затем я добавляю имя действия отображенный в struts.xml

http://localhost:8084/Budi7c/Design1.action 

я получаю HTTP 404. Но приведенная выше ссылка Deisgn1.action работала, когда я пытался создать проект вручную. Может кто-нибудь, пожалуйста, скажите мне, как лучше правильно импортировать и запускать это приложение, учитывая следующие файлы? Я предпочел бы использовать скрипт ant и NOT MAVEN (так как, кажется, существует много проблем, связанных с Struts2 с использованием Maven). Я просто хотел бы знать способ избежать ошибки 404 при попытке запуска действий struts.

Если я попытаюсь создать приложение вручную, проверка ввода завершится неудачно (хотя я вводил числа и разделял их запятыми). Если я попытаюсь импортировать и использовать Ant для обеспечения правильной сборки, я получаю 404.

Приложение выглядит следующим образом:

web.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_2_5.xsd" 
    version="2.5"> 

    <filter> 
    <filter-name>struts2</filter-name> 
    <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>  
</filter> 
<filter-mapping> 
    <filter-name>struts2</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 



<!-- Restrict direct access to JSPs. 
For the security constraint to work, the auth-constraint 
and login-config elements must be present --> 
<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>JSPs</web-resource-name> 
     <url-pattern>/jsp/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint/> 
</security-constraint> 

<login-config> 
    <auth-method>BASIC</auth-method> 
</login-config> 
</web-app> 

struts.xml:

<?xml version="1.0" encoding="UTF-8" ?> 
<!DOCTYPE struts PUBLIC 
"-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 
"http://struts.apache.org/dtds/struts-2.0.dtd"> 

<struts> 

<constant name="struts.enable.DynamicMethodInvocation" value="false" /> 
<constant name="struts.devMode" value="true" /> 

<package name="app07c" extends="struts-default"> 
    <action name="Design1"> 
     <result>/jsp/Design.jsp</result> 
    </action> 
    <action name="Design2" class="app07c.Design"> 
     <result name="input">/jsp/Design.jsp</result> 
     <result name="success">/jsp/Display.jsp</result> 
    </action> 
</package> 

</struts> 

Color.java:

package app07c; 
import com.opensymphony.xwork2.ActionSupport; 

public class Color extends ActionSupport { 
private int red; 
private int green; 
private int blue; 
public int getBlue() { 
    return blue; 
} 
public void setBlue(int blue) { 
    this.blue = blue; 
} 
public int getGreen() { 
    return green; 
} 
public void setGreen(int green) { 
    this.green = green; 
} 
public int getRed() { 
    return red; 
} 
public void setRed(int red) { 
    this.red = red; 
} 
public String getHexCode() { 
    return (red < 16? "0" : "") 
      + Integer.toHexString(red) 
      + (green < 16? "0" : "") 
      + Integer.toHexString(green) 
      + (blue < 16? "0" : "") 
      + Integer.toHexString(blue); 
} 
} 

Design.java:

package app07c; 
import com.opensymphony.xwork2.ActionSupport; 

public class Design extends ActionSupport { 
private String designName; 
private Color color; 
public Color getColor() { 
    return color; 
} 
public void setColor(Color color) { 
    this.color = color; 
} 
public String getDesignName() { 
    return designName; 
} 
public void setDesignName(String designName) { 
    this.designName = designName; 
} 
} 

MyColorConverter.java:

package app07c.converter; 
import java.util.Map; 
import org.apache.struts2.util.StrutsTypeConverter; 
import app07c.Color; 
import com.opensymphony.xwork2.conversion.TypeConversionException; 

public class MyColorConverter extends StrutsTypeConverter { 
public Object convertFromString(Map context, String[] values, 
     Class toClass) { 
    boolean ok = false; 
    String rgb = values[0]; 
    String[] colorComponents = rgb.split(","); 
    if (colorComponents != null 
      && colorComponents.length == 3) { 
     String red = colorComponents[0]; 
     String green = colorComponents[1]; 
     String blue = colorComponents[2]; 
     int redCode = 0; 
     int greenCode = 0; 
     int blueCode = 0; 
     try { 
      redCode = Integer.parseInt(red.trim()); 
      greenCode = Integer.parseInt(green.trim()); 
      blueCode = Integer.parseInt(blue.trim()); 
      if (redCode >= 0 && redCode < 256 
        && greenCode >= 0 && greenCode < 256 
        && blueCode >= 0 && blueCode < 256) { 
       Color color = new Color(); 
       color.setRed(redCode); 
       color.setGreen(greenCode); 
       color.setBlue(blueCode); 
       ok = true; 
       return color; 
      } 
     } catch (NumberFormatException e) { 
     } 
    } 
    if (!ok) { 
     throw new 
       TypeConversionException("Invalid color codes"); 
    } 
    return null; 
} 

public String convertToString(Map context, Object o) { 
    Color color = (Color) o; 
    return color.getRed() + "," 
      + color.getGreen() + "," 
      + color.getBlue(); 
} 
} 

Design.jsp:

<%@ taglib prefix="s" uri="/struts-tags" %> 
<html> 
<head> 
<title>Color</title> 
<style type="text/css">@import url(css/main.css);</style> 
<style> 
.errorMessage { 
color:red; 
} 
</style> 
</head> 
<body> 
<div id="global" style="width:450px"> 
<h4>Color</h4> 
Please enter the RGB components, each of which is 
an integer between 0 and 255 (inclusive). Separate two components 
with a comma. For example, green is 0,255,0. 
<s:form action="Design2"> 
    <s:textfield name="designName" label="Design Name"/> 
    <s:textfield name="color" label="Color"/> 
    <s:submit/>  
</s:form> 

</div> 
</body> 
</html> 

Display.jsp:

<%@ taglib prefix="s" uri="/struts-tags" %> 
<html> 
<head> 
<title>Design Details</title> 
<style type="text/css">@import url(css/main.css);</style> 
<style type="text/css"> 
    .colorSample { 
border:1px solid black; 
width:100%; 
height:100px; 
background:#<s:property value="color.hexCode"/>; 
} 
</style> 
</head> 
<body> 
<div id="global" style="width:250px"> 
<h4>Design details:</h4> 
    Design name: <s:property value="designName"/> 
    <br/>Color code: <s:property value="color"/> 
    <div class="colorSample"/> 
    </div> 
    </body> 
    </html> 

Я попытался изменить веб-содержимое папки из /jsp в / так, что структура проекта является такой же, как и структура каталогов. Затем я использую скрипт сборки муравьев для компиляции и запуска проекта и получения следующего стека:

ant -f C:\\struts2\\budi_ebook\\struts2extractb\\app07c -DforceRedeploy=false  -Ddirectory.deployment.supported=true -Dnb.wait.for.caches=true run 
init: 
deps-module-jar: 
deps-ear-jar: 
deps-jar: 
Warning: Program Files (x86)\F-Secure\Anti-Virus\aquarius\fa.log modified in the future. 
Warning: Program Files\CommVault\Simpana\Log Files\CVD.log modified in the future. 
Warning: Users\ManaarDC\NTUSER.DAT modified in the future. 
Warning: Users\ManaarDC\ntuser.dat.LOG1 modified in the future. 
Warning: Users\RedGuard_Admin.MANAARNET\AppData\Local\Temp\3\output1375645810208 modified in  the future. 
Warning: Users\RedGuard_Admin.MANAARNET\AppData\Local\Temp\3\toolbar_log.txt modified in the  future. 
Warning: Windows\Temp\avg_secure_search.log modified in the future. 
Warning: app\ManaarDC\diag\rdbms\orcldw\orcldw\trace\orcldw_dbrm_3148.trc modified in the future. 
Warning: app\ManaarDC\diag\rdbms\orcldw\orcldw\trace\orcldw_dbrm_3148.trm modified in the future. 
Warning: app\ManaarDC\product\11.2.0\dbhome_1\D5H9RBP1.ManaarNet.com_orclDW\sysman\emd\agntstmp.txt modified in the future. 
Warning: app\ManaarDC\product\11.2.0\dbhome_1\D5H9RBP1.ManaarNet.com_orclDW\sysman\log\emagent.trc modified in the future. 
Warning: app\ManaarDC\product\11.2.0\dbhome_1\D5H9RBP1.ManaarNet.com_orclDW\sysman\log\emoms.log modified in the future. 
Warning: app\ManaarDC\product\11.2.0\dbhome_1\D5H9RBP1.ManaarNet.com_orclDW\sysman\log\emoms.trc modified in the future.  
Warning: app\ManaarDC\product\11.2.0\dbhome_1\oc4j\j2ee\OC4J_DBConsole_D5H9RBP1.ManaarNet.com_orclDW\log\em-application.log modified in the future. 
Warning: inetpub\logs\LogFiles\W3SVC1\u_ex130804.log modified in the future. 
C:\struts2\budi_ebook\struts2extractb\app07c\nbproject\build-impl.xml:841: 
java.lang.OutOfMemoryError: GC overhead limit exceeded 
at java.util.Arrays.copyOfRange(Arrays.java:2694) 
at java.lang.String.<init>(String.java:203) 
at java.lang.String.substring(String.java:1913) 
at java.util.StringTokenizer.nextToken(StringTokenizer.java:352) 
at org.apache.tools.ant.util.FileUtils.normalize(FileUtils.java:741) 
at org.apache.tools.ant.util.FileUtils.resolveFile(FileUtils.java:616) 
at org.apache.tools.ant.types.resources.FileResource.<init>(FileResource.java:60) 
at org.apache.tools.ant.util.SourceFileScanner$1.<init>(SourceFileScanner.java:96) 
at org.apache.tools.ant.util.SourceFileScanner.restrict(SourceFileScanner.java:95) 
at org.apache.tools.ant.taskdefs.Copy.buildMap(Copy.java:787) 
at org.apache.tools.ant.taskdefs.Copy.scan(Copy.java:744) 
at org.apache.tools.ant.taskdefs.Copy.iterateOverBaseDirs(Copy.java:666) 
at org.apache.tools.ant.taskdefs.Copy.execute(Copy.java:563) 
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:291) 
at sun.reflect.GeneratedMethodAccessor90.invoke(Unknown Source) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.java:106) 
at org.apache.tools.ant.Task.perform(Task.java:348) 
at org.apache.tools.ant.Target.execute(Target.java:392) 
at org.apache.tools.ant.Target.performTasks(Target.java:413) 
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1399) 
at org.apache.tools.ant.Project.executeTarget(Project.java:1368) 
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:41) 
at org.apache.tools.ant.Project.executeTargets(Project.java:1251) 
at org.apache.tools.ant.module.bridge.impl.BridgeImpl.run(BridgeImpl.java:283) 
at org.apache.tools.ant.module.run.TargetExecutor.run(TargetExecutor.java:541) 
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153) 
    BUILD FAILED (total time: 12 minutes 5 seconds) 
+0

Я всегда создаю проекты struts2 в Netbeans, используя maven ... File-> New Project -> (панель категорий: выберите Maven), (панель проекта: выберите веб-приложение), остальные инструкции следуют: http: // stackoverflow. com/questions/5718418/struts2-netbeans-7 Думаю, я смогу создать пустой проект за пару минут ... загрузка зависимостей в сторону – Quaternion

ответ

0

Хорошо, вот как я его решил. Я использовал веб-приложения Netbeans с существующими источниками для импорта проекта. По какой-то причине импортированный проект не регистрирует каталог «jsp». Он просто видит файлы JSP в каталоге веб-страниц NOT Web Pages/jsp. Поэтому я просто удалил ссылку/jsp в struts.xml. Теперь приложение работает нормально, и ошибок проверки больше нет.

Я доволен этим ответом в той мере, в какой я могу запустить приложение, но я не очень доволен, что полностью понимаю, как IDE создают такие типы приложений, поскольку импортированная структура каталогов явно неправильна (и пропустила jsp). Был бы признателен, если кто-то может пролить свет на это, или если я должен опубликовать отдельный вопрос по теме строительства Struts2 в Netbeans

+0

Опубликовать структуру каталогов. –

+0

Извините, я новичок в этом. Могу ли я опубликовать его как файл изображения? Или я должен его публиковать? –

+0

Как в [this] (http://stackoverflow.com/questions/8991597/struts-hello-world- пример-there-is-no-action-mapped-for-namespace-and-act). –

1

Не может увидеть корневой веб-контент каталога из вашего проекта исследователя, потому что это не структура каталогов, это структура проекта. Например, если вы используете maven, тогда это должно быть [project root]/src/main/webapp. Этот каталог должен содержать папку WEB-INF. Если в настройках проекта вы установили веб-контент root, то это неправильно, потому что оно влияет на JSP и другие файлы проекта. Вы должны установить его на /. В этом случае кореньпроект и корень веб-контента будет такой же или создать новую папку в корневой папкепроекта говорят WebContent и место jsp, WEB-INF и другие веб-ресурсы там.Установите веб-контент root Настройки проекта на /WebContent. Затем вы можете использовать /jsp/ в сопоставлениях результатов.

+0

Хорошо, я попытался загрузить как можно более точное изображение структуры каталогов. Пожалуйста, дайте мне знать, если это нормально. теперь он не работает Когда я выбираю опцию «run», он просто зависает. Мне кажется, что IDE меня путают. Я думаю, что мне понравится хорошая книга, в которой объясняется, как создать Struts2 с помощью Netbeans. Используя Maven, я обнаружил некоторые проблемы с архетипами поэтому я больше не уверен в том, как лучше построить Struts2 (кроме создания его вручную, создания файла войны и загрузки с помощью менеджера Tomcat). –

+0

Фактически, когда я изменил настройку корневой папки веб-контента на «/», она запускается, но это занимает ОЧЕНЬ долгое время –

+0

Изображение не читается, вы можете разместить лучшее изображение или опубликовать текст, отформатированный как дерево. [Netbeans имеет плагин maven] (http://maven.apache.org/netbeans-module.html), и я не вижу никаких трудностей в управлении проектом maven из IDE с архетипами или без него. –

Смежные вопросы