• 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实现一些接口,让接口提供的一些方法,设置一些具体的值

    使用步骤

    结果页配置

    全局配置

    • 全局结果页面:全局结果页面指的是,在包中配置一次,
    • 其他的在这个包中的所有的action只要返回了这个值,都可以跳转到这个页面。

    使用场景

    有些功能需要用户登入才能使用,只要没有登录,就让它返回到登录页面,很多地方都要返回到登录,所以可以把登录页做为一个全局的

    使用方法

    局部配置

    局部结果页面:局部结果页面指的是,只能在当前的action中的配置有效

    使用方法

    注意点:全局和局部名称相同时,会优先找局部

  • 相关阅读:
    互联网秒杀设计
    生产者消费者模式实现
    Ping CAP CTO、Codis作者谈redis分布式解决方案和分布式KV存储
    VIM使用学习笔记 : 按键说明
    Cookie的有效访问路径
    简单的Cookie记录浏览记录案例
    认识Cookie和状态管理
    Java异常
    Java接口基础
    String常用方法
  • 原文地址:https://www.cnblogs.com/xzh0717/p/10753463.html
Copyright © 2020-2023  润新知