Struts2 (下)

Posted Lost dreaming

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Struts2 (下)相关的知识,希望对你有一定的参考价值。

Struts中API介绍

ServletAPI

在使用Struts2的框架的过程中,发现Struts2和Servlet的API是解耦合的。
在实际开发中,经常使用到Servlet的API,比如进行登录,将用户的信息保存到Session中,有的时候需要向页面输出一些内容,用到response对象。涉及到Servlet的API的访问。

如何获得到servlet中的API

完全解耦合的方式

  • 使用ActionContext来进行获取
  • 注意
    • 此方法只能从域中取数据和保存数据
    • 不能获取其它的方法
使用步骤
<form action="${pageContext.request.contextPath }/myform.action"
    method="get">
    用户名:<input type="text" placeholder="请输入用户名..." name="username"><br />
    昵称:<input type="text" placeholder="请输入用户名..." name="nick"><br />
    爱 好: 
    <input type="checkbox" value="足球" name="hobby">足球 
    <input type="checkbox" value="篮球" name="hobby">篮球 
    <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br /> 
    <input type="submit" value="提交">
</form>
<struts>
    <package name="struts" extends="struts-default" namespace="/">
        <action name="myform" class="com.xzh.struts2.MyFormAction">
            <!-- 结果页 -->
            <result name="success">/myxq.jsp</result>
        </action>
    </package>
</struts>
public class MyFormAction extends ActionSupport {
    public String execute() {
        // 获取参数
        ActionContext context = ActionContext.getContext();
        HttpParameters parameters = context.getParameters();
        // 根据key取值
        String username = parameters.get("username").getValue();
        System.out.println(username);
        String nick = parameters.get("nick").getValue();
        System.out.println(nick);
        String[] hobbys = parameters.get("hobby").getMultipleValues();
        System.out.println(Arrays.toString(hobbys));
        
        // 获取所有参数
        Set<Map.Entry<String, Parameter>> MapEntry = parameters.entrySet();
        for (Map.Entry<String, Parameter> entry : MapEntry) {
            System.out.println(entry.getKey());
            System.out.println(Arrays.toString(entry.getValue().getMultipleValues()));
        }
        
        // 把数据存放到域中
        context.put("resName", "resValue");
        context.getSession().put("sessionName", "sessionValue");
        context.getApplication().put("ApplicationName", "ApplicationValue");
        
        return SUCCESS;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>myxq</h1>

res:${reqName }
session:${sessionName }
Application:${ApplicationName }

</body>
</html>
示例表单
<form>
    用户名:<input type="text" placeholder="请输入用户名..." name="username"><br/>
    昵称:<input type="text" placeholder="请输入用户名..." name="nick"><br/>
    爱  好: <input type="checkbox" value="足球" name="hobby">足球
            <input type="checkbox" value="篮球" name="hobby">篮球
            <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br/>
    <input type="submit" value="提交">
</form>

使用Servlet的API的原生方式

  • servletActionContext
  • 这种方式可以操作域对象的数据,同时也可以获得对象的方法。
  • 使用步骤
<form action="${pageContext.request.contextPath }/myform.action"
    method="get">
    用户名:<input type="text" placeholder="请输入用户名..." name="username"><br />
    昵称:<input type="text" placeholder="请输入用户名..." name="nick"><br />
    爱 好: 
    <input type="checkbox" value="足球" name="hobby">足球 
    <input type="checkbox" value="篮球" name="hobby">篮球 
    <input type="checkbox" value="乒乓球" name="hobby">乒乓球<br /> 
    <input type="submit" value="提交">
</form>
<struts>
    <package name="struts" extends="struts-default" namespace="/">
        <action name="myform" class="com.xzh.struts2.MyFormAction">
            <!-- 结果页 -->
            <result name="success">/myxq.jsp</result>
        </action>
    </package>
</struts>
public class MyFormAction extends ActionSupport {
    public String execute() {
        // 获取原生api
        HttpServletRequest request = ServletActionContext.getRequest();

        // 根据key取值
        String username = request.getParameter("username");
        System.out.println(username);
        String nick = request.getParameter("nick");
        System.out.println(nick);
        String[] hobbys = request.getParameterValues("hobby");
        System.out.println(Arrays.toString(hobbys));

        // 获取所有参数
        Map<String, String[]> parameterMap = request.getParameterMap();
        for (String key : parameterMap.keySet()) {
            String[] values = parameterMap.get(key);
            System.out.println(key + " " + Arrays.toString(values));
        }

        // 把数据存放到域中
        request.setAttribute("resName", "resValue");
        request.getSession().setAttribute("sessionName", "sessionValue");
        ServletActionContext.getServletContext().setAttribute("ApplicationName", "ApplicationValue");

        return SUCCESS;
    }
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>

<h1>myxq</h1>

res:${reqName }
session:${sessionName }
Application:${ApplicationName }

</body>
</html>

接口注入的方式

        让Action实现一些接口,让接口提供的一些方法,设置一些具体的值
        使用步骤

以上是关于Struts2 (下)的主要内容,如果未能解决你的问题,请参考以下文章

有人知道下面的代码片段是啥意思吗?

S2-053:Apache Struts2远程代码执行漏洞(中危)

struts2 之 struts2数据校验

struts2如何验证文本框大于0但不等于0

Struts2 action 跳转到web-inf下,

Struts2之result中标准结果代码