Struts2(上)
一、 经典的MVC模式
二、 Struts1.xMVC的实现
三、 Struts1.x的主要组件和作用
组件
作用
ActionServlet
中央控制器
Action
分控制器,调用JavaBean实现业务逻辑,Action可以分为Action、DispatchAction等不同类型
ActionForm
封装参数,实现服务器验证,文件上传等
Forward
转发到目的地,可以是JSP,也可以是另一个Action
l
配置文件,配置有ActionForm,Action,Forward等,通过XML解析,然后使用反射技术使用该文件
Struts标签库
和JSTL类似,和l、ActionForm、Action等对象可以紧密集成
四、 Struts1.x 开发实例-登录程序
见案例。
五、 Struts2WebWork)的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小时内删除。