初识Struts2
一、Struts2入门案例
①引入jar包
②在src下创建struts.xml配置文件
<?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" "http://struts.apache.org/dtds/struts-2.3.dtd"> <struts> <!-- 修改文件 tomact不用重启 --> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!-- 第一个action --> <action name="HelloWordAction" class="cn.happy.action.HelloWordAction"> <result name="success">index.jsp</result> </action> </package> </struts>
dtd约束条件查找路径:
③创建HelloWordAction类,实现Action接口,不仅定义了public String execute(),还提供了5个字符串类型的静态常量。如
success、none、error、input、login
public class HelloWordAction implements Action{ private String name; public String execute() throws Exception { setName("Hello"+name); return "success"; } public String getName() { return name; } public void setName(String name) { this.name = name; }
④配置文件web.xml。将全部请求定位到指定的Struts 2过滤器中
index.jsp页面:
并引用 taglib指令<%@taglib uri="/struts-tags" prefix="s" %>
注:form表单的action属性名应该和struts.xml的action一致
<div>
<h1>
<s:property value="name"/>
</h1>
</div>
<div>
<form action="HelloWordAction" method="post">
请输入你的姓名:
<input name="name" type="text"><br/><br/>
<input type="submit" value="提交">
</form>
</div>
实现效果:
二、实现自动装配,将action类中的属性 包装到一个实体类User。然后在action类中定义私有属性User,进行封装。在index.jsp页面即可使用User对象点出其属性
三、登录案例:
实现效果:
四、如何使页面上还是username,也能实现 自动装配呢?[模型驱动--ModelDriven]
让Action实现一个ModelDriven<User>,其次手动实例化User对象,并实现该方法,返回user
五、Struts2访问ServletAPI对象获取Session。
分为两类:①解耦的访问方式 ②耦合的访问方式
关键代码:
1、耦合一。
获取到session并返回一个HttpSession.以及session.setAttribute方法获取到username
//耦合
private HttpServletRequest request; HttpSession session2 = ServletActionContext.getRequest().getSession(); session2.setAttribute("uname", user.getUsername());
2、耦合二。
实现ServletRequestAware接口,并重写其方法,定义一个Request属性并进行封装
request.getSession().setAttribute("uname", user.getUsername());
3、解耦合一
使用ActionContex类获取ServletAPI对象对应的Map对象
private Map<String, Object> map;
Map<String, Object> session = ActionContext.getContext().getSession(); session.put("uname",user.getUsername());
4、解耦合二 注入[IOC思想]。实现SessionAware接口,获取到Map集合
map.put("uname", user.getUsername());
六、struts2常用表单标签