Struts2实现浏览器打印HelloWorld案例

一个简单的打印Helloworld程序蕴含了MVC思想。完成HelloWorld输出步骤详解

  1. 创建一个类来储存打印信息(Model)
  2. 创建一个网页来展现打印信息(View)
  3. 创建一个动作类(Action)来控制用户,Model层和View层的交互(Controller)
  4. 配置struts.xml必要的映射信息来联合动作(Action)和View层。

步骤 1 - 创建Model层的MessageStore.java类

Struts 2 框架需要一些暴露给View层的对象,这些对象含有View层需要展示的信息,例如本例中的”Hello Struts User”。

package com.struts2.step1;

public class MessageStore {

    private String message;

    public MessageStore(){
        setMessage("Hello Struts User");
    }

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }



}

步骤2 - 创建动作类(Action)HelloWorldAction.java

Struts 2 框架将会创建一个HelloWorldAction 类对象,并且调用 execute方法来响应用户的动作。

package com.struts2.step1;

import com.opensymphony.xwork2.ActionSupport;

public class HelloWorldAction extends ActionSupport {

    private static final long serialVersionUID=1L;
    private MessageStore messageStore;

    @Override
    public String execute() throws Exception {
        messageStore=new MessageStore();
        return SUCCESS;
    }

    public void setMessageStore(MessageStore messageStore) {
        this.messageStore = messageStore;
    }

    public MessageStore getMessageStore() {
        return messageStore;
    }


}

步骤3 - 创建View层的 HelloWorld.jsp

taglib标签直接通知Servlet 容器这个网页使用 Struts 2 标签。
HelloWorld.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@taglib uri="/struts-tags" prefix="s"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>">

<title>My JSP 'HelloWorld' starting page</title>

<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
    <link rel="stylesheet" type="text/css" href="styles.css">
    -->

</head>

<body>

    <s:property value="messageStore.message" />


</body>
</html>

步骤4 - 在struts.xml添加Struts 配置

<package name="default" namespace="/hello" extends="struts-default">

        <!-- Step1 Action -->
        <action name="step1_index">
            <result>/step1/index.jsp</result>
        </action>

        <action name="step1" class="com.struts2.step1.HelloWorldAction"
            method="execute">
            <result name="success">/step1/HelloWorld.jsp</result>
        </action>


    </package>

步骤5 - 创建Action的URL

index.jsp

<%@ page language="java" import="java.util.*" pageEncoding="GB18030"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">

 <title>Basic Struts 2 Application - Welcome</title>
</head>
<body>
<h1>Welcome To Struts 2!</h1>
<p><a href="<s:url action='step1'/>">Hello World</a></p>
</body>
</html>

浏览器输入
http://localhost:8008/MYStruts/hello/step1_index.action就可以验证案例。

这里写图片描述
这里写图片描述
下面来说说整个过程浏览器是怎么样工作的。

  1. 首先是容器接收到web服务器的一个step1_index.action资源请求。接着,根据从web.xml加载来的设置,容器就会找到所有被 org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter过滤的请求,包括*.action请求。(记住:StrutsPrepareAndExecuteFilter是框架的入口)。
  2. 框架找到映射名是step1_index的action,接着就继续找和com.struts2.step1.HelloWorldAction对应的类。接下来,框架就实例化动作(Action)并且调用 execte方法。
  3. execte方法创建MessageStore 对象,并返回SUCCESS。根据返回的SUCCESS值,框架就会在结果集中寻找匹配的网页来加载。框架就通知容器,让HelloWorld.jsp作为请求的响应。
  4. 随着HelloWorld.jsp被执行, 标签调用HelloWorldAction的getMessageStore 方法,getMessageStore 返回的对象继续调用MessageStore的getMessage方法取得message属性值,标签也合并到message属性的值中。
  5. 最后,一个纯html网页就返回给浏览器。

最后,做一个总结


框架使用动作(Actions) 来处理HTML 表单和其它的请求。动作类(Action class) 返回一个例如SUCCESS, ERROR, or INPUT的返回值名字。根据映射关系 从 struts.xml加载相应的动作标签(action), 一个给定名字的结果集名字可以选择一个网页,例如本例。还可以选择另外一个动作(action)或者其他web资源,例如图片,pdf。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值