标签:struts2 开源框架 依赖注入 mvc struts 2
6月21日,晴。“明月别枝惊鹊,清风半夜鸣蝉。稻花香里说丰年。听取蛙声一片。“
因为有了Struts1,俺们了解了开源框架;因为有了Struts2,俺们又知道了两个开源框架还可以合为一体。
写一个常见的struts2的应用,热热身。框架框架,就要先搭一个架子结构,然后再抹灰砌砖...
1、搭建Struts 2开发环境
进入Struts 2的官方网站http://struts.apache.org/,下载struts-2.3.16.3-all.zip。Struts 2安装包只是一个简单的压缩文件,解压即可。
2、创建一个Web项目,导入Struts 2类库
在新建立的项目基础上开始配置Struts2的功能,添加Struts 2的JAR包。在Struts 2安装目录下的lib子目录中,有很多JAR包,不同的应用需要的JAR包是不同的。对于初学者比较简单的做法是直接从解压缩的struts-2.3.16.3-all\struts-2.3.16.3\apps\struts2-blank\WEB-INF\lib目录中的所有.jar文件拷贝到新建的项目的lib目录下。
3、 在web.xml文件中配置FilterDispatcher
编辑WebRoot\WEB-INF\web.xml文件,添加FilterDispatcher过滤器的配置,web.xml的完整代码如下。初学者同样可以参考struts-2.3.16.3\apps\struts2-blank\WEB-INF文件夹下面的web.xml文件。
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>Struts2_01</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <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> </web-app>
<filter>指定了需要加载的Struts 2核心控制器org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter,而<filter-mapping>使用通配符“/*”来拦截所有的URL请求,保证了用户请求都被Struts
2接收处理。
4、编写Action类-LonginAction.java
package edu.eurasia.action; public class LonginAction { private String username; private String password; public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } /*public String execute() throws Exception{ return "success"; }*/ public String detail() throws Exception{ return "success"; } }在LonginAction类中,没有继承任何类,也没有实现任何接口,是一个标准的Java类。
5、视图资源——编写请求login.jsp和结果页面result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib prefix="s" uri="/struts-tags"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <s:form action="login" namespace="/mystruts"> <s:textfield key="username" /> <s:password key="password" /> <s:submit /> </s:form> <!-- <form action="mystruts/login" method="post" > username: <input type="text" name="username" /><br/> password: <input type="password" name="password" /> <br /> <input type="submit" name="submit" /> </form> --> </body> </html>结果页面result.jsp
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> username:${username}<br/> password: ${password} </body> </html>
6、配置struts.xml文件
<?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> <package name="struts2" namespace="/mystruts" extends="struts-default"> <action name="login" class="edu.eurasia.action.LonginAction" method="detail"> <result name="success">/result.jsp</result> </action> </package> </struts>7、运行结果和项目结构
思考:以上代码,比较常见,大多数初学者都能模仿-配置-运行,得到想要的结果。可是,很多人总感觉”不识庐山真面目“,到底用户名和密码这两个数据是如何传输的,百思不解,徒有”只缘身在此山中“的叹息。
下面,我们不妨解析一下数据如何注入的,又是如何呈现的。
一、分析结果页面result.jsp
结果使用EL表达式,使JSP写起来更加简单。除了上述一种写法,你可能还看到:
第二种方式:
username: ${requestScope.username} <br/> password: ${requestScope.password}第三种方式:
username: ${param.username} <br/> password: ${param.password}还可以不使用EL表达式,可以这样写:
第一种方式:
username: ${requestScope.username} <br/> password: ${requestScope.password}第二种方式:
username: <%=request.getAttribute("username") %><br/> password: <%=request.getAttribute("password") %>
上述方法,均可得到相同结果。可以看出,实际上,
${param.username} 等价于 request.getParamter("username"),这两种方法一般用于服务器从页面或者客户端获取的内容。
${requestScope.username} 等价于 request.getAttribute("username"),一般是从服务器传递结果到页面,在页面中取出服务器保存的值。
那么,写成如下方式,行不行?
username: ${sessionScope.username} <br/> password: ${sessionScope.password}试一下,好像不行。原因是:
requestScope是el表达式的隐含对象,和变量作用域差不多。 el表达式的隐含对象包括:
pageScope,requestScope,sessionScope,applicationScope
例如:${message}
el会依次到pageScope,requestScope,sessionScope,applicationScope中寻找,直到找到为止。
第三十二天 框架的启蒙之路 —Struts2的思考,布布扣,bubuko.com
标签:struts2 开源框架 依赖注入 mvc struts 2
原文地址:http://blog.csdn.net/zwszws/article/details/32939159