Struts2(上)
一、 经典的MVC模式
二、 Struts1.x对MVC的实现
三、 Struts1.x的主要组件和作用
组件 | 作用 |
ActionServlet | 中央控制器 |
Action | 分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型 |
ActionForm | 封装参数,实现服务器验证,文件上传等 |
Forward | 转发到目的地,可以是JSP,也可以是另一个Action |
l | 配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件 |
Struts标签库 | 和JSTL类似,和l、ActionForm、Action等对象可以紧密集成 |
四、 Struts1.x 开发实例-登录程序
见案例。
五、 Struts2(WebWork)的MVC
Struts2的MVC架构
六、 Struts2的主要组件
组件 | 作用 |
FilterDispatcher | 起中央控制器作用的过滤器 |
Action | 处于Model层的Action,调用JavaBean实现业务逻辑 |
l | 核心配置文件,配置有Action、Result等 |
result | 和forward类似,转发的目的地,支持多种视图技术。 |
七、 Struts2的实例-登录
在MyEclipse环境中建立一个新的web工程,名称“Struts2Login”,存放路径“f:\Struts2Login”。
在Struts2.0.11版本中到war包struts2-blank-2.0.11.war,解开该war包,在WEB-INF/lib目
录下复制出所有的jar包,这些jar包就是一个Struts2程序所需要的基础jar包,把它们复制到新建的web工程的WEB-INF/lib目录中。
在src目录下建立一个类,包名mypack,类名UserAction,其代码如下:
package mypack; import com.opensymphony.xwork2.ActionSupport; public class UserAction extends ActionSupport { private String username; private String userpass; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getUserpass() { return userpass; } public void setUserpass(String userpass) { this.userpass = userpass; } @Override public String execute() throws Exception { if ("Mike".equals(username) && "123".equals(userpass) || "张三".equals(username) && "abc".equals(userpass)) return "success"; else return "error"; } } |
在src目录下建立Struts2的配置文件l,内容如下:
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <!-- 定义包管理配置的action 继承l中的配置 --> <package name="actions" extends="struts-default"> <!-- 定义Action(login.action) --> <action name="login" class="mypack.UserAction"> <!-- 定义转发路径对应的字符串名 --> <result name="success">/Success.jsp</result> <result name="error">/Error.jsp</result> </action> </package> </struts> |
修改l,在其中加入一个过滤器,过滤/*路径。
<!-- 过滤器类 --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <!-- 过滤所有的url请求 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> |
在webroot目录下编写3个jsp页面,index.jsp、Success.jsp和Error.jsp,注意这里把page指令中的pageEncoding设置为“utf-8”,就没有中文问题了。
● index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = ContextPath(); String basePath = Scheme() + "://" + ServerName() + ":" + ServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> mvc实例 <title>My JSP 'index.jsp' starting page</title> </head> <body> <!-- 提交到action --> <form action="login.action" method="post"> 用户名: <!-- 参数名和action中的属性名一样 --> <input type=text name=username> <br> 密 码: <input type=password name=userpass> <br> <input type=submit name=subm value="提交"> <input type=reset name=reset value="取消"> </form> </body> </html> |
● Success.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = ContextPath(); String basePath = Scheme() + "://" + ServerName() + ":" + ServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Success.jsp' starting page</title> </head> <body> <h1> 欢迎 <%=Parameter("username")%> ,登录 </h1> </body> </html> |
● Error.jsp
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = ContextPath(); String basePath = Scheme() + "://" + ServerName() + ":" + ServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'Error.jsp' starting page</title> </head> <body> <h1> 用户名或密码错误! </h1> </body> </html> |
把程序部署在tomcat5.5以上的版本中运行。
图1-2 index.jsp
图1-3 Success.jsp
八、 Struts2的中文乱码解决
中文乱码问题一般是指当请求参数有中文时,无法在Action中得到正确的中文。Struts2中有2种办法可以解决这个问题:
● 设置JSP页面的pageEncoding=”utf-8”,就不会出现中文乱码;
● 如果JSP页面的pageEncoding=”GBK”,那么需要修改ding=GBK,在l中加入如下语句进行修改。
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "/dtds/struts-2.0.dtd"> <struts> <constant name="ding" value="GBK"/> …… </struts> |
上面2种方法可以解决POST请求中的中文参数,但是GET请求中的中文参数不能解决,GET请求中的中文参数的乱码需要通过修改Tomcat的l文件来解决,修改如下内容,加入URIEncoding=”GBK”:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论