Struts2体验
1.Struts2简介
Struts 2是一个MVC框架,以WebWork框架的设计思想为核心,吸收了Struts 1的部分优点
Struts 2拥有更加广阔的前景,自身功能强大,还对其他框架下开发的程序提供很好的兼容性
Struts官网
apps目录:Struts2示例应用程序
docs目录:Struts2指南、向导、API文档
lib目录:Struts 2的发行包及其依赖包
src目录:Struts 2项目源代码
2.Struts2案例
使用struts2开发步骤:
1.引入相关依赖jar包
2.web.xml文件配置核心过滤器
3.视图层页面
4.控制层Action
5.struts.xml文件的配置
1.1登陆案例(零散参数的自动装配)
1.引入相关依赖jar包
1 <dependency> 2 <groupId>javaee</groupId> 3 <artifactId>javaee-api</artifactId> 4 <version>5</version> 5 </dependency> 6 7 <dependency> 8 <groupId>org.apache.struts</groupId> 9 <artifactId>struts2-core</artifactId> 10 <version>2.3.4.1</version> 11 </dependency> 12 13 <dependency> 14 <groupId>org.apache.struts.xwork</groupId> 15 <artifactId>xwork-core</artifactId> 16 <version>2.3.4.1 </version> 17 </dependency>
2.web.xml文件配置核心过滤器
1 <filter> 2 <filter-name>struts</filter-name> 3 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 4 </filter> 5 <filter-mapping> 6 <filter-name>struts</filter-name> 7 <url-pattern>/*</url-pattern> 8 </filter-mapping>
3.视图层页面
1 <%@ taglib prefix="s" uri="/struts-tags" %> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <html> 4 <head> 5 <title>Title</title> 6 </head> 7 <body> 8 <%--struts标签 --%> 9 <s:form name="form1" namespace="/" method="POST" action="userAction"> 10 用户名:<s:textfield name="username"></s:textfield><br/> 11 密码:<s:password name="password"></s:password><br/> 12 <s:submit value="登录"></s:submit> 13 </s:form> 14 </body> 15 </html>
4.控制层Action
1 public class LoginAction implements Action { 2 private String username; 3 private String password; 4 public String execute() throws Exception { 5 //如果输入的用户名密码是admin则登陆成功,否则登录失败 6 if (username.equals("admin") && password.equals("admin")){ 7 return SUCCESS; 8 }else { 9 return LOGIN; 10 } 11 } 12 13 public String getUsername() { 14 return username; 15 } 16 17 public void setUsername(String username) { 18 this.username = username; 19 } 20 21 public String getPassword() { 22 return password; 23 } 24 25 public void setPassword(String password) { 26 this.password = password; 27 } 28 }
5.struts.xml文件的配置
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN" 4 "http://struts.apache.org/dtds/struts-2.3.dtd"> 5 6 <struts> 7 <package name="default" namespace="/" extends="struts-default"> 8 <!--零散参数的自动装配--> 9 <action name="userAction" class="cn.happy.controller.LoginAction"> 10 <result name="success"> 11 day01/success.jsp 12 </result> 13 <result name="login"> 14 day01/login.jsp 15 </result> 16 </action> 17 </package> 18 </struts>
1.2 Struts2各个部件的协作图
1.3登陆案例加强(javabean自动装配)
Action类:
1 public class LoginBeanAction implements Action,ModelDriven<UserInfo> { 2 private UserInfo info=new UserInfo(); 3 public String execute() throws Exception { 4 if (info.getUsername().equals("admin") && info.getPassword().equals("admin")){ 5 //解耦方式获取sesion 6 //提供了三个Map对象访问request、session、application作用域 通过ActionContext类获取这三个Map对象 7 Map<String, Object> map = ActionContext.getContext().getSession(); 8 Map<String, Object> mapapplication = ActionContext.getContext().getApplication(); 9 Object request = ActionContext.getContext().get("request"); 10 map.put("username",info.getUsername()); 11 return SUCCESS; 12 } 13 else { 14 return LOGIN; 15 } 16 } 17 18 public UserInfo getInfo() { 19 return info; 20 } 21 22 public void setInfo(UserInfo info) { 23 this.info = info; 24 } 25 26 public UserInfo getModel() { 27 return info; 28 } 29 }
jsp页面
1 <%@ taglib prefix="s" uri="/struts-tags" %> 2 <%@ page contentType="text/html;charset=UTF-8" language="java" %> 3 <html> 4 <head> 5 <title>Title</title> 6 </head> 7 <body> 8 <%--struts标签 --%> 9 <s:form name="form1" namespace="/" method="POST" action="loginbean"> 10 用户名:<s:textfield name="username"></s:textfield><br/> 11 密码:<s:password name="password"></s:password><br/> 12 <s:submit value="登录"></s:submit> 13 </s:form> 14 </body> 15 </html>
1.4Struts 2访问Servlet API
在servlet中可以通过servlet API来获取Session,在Struts中如何获取Session呢?
解析:将用户名放入session 两种方案
1. 与Servlet API解耦的访问方式
--->方案一:使用ActionContext类获取ServletAPI对象对应的Map对象
--->方案二:向Action注入ServletAPI对象对应的Map对象
2. 与Servlet API耦合的访问方式
--->方式一:通过ActionContext的子类ServletActionContext实现
--->方式二:向Action实例注入Servlet API对象
解耦方式:
方案一:
方案二:
耦合方式
方案一: