zoukankan      html  css  js  c++  java
  • 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中的配置有效

    使用方法

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

  • 相关阅读:
    【css】所有的a标签设置为新窗口打开【原创】
    TP 3.1版本不支持 CONTROLLER_NAME
    关于TP 特殊页面伪静态规则的编写 研究实现
    larave PHP框架
    [转]git和github
    [转]mysql语句大全
    camera.swf?  提示  图片上传中请稍候,没任何报错
    mysql大小写敏感(默认为1,不敏感)
    数据cube的schema与sql的对应的关系
    MDX的实例讲解(排名前15的小例子)
  • 原文地址:https://www.cnblogs.com/xzh0717/p/10753463.html
Copyright © 2011-2022 走看看