Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用项目';访问主页的用户名_Java_Jsp_Struts2_Log4j_Welcome File - Fatal编程技术网

Java 使用项目';访问主页的用户名

Java 使用项目';访问主页的用户名,java,jsp,struts2,log4j,welcome-file,Java,Jsp,Struts2,Log4j,Welcome File,在我的web应用程序中,我必须编写web应用程序的URL,并指定要作为主页的home.jsp页面,我想知道如何在浏览器中通过键入项目的根文件夹名称来访问应用程序 我已将web.xml中的欢迎文件列表设置为每次访问应用程序时都要访问的home.jsp,但这没有帮助。可能是因为我使用的是Struts 2框架,如果可能的话,我应该在Struts.xml中设置welcome file list?我该怎么做 另一个问题,我到目前为止还没有回答。例如,在一个action类的execute方法中, 我想要两个

在我的web应用程序中,我必须编写web应用程序的URL,并指定要作为主页的
home.jsp
页面,我想知道如何在浏览器中通过键入
项目的根文件夹
名称来访问应用程序

我已将
web.xml
中的
欢迎文件列表设置为每次访问应用程序时都要访问的
home.jsp
,但这没有帮助。可能是因为我使用的是Struts 2框架,如果可能的话,我应该在
Struts.xml
中设置
welcome file list
?我该怎么做

另一个问题,我到目前为止还没有回答。例如,在一个
action
类的
execute
方法中, 我想要两个不同的结果
成功
错误
,如下所示

if(message.getMessageBody() != null &&  
          message.getMessageDestinationEmail() != null &&
     message.getMessageHead() != null){
         return SUCCESS;
} else
     return ERROR;
我将错误映射到
error.jsp
页面,并将success映射到
struts.xml
中的另一个
.jsp
页面

<action name="message" class="com.mule.basik.action.PostOfficeAction" 
                                                     method="execute">
        <result name="success">/status.jsp</result>
        <result name="error">/error.jsp</result>
</action>

/status.jsp
/error.jsp
但是,无论(在浏览器表单中)我是否填写
消息头
消息体
,都会返回
成功
页面(
/status.jsp


我不确定struts2如何(何时)实例化
ActionClass的
对象
成员,因此我决定声明一个
非参数构造函数
,该构造函数实例化bean
消息
(action类的成员)因为我认为每个请求都会创建一个action类的实例,因此会有一个action类所拥有的
bean
的新实例(取决于)。但这没有任何帮助,我做错了什么?我想我应该尝试使用Log4j,在
返回成功
返回错误
之前,在execute方法中打印一些内容,以确定
if
语句的计算结果是
true
还是
false
,但即使输入时我发现它的计算结果是
true
,我仍然不明白下一步要做什么,让execute返回上面显示的测试旁边的
ERROR

您也可以在web.xml中对struts使用
欢迎文件列表

<welcome-file-list>
    <welcome-file>index.htm</welcome-file>
</welcome-file-list>

index.htm

可以使用欢迎文件列表,您应该在
web.xml
或web服务器默认配置文件中配置它,将这些文件用作欢迎文件。当您访问包含此文件的web文件夹时,无论struts2是否将此文件夹映射为其操作,web服务器都将加载该文件的内容。然后在欢迎文件中,您应该放置重定向到操作的代码。例如,
index.jsp
是受欢迎的文件

<welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.jsp</welcome-file>
    <welcome-file>index.html</welcome-file>
</welcome-file-list>

index.jsp
default.jsp
index.html
index.jsp

<% response.sendRedirect("showcase.action"); %> 

这里已经讨论过的第二个问题是,在构造函数中初始化bean是个坏主意,容器使用构造函数来实例化操作。在它运行时,您无法访问某些功能或服务,因为它们不可用。最好在创建操作并且功能可用后(例如,在执行操作时)进行延迟初始化。如果您希望所有操作在执行之前初始化,则有一个
Preparable
接口,默认情况下由
ActionSupport
实现,您的操作应该扩展并覆盖
prepare
方法

初始化对象是您的责任。提交的其他对象可以由OGNL创建以填充您的集合

您可以将Log4j与struts2一起使用,但它需要在项目和服务器上进行配置。出于调试目的,您可以写入
System.out
,它在most IDE中被重定向到控制台


真的,我不知道你想做什么,但如果没有发现错误,通常会返回
SUCCESS
,如果有错误,则返回
ERROR

由于您问题的第二部分已在上文中得到回答,因此我将不详细介绍,我将尝试为第一部分提出解决方案

因为您希望当有人点击您的URL时,一切都由Struts2处理,所以在这种情况下,我们应该通过操作遵循/执行完整的流,以便框架应该获得初始化其内部结构的选项

这里有一种方法可以做到这一点

您总是可以在
web.xml
文件中声明Struts2操作名称,我假设您的第一个操作名称是
welcome.action
,下面是我们在web.xml中需要的内容

<welcome-file-list>
   <welcome-file>welcome</welcome-file>
 </welcome-file-list>
您可以在
welcomeAction
中定义要执行的所有逻辑。请注意以下几点

  • struts.xml
    文件中的操作名称应与欢迎文件列表中的名称相同
  • 不要忘记在
    webapp
    文件夹中创建一个与欢迎操作名称同名的文件,因为这是一个让容器调用您操作的技巧
  • 希望这能帮助你和其他有同样问题的人


    `

    无法返回错误的问题是由于未指定的输入默认为
    字符串
    ,因此我不仅要检查是否有
    非空
    ,还要检查是否有空。我也会验证的,谢谢你的支持TRICK@user976095验证比手动检查更好,因为它没有像您这样的错误,并且是框架的一个组成部分;因此,我不仅要检查是否有空的,而且还要检查是否有空的。谢天谢地,事实上我就是这么做的。因为打字错误,第二个问题,它根本不起作用
    <action name="welcome" class="welcomeAction">
       <result>welcome.jsp</result>
     </action>