一、Struts2:是一个基于MVC设计模式的Web应用框架,它本质上相当于一个servlet;用于jsp页面与Java代码之间的交互。
1、核心:Filter拦截器,对所有的请求进行拦截。
2、工作流程:http://localhost:8080/项目名/请求 --> 被web.xml中的Struts拦截器拦截到strus.xml文件-->找到对应的action里面对应的name,也就找到了对应的类-->通过action里面的method参数找到对应的执行方法,并返回一个字符串-->找到action标签中的result标签中的name与返回值相匹配-->跳转到向应的jsp页面。
3、配置:
1、将strus2所需的jar包添加到 项目名\WEB-INF\lib 中
2、复制struts.xml文件到 src目录下
3、写action代码。注意:
a)、Struts的action方法都是待返回值的方法
b)、 在action类中需要实现modelDriven 来自动的将页面参数注入到对象中去。因此jsp页面的标签中的name属性必须跟Java类的属性字段完全对应。
4、在web.xml文件中编写Strus2的Filter核心拦截器
5、在strust.xml文件中去配置package标签中的属性。
二、Struts2的简单搭建:
1、新建一个web项目
2、新建一个Person类
1 package com.st.bean; 2 3 public class Person { 4 private int id; 5 private String name; 6 private int age; 7 public int getId() { 8 return id; 9 } 10 public void setId(int id) { 11 this.id = id; 12 } 13 public String getName() { 14 return name; 15 } 16 public void setName(String name) { 17 this.name = name; 18 } 19 public int getAge() { 20 return age; 21 } 22 public void setAge(int age) { 23 this.age = age; 24 } 25 }
3、将Struts2所需的jar包考到lib文件下
4、在web.xml文件中编写struts2的核心拦截器,这里面的类容最好直接拷贝不要手敲,容易出错。
1 <!-- ********************************** --> 2 <filter> 3 <filter-name>struts2</filter-name> 4 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 5 </filter> 6 <filter-mapping> 7 <filter-name>struts2</filter-name> 8 <url-pattern>/*</url-pattern> 9 </filter-mapping> 10 <!-- ********************************** -->
5、在index.jsp编写HTML代码,注意标签的name值和Person类的字段相对应
<%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Struts2核心拦截器示例</title> </head> <body> <form method="post" action="<%=request.getContextPath() %>/person/personAdd"> <table> <tr> <td>ID:</td> <td><input type="text" name="id" /></td> </tr> <tr> <td>姓名:</td> <td><input type="text" name="name" /></td> </tr> <tr> <td>年龄:</td> <td><input type="text" name="age" /></td> </tr> <tr> <td><input type="submit" /></td> <td><input type="reset" /></td> </tr> </table> </form> </body> </html>
6、拷贝一个struts.xml文件到src文件下,修改package标签中的属性值,如果action标签中不指定method属性,那么会默认的执行execute()方法。
1 <?xml version="1.0" encoding="UTF-8" ?> 2 <!DOCTYPE struts PUBLIC 3 "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" 4 "http://struts.apache.org/dtds/struts-2.0.dtd"> 5 6 <!-- <struts> 7 <package name="" namespace="url的中间路径" extends="struts-default"> 8 <action name="访问的路径" class="对应的action类" method="类里面对应的方法" > 9 <result name="action方法里面返回的字符串" >对应的jsp页面的路径</result> 10 </action> 11 </package> 12 </struts> --> 13 <struts> 14 <package name="person" namespace="/person" extends="struts-default" > 15 <action name="personAdd" class="com.st.action.PersonAction" method="personAdd"> 16 <result name="success">/index.jsp</result> 17 </action> 18 </package> 19 </struts>
7、编写action代码:继承PersonAction得到execute()方法,实现ModelDriven接口重写getModel方法
1 package com.st.action; 2 3 import com.opensymphony.xwork2.ActionSupport; 4 import com.opensymphony.xwork2.ModelDriven; 5 import com.st.bean.Person; 6 7 8 public class PersonAction extends ActionSupport implements ModelDriven<Person>{ 9 10 private Person person; 11 //如果不指定action中的method,就会默认的走这个方法 12 public String execute() throws Exception{ 13 return SUCCESS; 14 } 15 //主题在Struts2中的action中的方法都必须返回一个String类型的参数 16 public String personAdd(){ 17 System.out.println(person.getId()+"---"+person.getName()+"----"+person.getAge()); 18 return SUCCESS; 19 } 20 //让jsp页面的name对应的value自动注入到对象中的属性中去。 21 public Person getModel() { 22 this.person = new Person(); 23 return person; 24 } 25 }