Struts10分钟入门
Struts2应用
Struts的jar包:struts2-core-xxx.jar
xwork-core-xxx.jar
ognl-xxx.jar:Struts2使用的一种表达式。
<dependency> <groupId>org.apache.struts</groupId> <artifactId>struts2-core</artifactId> <version>2.3.14</version> </dependency> <dependency> <groupId>org.apache.struts.xwork</groupId> <artifactId>xwork-core</artifactId> <version>2.3.4.1</version> </dependency>
第一个简单例子:
public class LoginActtion implements Action { //实现Action接口 private String uname; public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } private String message; public String getUname() { return uname; } public void setUname(String uname) { this.uname = uname; } public String execute() throws Exception { this.setMessage("Hello!"+getUname()); return "success"; } }
Action:接口常量字符串含义
success:标识程序正常,返回用户结果。
none:表示处理正常结束,但不反回给用户。
error:表示处理结果失败。
input:表示需要更多用户输入才能顺利进行。
login:表示需要用户正确登陆后才能顺利进行。
配置文件:
<?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> <!-- 配置文件中只要添加以下配置,那么以后修改配置文件不用重启tomcat --> <constant name="struts.devMode" value="true" /> <package name="default" namespace="/" extends="struts-default"> <!-- 第一个action的例子 --> <!-- <action name="Hello" class="cn.wwy.action.LoginActtion"> <result name="success"> Login.jsp </result> </action>--> <action name="FilOne" class="cn.wwy.action.FileOne"> <result name="successone">MapInfo.jsp</result> <result name="input">MapInfo.jsp</result> </action> <!-- 登陆的action --> </package> <!-- Add packages here --> </struts>
Jsp页面
<body> <div> <h1> <s:property value="message"></s:property> </h1> </div> <form action="Hello" method="post"> <input name="uname" type="text"> <input type="submit" value="提交"> </form> </body>
wep.xml:
<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> <welcome-file-list> <welcome-file>Login.jsp</welcome-file> </welcome-file-list>
//用Servlet API 解耦的访问方式
private User user; public String execute() throws Exception { System.out.println(user.getUname()+"============================="); if (user.getUname().equals("wwy") && user.getPwd().equals("123")) { Map<String, Object> session = ActionContext.getContext().getSession(); session.put("uname", user.getUname()); return "successone"; }else { return ""; } }
做校验:
public class FileOne extends ActionSupport implements Action{ @Override public void validate() { if(user.getUname().equals("")){ addFieldError("uname","姓名不能为空"); }else if(user.getPwd().equals("")){ addFieldError("pwd","密码不能为空"); } }
<form action="FilOne" method="post"> <input type="text" name="user.uname"> <input type="text" name="user.pwd"> <input type="submit" value="登陆"> <s:fielderror name="uname"></s:fielderror> <s:debug></s:debug> <s:fielderror name="pwd"></s:fielderror> </form>
常用的校验标签:
<s:form></s:from> 获取form的值
<s:textfield></s:textfield> 文本输入框
<s:password></s:password> 密码输入框
<s:textarea></s:textarea>文本域输入框
<s:radio></s:radio> 单选按钮
<s:checkbox></s:checkbox>复选框
<s:submit></s:submit>提交标签
<s:reset></s:reset> 重置标签
<s:hidden></s:hidden>隐藏域标签
Struts 2访问Servlet API
在servlet中可以通过servlet API来获取Session,在Struts中如何获取Session呢?
解析:将用户名放入session 两种方案
1. 与Servlet API解耦的访问方式
--->01.使用ActionContext类获取ServletAPI对象对应的Map对象
--->02.Struts2向Action注入ServletAPI对象对应的Map对象
2. 与Servlet API耦合的访问方式
解耦方式:
方案一: 对Servlet API进行封装 ,借助ActionContext
提供了三个Map对象访问request、session、application作用域
通过ActionContext类获取这三个Map对象
Object get("request")
Map getSession()
Map getApplication()
耦合是指紧密结合的意思。简单的理解,如果你使用了或者继承了j2ee的部分,那么你的代码在非j2ee环境就不能使用。你使用了struts2的包和类,那么你的代码在spring mvc中就不可用。
而解耦就是把代码的关键逻辑脱离耦合,也就是这一部分代码可以脱离struts2使用。当然不可能全部解耦,例如和画面相关的部分不可能解耦。但是核心逻辑脱离是很简单的。