提要:最近写了一个2-3各页面的使用Struts2的Demo,在这里做下总结,都已经3年多没做J2EE了,有些感觉都快找不到了。
目录
1.必备开发工具
2.必备jar包
3.了解知识点
4.遇到的问题
一、必备开发工具
1.MyEclipse
2.Tomcat
3.JDK
4.MySQL
二、必备jar包
1.commons-collections-3.2.jar
2.commons-dbcp-1.2.2.jar
3.commons-io-1.4.jar
4.commons-lang-2.3.jar
5.commons-pool.jar
6.freemarker-2.3.15.jar
7.mysql-connector-java-5.1.6-bin.jar
8.ognl-2.7.3.jar
9.struts2-core-2.1.8.jar
10.xwork-core-2.1.6.jar
三、了解知识点
1.Struts2简介
Struts2与Struts1没有太多直接联系,是基于WebWork2发展而来.2.Struts2框架的体系结构
C控制器 : FilterDispatcher(2.1.8之前版本使用),StrutsPrepareAndExecuteFilter(2.1.8及后续版本使用) V视图 : Result组件(JSP,freemarker,json等各种视图响应),Struts2标签+OGNL M模型 : Action组件,拦截器组件3.Struts2主要组件介绍 FilterDispatcher:主要是负责请求和处理的转发,调用拦截器,Action,Result组件处理. Action:主要是负责接收请求参数,执行业务处理. Result:主要负责视图响应,比如完成JSP的跳转,将对象转成json字符并输出等 Interceptor : 主要负责封装共通处理逻辑.比如将请求信息填充到Action对象(内置),权限检查等共通处理(自定义)4.Struts2配置文件介绍
struts.xml : 开发者定义,定义程序的Action,拦截器,Result等组件 struts.properties : 开发者定义,定义框架的一些属性参数 struts-default.xml : 框架内置,定义框架内置的拦截器,Result和Action等组件 default.properties : 框架内置,定义框架的一些默认参数值 struts-plugin.xml : 插件内置,定义整合新技术的拦截器和Result组件5.Struts2核心处理流程 (1)服务器启动时,控制器解析struts.xml,struts-default.xml,default.properties,struts.properties,struts-plugin.xml配置文件 (2)客户所有请求发动到控制器,控制根据配置判断是否执行Struts2处理.(默认处理*.action或者*) (3)如果属于Struts2请求,创建Action,拦截器等对象执行处理 a.执行拦截器前期处理 b.执行Action对象 c.执行Result生成响应信息 d.执行拦截器后期处理6.入门实例
(1)引入开发包 struts2-core-2.1.8.jar xwork-core-2.1.6.jar freemarker-2.3.15.jar ognl-2.7.3.jar commons-fileupload-1.2.1.jar commons-io-1.3.2.jar javassist.jar(2.2版本需要) (2)配置控制器 <filter> <filter-name>Struts2Filter</filter-name> <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> </filter> <filter-mapping> <filter-name>Struts2Filter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> (3)添加主配置文件 在src下创建struts.xml主配置文件,dtd格式参考struts-default.xml (4)添加视图,Action,及Action配置7.Action相关配置
(1) namesapce属性:命名空间,用于限定Action请求名 示例1. namesapce属性为/user12 3
http://localhost:8080/struts2.1/user/index.action
示例2. namespace属性为/ http://localhost:8080/struts2.1/login.action (2) 统配符*的使用 <action>元素的name属性可以使用若干个通配符*, 可以在其他属性中使用{1},{2}格式引用通配符代表的字符串 (3)动态方法调用的请求格式 /命名空间/请求名!业务方法名.action (4)<param>元素的作用 可以为Action,拦截器,Result组件对象属性指定初始值.8.如何使用request,session等对象 a. 从ActionContext获取Map封装类型 Map<String,Object> request = (Map<String,Object>)ActionContext.getContext().get("request"); Map<String,Object> session = ActionContext.getContext().getSession(); Map<String,Object> application = ActionContext.getContext().getSession(); b. 从ServletActionContext获取 ServletActionContext.getPageContext(); ServletActionContext.getRequest(); ServletActionContext.getServletContext(); ServletActionContext.getResponse();四.遇到的问题
1.关于表单提交和Ajax提交
先说下Ajax提交:
html
1
js(这里用的是JQuery)
1 function login(){ 2 if($("#username").val().length==0){ 3 alert("用户名不能为空"); 4 return; 5 } 6 if($("#password").val().length==0){ 7 alert("密码不能为空"); 8 return; 9 }10 $.ajax({11 type:'post',12 url:'${pageContext.request.contextPath}/theme/login.action',13 data:{14 'username':$("#username").val(),15 'password':$("#password").val(),16 },17 dataType:'json',18 success:function(returnData){19 if(returnData.success==true){20 window.location.replace("${pageContext.request.contextPath}/theme/main.jsp");21 } else {22 alert("用户名或密码错误");23 }24 },25 error:function(e) {26 alert("登录失败");27 }28 });29 }
再说Form表单:
1
在该请求过程中会带2个参数到后台,参数名1:username,参数名2:password
1 public class LoginAction extends BaseAction{ 2 public String username; 3 public String password; 4 5 public String doLogin(){ 6 User user = UserDao.getUser(username,password); 7 if(user != null) { 8 ActionContext.getContext().getSession().put(Constanst.USERNAME_OF_SESSION, username); 9 ActionContext.getContext().getSession().put(Constanst.PASSWORD_OF_SESSION, password);10 flag = true;11 } else {12 msg = "用户名或密码错误";13 }14 String jsonStr = "{\"success\":" + flag + ", \"msg\":\"" + msg + "\"}";15 try {16 this.setInputStream(new ByteArrayInputStream(jsonStr.getBytes("utf-8")));17 } catch (UnsupportedEncodingException e) {18 e.printStackTrace();19 }20 return SUCCESS;21 }22 23 public String getUsername() {24 return username;25 }26 27 public void setUsername(String username) {28 this.username = username;29 }30 31 public String getPassword() {32 return password;33 }34 35 public void setPassword(String password) {36 this.password = password;37 }38 39 }
2.请求返回json和html的写法
待续
3.连接数据库的问题
待续
4.先上图
源代码: