Ok,对于我来说2014注定是个不平常的一年,今天开通我的博客,定位JavaEE方向的技术博客,不指望能有多少浏览量,只希望自己能坚持下来。废话不多少,2014从Struts2开始!!
首先Struts2是什么,借用百科上的解释:是Struts1和WebWork技术基础上进行了合并的全新MVC框架。当我刚开始学习JSP+JavaBean+Servlet的时候开始我的第一个小项目,在不久前的一次电话面试中面试官问到我项目中使用的MVC框架是封装好的还是…,当时的我听说过SSH,甚至还不知道Struts还能叫做Struts MVC,哈被自己笑到了。
接着Struts2的工作流程,这个今天考试刚考到,个人觉得学习初期死记住这个流程在后面的学习中更容易深入对Struts2的理解,当然基于应付面试官的必要性也挺大的。
1.客户端提交给Web容器一个申请,通过层层过滤器找到核心控制器StrutsPrepareAndExecuteFilter(当然这个核心控制器也是一个过滤器,配置在web.xml中) |
2.由核心控制器将请求交给ActionMapper,来判断请求是否需要调用某个Action |
3.如果需要调用Action,则把请求交给ActionProxy,ActionProxy调用ConfigurationManager从配置文件(struts.xml)中读取配置信息 |
4.实例化ActionInvocation,在调用Action之前经过层层拦截器 |
5.Action返回结果到JSP或FreeMarker等上,在这过程中也要经过层层拦截器 |
现在通过一个简单实例来介绍一下Struts2的详细配置:
1.当然要去官网(http://struts.apache.org/downloads.html)下载一个依赖包,解压后有四个文件夹。顾名思义,app应用包里有几个打成war包的示例,docs里面是一些帮助文档,lib下面是进行struts开发所需要的jar包,src下存放的是源码。
2.建项目,我使用的是eclipse,建立一个web项目非常方便。然后导入几个必须以及常用到的jar包到项目WEB-INF下的lib文件夹里,我习惯性先导入这几个:commons-fileupload-1.3.jar;commons-io-2.0.1.jar;commons-lang3-3.1.jar;commons-logging-1.1.3.jar;freemarker-2.3.19.jar;javassist-3.11.0.GA.jar;ognl-3.0.6.jar;struts2-core-2.3.15.1.jar;xwork-core-2.3.15.1.jar
3.编辑web.xml文件,在这一步中,大多数人习惯在解压包里搜索到一个web.xml文件,复制粘贴到WEB-INF下,当然我也是这样干的,随后简单配置一下:
1 <?xml version="1.0" encoding="UTF-8"?> 2 <web-app id="WebApp_9" version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 3 <display-name>Struts Blank</display-name> 4 <filter> 5 <filter-name>struts2</filter-name> 6 <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class> 7 </filter> 8 <filter-mapping> 9 <filter-name>struts2</filter-name> 10 <url-pattern>/*</url-pattern> 11 </filter-mapping> 12 <welcome-file-list> 13 <welcome-file>index.html</welcome-file> 14 </welcome-file-list> 15 </web-app>
在这里只配置了一个简单的核心控制器,作用范围/*你们都懂……
4.写个登陆吧login.jsp:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 <form action="login" method="post"> 11 username:<input type="text" name="username" /><br/> 12 password:<input type="password" name="password" /><br/> 13 <input type="submit" value="login" /> 14 </form> 15 </body> 16 </html>
再写个登陆成功的响应吧suc.jsp:
1 <%@ page language="java" contentType="text/html; charset=UTF-8" 2 pageEncoding="UTF-8"%> 3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 4 <html> 5 <head> 6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 7 <title>Insert title here</title> 8 </head> 9 <body> 10 username:${username }<br/> 11 password:${password } 12 </body> 13 </html>
5.随后建一个Action,为了省时间我就直接这样干了:
1 public class LoginAction { 2 private String username; 3 private String password; 4 public String getUsername() { 5 return username; 6 } 7 public void setUsername(String username) { 8 this.username = username; 9 } 10 public String getPassword() { 11 return password; 12 } 13 public void setPassword(String password) { 14 this.password = password; 15 } 16 public String execute(){ 17 if("tom".equals(username)&&"123".equals(password)){ 18 return "success"; 19 }else{ 20 return "input"; 21 } 22 } 23 }
然后是在struts.xml里配置这个Action:
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 8 <constant name="struts.enable.DynamicMethodInvocation" value="false" /> 9 <constant name="struts.devMode" value="true" /> 10 11 <package name="default" namespace="/" extends="struts-default"> 12 13 <default-action-ref name="index" /> 14 15 <global-results> 16 <result name="error">/error.jsp</result> 17 </global-results> 18 19 <global-exception-mappings> 20 <exception-mapping exception="java.lang.Exception" result="error"/> 21 </global-exception-mappings> 22 23 <action name="login" class="com.fit.struts.action.LoginAction" > 24 <result name="success">suc.jsp</result> 25 <result name="input">login.jsp</result> 26 </action> 27 </package> 28 29 <include file="example.xml"/> 30 </struts>
关于这个配置文件里的一些常量配置我会在下一次详细介绍一下,现在太晚了等会还要上课去……
最后跑一下程序!!