Struts2 开发流程
来源:互联网 发布:vmware player mac版 编辑:程序博客网 时间:2024/06/14 09:05
一、确定Struts在开发中的地位
Struts其实就是一个Servlet; 根据传统MVC开发模式,如图所示:
Servlet担任了Controller的职责, 而Struts框架加入后,Struts其实就是担当了Servlet的职责,即任何一个处理请求都会经过Struts框架,并由他进行分发;
二、Struts2开发须知
1.在web.xml配置Struts的核心Filter的原因是每个web访问都会经过Struts;
2.struts.xml用于放置struts内部的一些配置信息,即使用Struts的功能,比如配置action、配置逻辑视图和物理视图的联系、配置常量等;
3.可以在struts.xml中添加<Constant name="struts.enable.devmode" value="true"/>,表明现在在开发阶段,会提供更多的错误提示供开发人员参考;
4.struts.xml 开发中放置在src目录下,但是部署时放在 WEB-INF\classes目录中(由Eclipse完成);
核心控制器和业务控制器
核心控制器就是在web.xml中配置的StrutsPrepareAndExecutorFilter;
业务控制器就是Action;
配置常量
常量配置的默认值请看struts2-core-XXXX.jar 中的org/apache/struts2的 default.properties; 该文件中配置了全部的常量的默认值;
常用的常量如下:
常量默认值意义 struts.action.extension action 指定struts2处理的请求后缀,可以设置多个值,用","分隔 struts.serve.static.browserCache true 是否缓存静态内容,如果需要每次都获取最新内容,则设为false struts.devMode false 是否处于开发阶段,即程序出错时给出更多的提示信息 struts.i18n.encoding UTF-8 默认编码集,类似于 request.setCharacterEncoding(""); struts.enable.DynamicMethodInvocation true 是否支持动态方法调用,即“ActionName ! MethodName”; struts.enable.SlashesInActionNames false action的名字中是否可以有斜线 struts.multipart.maxSize 2M 文件上传时的最大上传大小 struts.multipart.parser
jakarta
文件上传的解析器,默认用 commons-fileupload,可以换,但是对编程完全没有影响 struts.multipart.saveDir 无 文件上传的临时保存路径,几乎不用 struts.custom.i18n.resourcestestmessages,testmessages2
设定国际化资源文件的baseName struts.ognl.allowStaticMethodAccessfalse
是否允许ognl调用静态方法
这些常量都可以在struts.xml 或 struts.properties、web.xml中进行覆盖;
web.xml中配置常量方法:
通过配置初始化参数的方式配置常量;
- <pre class="html" name="code"><filter>
- <filter-name>struts2</filter-name>
- <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
- <init-param>
- <param-name>struts.action.extension</param-name>
- <param-value>do</param-value>
- </init-param>
- </filter>
- <filter-mapping>
- <filter-name>struts2</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
Struts2 有 struts.xml 、struts.properties、struts-default.xml、struts-plugin.xml 这四个配置文件;
struts-default.xmlstruts2-core-Xxx.jar定义了内建拦截器、默认处理类为ActionSupportstruts-plugin.xml插件包中插件的配置文件struts.xmlWEB-INF\classes定义了action、常量等struts.propertiesWEB-INF\classes配置常量
加载常量的顺序
如果出现同一个常量,则后者覆盖前者;
1.struts-default.xml
2.struts-plugin.xml
3.struts.xml
4.struts.properties
5.web.xml
模块化struts.xml:在struts.xml中加入<include file="struts-1.xml">导入其他配置文件
问题:struts.xml没有提示解决方法:
在struts2-core-Xxx.jar 中存在 struts-2.0.dtd;
在Eclipse中操作:
windows-->preference-->xml catalog-->add;
如下图配置:
即可;
三、Struts2简单处理流程
注意:此处没有涉及拦截器
接下来我们通过一个开发一个登录处理的web应用,更清晰的说明struts2的流程;
先展示目录结构:
一、编写JSP页面
登录页面、登录成功页面、登录失败页面分别为login.jsp,success.jsp,fail.jsp
login.jsp
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>登录界面</title>
- </head>
- <body>
- <form action="loginAction">
- 用户名:<input type="text" name="user"/><br />
- 密码:<input type="password" name="password"/><br />
- <input type="submit" value="登录"/>
- </form>
- </body>
- </html>
success.jsp
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>登录成功界面</title>
- </head>
- <body>
- 登陆成功!!!
- </body>
- </html>
fail.jsp
- <%@ page language="java" contentType="text/html; charset=utf-8"
- pageEncoding="utf-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
- <title>登录失败界面</title>
- </head>
- <body>
- 登陆失败!!!
- </body>
- </html>
二、编写Action
自己编写的Action通常需要继承ActionSupport类,我们通常需要覆写 public String execute()throws Exception{}方法;
因为此类规定了一些规范,比如在此类中定义了5个常量: SUCCESS、ERROR、LOGIN、INPUT、NONE;
这5个常量的目的是规定execute方法的返回值;
在Action中可以定义属性,此属性必须要规定setter和getter方法,此属性的用途是保存传递进来的数据;比如此登录应用中Action需要有两个属性:user属性和password属性,用来保存用户名和密码;
LoginAction.java
- package org.login.action;
- import com.opensymphony.xwork2.ActionSupport;
- public class LoginAction extends ActionSupport{
- private String user;
- private String password;
- public String execute()throws Exception{
- if(user.equals("xiazdong")&&password.equals("12345")){
- return SUCCESS;
- }
- else{
- return ERROR;
- }
- }
- public String getUser() {
- return user;
- }
- public void setUser(String user) {
- this.user = user;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- }
此处没有JavaBean的原因是尽量简化处理过程;
三、在struts.xml中配置Action
编写完Action后需要在struts.xml中配置该Action,目的是将execute()方法的返回值(逻辑视图)和物理视图关联起来,简单地说就是确定返回某个值时跳转到某个页面;
- <?xml version="1.0" encoding="GBK" ?>
- <!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.devMode" value="true"></constant>
- <package name="MyPackage" extends="struts-default" namespace="/">
- <action name="loginAction" class="org.login.action.LoginAction">
- <result name="success">/success.jsp</result>
- <result name="error">/fail.jsp</result>
- </action>
- </package>
- </struts>
四、处理流程
五、改变action后缀
一般我们访问Action类时通过 *.action的方式访问,我们可以修改后缀常量,通过在struts.xml中修改常量的值即可;
<constant name="struts.action.extension" value="do"/>
即可;
如果要支持多个后缀,则可以表示为:
<constant name="struts.action.extension" value="do,action"/>
- 二、Struts2开发流程
- Struts2 开发流程
- Struts2 开发流程
- Struts2框架开发流程
- struts2 一般开发流程
- struts2项目开发流程
- struts2开发一般流程
- struts2简单开发流程
- struts2开发流程
- struts2的开发流程
- struts2开发流程
- Struts2开发流程分析
- Struts2简单开发流程
- 【Struts2】开发流程
- struts2搭建开发流程要点
- struts2搭建开发流程要点
- Struts2的基本开发流程
- Struts2配置(Struts开发流程)
- 黑马程序员_java函数特点和应用
- Struts2之文件上传与下载
- Android自定义title
- MAC系统使用技巧(1)
- 文件系统--mknod系统调用
- Struts2 开发流程
- uboot makefile
- CSDN一周年
- VSTO - Named Range Control Basic Operation
- [转载]关于Delphi中HInstance说明
- struts2中文件上传和下载
- 一道笔试题的搞笑解法
- java学习-JAVA基本排序法示例,JAVA数据类型转换 ,ArrayList用法,Calendar 简单应用
- WebPageTest介绍