Struts2 入门

1.Struts2

  Struts2是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet,在MVC设计模式中,Struts2作为控制器(Controller)来建立模型与视图的数据交互。

2.环境搭建

  • 导入jar包
  • 编写Struts2的配置文件

  • 在web.xml中加入Struts2MVC框架启动配置

3.编写Struts2程序

  • 导入struts2 jar包(8)
  • 编写web.xml 配置Struts2核心控制器

<filter>
<filter-name>struts2</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

  • 创建自定义控制器(创建业务控制器)

public class FirstAction implements Action {
@Override
public String execute() throws Exception {
if("hello".equals(username)){
message="hi";
}
return SUCCESS;
}

  • 配置struts.xml (配置处理结果对应的响应视图给用户)

<struts>
<constant name="struts.enable.DynamicMethodInvocation" value="false" />
<constant name="struts.devMode" value="true" />
<package name="default" namespace="/" extends="struts-default">
<action name="index" class="com.kawa.action.FirstAction">
<result name="success">index.jsp</result>
</action>
</package>
</struts>

  • 测试(测试页面index.jsp)

<body>
<div>
<s:property value="message" />
</div>
<form action="index" method="post">
username:<input name="username" /><br/>
<input type="submit" value="提交" />
</form>
</body>

4.Struts2的执行过程及原理

用户发起请求 → StrutsPrepareAndExecuteFilter核心控制器 → interceptor拦截器
→ Action类中 execute → result 结果页面 →响应

Struts2是基于MVC设计模式实现的Web应用框架
配置 web
<filter>
//配置核心Filter的名字
<filter-name>struts2</filter-name>
//配置核心Filter的类名
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>

</filter>
<filter-mapping>
<filter-name>struts2</filter-name>
//要拦截的URL,/*指拦截所有用户
<url-pattern>/*</url-pattern>
</filter-mapping>
配置 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>
提示:当设置该参数为GBK时,相当于调用HttpServletRequest的setCharacterEncoding方法. >
<constantname="struts.i18n.encoding"value="UTF-8"/>

<packagename="default"namespace="/"extends="struts-default">
没有找到页面时,默认请求这个配置
<default-action-ref name=”action”></default-action-ref >
<actionname="action"class="com.java.action.HelloAction">
<result>/error.jsp</result>
</action>

<actionname="hello"class="com.java.action.HelloAction">
<resultname="success">/success.jsp</result>
</action>
</package>
<packagename="default"namespace="/"extends="struts-default">
<actionname="login"class="com.java.action.HelloAction" method=”login”>
<resultname="success">/success.jsp</result>
</action>
<actionname="register"class="com.java.action.HelloAction" method=”register”>
<resultname="success">/success.jsp</result>
</action>

</package>

</struts>
Hello对应from提交的name
Success对应Action返回的字符串


--jsp
<%@ taglib prefix="s" uri="/struts-tags" %>
<div>
<s:propertyvalue="message"/>
</div>
<formaction="index"method="post">
username:<inputname="username"/><br/>
<inputtype="submit"value="提交"/>
</form>


--开发控制层Action→struts.xml管理
作用:

  • 封装工作单元
  • 数据转移的场所
  • 返回结果字符串

类 implements Action
private String name=””
private String message””;
get set

public String execute() {
this.setMessage(“Hello!”+this.getName);
return “successss”
}

--解耦访问sevletAPI
Map<String,Object> session = null;
Session = ActionContext.getContext().getSession();
Session.put(“user“,name)
将name保存到session
sessionScope:在session范围内获取
Jsp页面获取${sessionScope.user}

--耦合访问sevletAPI
HttpSession session = null;
Session = ServletActionContext,getRequest().getSession();
Session.getAttribute(“user”,name);

--数据校验
类 extends ActionSupport{

Public void validate(){
If(name.length()==0){
This.addFieldError(“name”,”用户名不为空”)
}
}
}
有以上错误return “input;”
Jsp页面显示<s:fielderrorfieldname=”name”>
Fieldname不加取所有

Stuts.xml配置
<result name=”input”>login.jsp</result>


--UI标签 (表单标签,非表单标签)
<form theme=simple0></form>

--常用标签(控制标签,数据标签)
<s:iftest=“sex==1”></s:if>


<s:iterator value=”遍历集合对象” status=“st“ id=”user”>
<s:property value=”user”><ber>
</s:iterator>
--不写id时property不写value
<s:iterator value=”遍历集合对象” status=“st“>
<s:property><ber>
</s:iterator>



原文地址:https://www.cnblogs.com/QQW-HH/p/7644475.html