对JBuilder而言要在configure Runtimes中配置main class就需要有一个Application否则单个的dos程序是无法直接运行的(因为无法设置main class);
在Tomcat中使用外来的JSP程序
()用JBuilder来实现的方法是新建一个有含基本的JSP(在没有特殊需求的条件下
可选用默认的最小化该JSP然后设置Server Enterprise即可在localhost:在JBiulder内部运行同时在D:\Tomcat\Tomcat \conf\Catalina\localhost目录下
生成个文件在loacalhost:/该文件名 即可访问JSP
()当要在D:\Tomcat\Tomcat \webapps\jspexamples下实现访问JSP方法同Servlet而且需要Jsp的class文件只有通过JBIulder来编译生成然后把class
文件放到D:\Tomcat\Tomcat \webapps\jspexamples\WEBINF\classes\org\apache\jsp下再把JSP文件放到D:\Tomcat\Tomcat \webapps\jspexamples的任一文件(都可自己另行创建)然后修改相关的WEBxml文件(按照目录分级特点进行)
在对文件(特别是类名)的命名时要注意尽可能的不要用关键字进行命名对于以提供的名称可以把首单词改有代表意义的单词
原来的<struts_template>使用<struts_nested>代替
在配置tomcat的时候要检验是否存在lib和classes文件
对于struts的运行模式是前台一个Jsp文件对do进行请求
而这个do是由一个action和actionform形式的class文件组成
且strutsconfig扮演两者被jsp文件访问的桥梁(由对该文件进行配置来实现)
注意tile_ref文件在数据转递的过程中的角色
在建立web molumer时要把build war设置成when building project or webapp
lib中的文件jar和xml在编译的时候会自动产生而webinf中tld文件则需要另行向里加
把strutsexample安装(把war文件放到/webapps下启动tomcat会自动安装)用法jsp
在配置webxml文件的时候要新加 <initparam>
<paramname>definitionsconfig</paramname>
<paramvalue>/WEBINF/tilesdefsxml</paramname></initparam>到
<servlet>
<servletname>action</servletname>
<servletclass>orgapachestrutsactionActionServlet</servletclass> 下!
.STRUTS的制作流程
.建立一个JBiulder工程并进行命名
.建立一个Web Module(WAR)文件Create an empty Web Module依次选中最新的组件(servlet JSPStruts )
.把出现的在WebModule页下的Tag Library都改为WEBINF/strutstiles
建立第一个jsp文件作为整个工程的启动页(并在选择标签(tag)是选择各种标签其中strutstemplate不要选)
依次建立其他的jsp文件即可
同时注意到每一个在jsp中引用自定义的包名是小写因为jbuilder默认是小写不管实际的情况可以通过编译发现汇报错但在对应的java文件不一样必须严格一致
.建立actionform文件按默认即可
.建立action文件第一步可按默认action起名第二步是对strutsconfig 文件进行配置
.当对选项进行合理的设置后struts_configxml中会增加如下
<formbeans>
<formbean name=uploadForm type=secondstrutsUploadForm />
</formbeans>
<action input=/uploadjsp name=uploadForm path=/untitledAction scope=request type=secondstrutsUntitledAction validate=true />
但这通常不够可以改写如下
<formbeans>
<formbean name=uploadForm type=secondstrutsUploadForm />
</formbeans>
<actionmappings>
<action path=/upload forward=/uploadjsp />//就有在浏览器上的uploaddo和action=uploaddoh或action=upload
<! Upload Action >
<action path=/uploadsubmit type=secondstrutsUploadAction name=uploadForm scope=request input=input>
<forward name=input path=/uploadjsp /> //这种方法可以使得actionFrom获取表单的值
<forward name=display path=/displayjsp/>//然后进行请求操作会返回一个findmapping进行页面的倒转
//代表有多少个连续操作例如上面就是uploadjsp对displayjsp的请求访问
</action>
.这个工程中的文件编译后会在WEB_INF中生成xml文件并同时需要把*tld文件拷到该目录下
.按一般的生成的strutsconfigxml文件中会有有关相应的xml文件
<plugin className=orgapachestrutsvalidatorValidatorPlugIn>
<setproperty property=pathnames value=/WEBINF/validatorrulesxml/WEBINF/validationxml />
</plugin>//通常没有问题
<plugin className=orgapachestrutstilesTilesPlugin>
<setproperty property=definitionsconfig value=/WEBINF/tilesdefsxml />
</plugin>//通常会出现错误且该文件要自己编写有关对其他的*configxml文件(非strutsconfigxml)见D:\Tomcat\Tomcat \webapps\tilesdocumentation\WEBINF中的一些该文件是与WEBINF同目录的文件夹(例ass)中一些jsp文件相关的同时用一个大tilesassdefsxml来对将要ass 目录下的显示页上所有的用到的do的文件的actionmapping进行描述(是通过用assxxxxx方式)目的是使得然后再在对应的structsassconfigxml中加入(tilesdefsxml与strutsconfigxml相对应)
<plugin className=orgapachestrutstilesTilesPlugin >
<setproperty property=definitionsconfig
value=/WEBINF/tilesdefsxml /WEBINF/tilesdocdefsxml />
<setproperty property=moduleAware value=true />
</plugin>
</strutsconfig>
和部分的actionmapping即可(在jbuiler中默认生成tilesdefsxml文件但在工程小的时候并不给他进行操作会在服务器启动的时候检查配置文件是会出错的故在strutsconfig中删除
<plugin className=orgapachestrutstilesTilesPlugin>
<setproperty property=definitionsconfig value=/WEBINF/tilesdefsxml />
</plugin>即可(因为<tilesdefonation/>与模式不配
.Webxml文件通常不用配置
.在jbiulder中创建的工程编译后生成一系列的文件位于D:\project\work\下可以对出错的问题进行直接查看这些文件
.可用JSPFromActionFrom(file/new file/web中)生成对应的jsp文件在选择action class 是不要用broswer而是直接用research进行搜索到自己所要的也是自定义的action class文件的文件名即可找到(这种方法针对要引用自定义的包中的类可选用)
.对于有关用JBuilder操作时可严格按操作过程来执行可以用<action path=/uploadsubmit type=secondstrutsUploadAction name=uploadForm scope=request input=input>
<forward name=input path=/uploadjsp /> ……
来获取uploadjsp的form中的值但操作出现错误是会被警告input必须使用一个path(即/*jsp)这时可以用HttpServletRequest类的getparameter()来获取form中的值然后即actionForm可获取所有的值其他与一般的相同
对于包含文件传输的form就需要在form中添加Boolean maxLengthExceeded =
(Boolean) requestgetAttribute(
MultipartRequestHandlerATTRIBUTE_MAX_LENGTH_EXCEEDED);才能完成对form的进行mapping
<actionmappings>
<action forward=/submitjsp path=/submit />
<! submit Action >
<action path=/submitsubmit name=sumbitActionForm scope=request type=friststrutssumbitAction validate=true input=/failurejsp>
<forward name=failure path=/failurejsp/>
<forward name=success path=/deployjsp />
</action>
.根据struts的特点一般不在actionFrom中有任何业务处理通常只有get/setXXX方法和一个validate方法而且有近可能的减少处理
而Action中的主要在execute方法中有有关于调用外部的javaBean进行数据处理和findMapping进行到转显示也避免大量处理
配置webxml文件
不管应用中包含多少子应用都只需要配置一个ActionServlet配置多个ActionServlet类来处理应用中不同的功能其实是没必要的因为Servlet本身支持多线程而且目前的Struts框架只允许在应用中配置一个ActionServlet
配置welcome file list看到这里在想为什么会要多个欢迎页呢?这多个页面又是如何调用?原来是这样<welcomefilelist>元素可以包含多个<welcomefile>子元素调用从叙照第一个指定的文件开始如果这个文件存在将把这个文件返回给客户如果该文件不存在则依次寻找下一个欢迎页面的文件直到找到为止如果所有文件不存在服务器将向客户端返回HTTP Not Found的出错信息
在<welcomefilelist>元素中不能配置Servlet映射因此不能直接把Struts的Action作为欢迎文件但是可以通过配置一个全局的转发项来实现
配置多应用模块
. 为每个子应用创建单独的Struts配置文件
. 在webxml的ActionServlet的配置代码中添加每个子应用信息
. 采用<forward>元素或SwitchAction类来实现子应用之间的切换
多个子应用模块之间的切换
例如用从默认模块切换到ModuleB
从ModuleB切换到默认模块
在用到form的时候可以在外部设一个bean用来对数据进行并在ActionForm中使用并在其中定义一系列的操作然后再向Action中传递参数
.可以使用DynaActionForm类来取代编写一个ActionFrom要在configstruts中设定如下
<formbean name=sumbitActionForm type=orgapachestrutsactionDynaActionForm >
<formproperty name=name type=javalangString initial=gaolong/>
<formproperty name=password type=javalangString/>
<formproperty name=email type=javalangString/>
</formbean>
然后在action中直接应用DynaActionForm的各种方法可对form进行验证并可以通过get方法获取对应的值