一、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常用表单标签