一口一口吃掉Struts(一)——用JSP+Servlet演示Struts的基本原理 .
2014-03-24 15:58
274 查看
struts是开源项目。它通过采用 Java Servlet/JSP 技术,实现了基于Java EE Web应用的MVC的应用框架。Struts继承了MVC的各项特性,并根据J2EE的特点,做了相应的变化与扩展。
MVC即Model-View-Controller的缩写,是一种常用的设计模式(具体自己百度吧)
我们用JSP+Servlet实现“一个应用的增改信息”,先来看一下,如果没有Struts,我们一般都是怎么做的。
废话少说,果断上代码
V层
用JSP实现
[html]
view plaincopyprint?
<body>
<a href="Servlet/Add.action">测试增加》》》》》》》》》》</a>
<a href="Servlet/Modify.action">测试修改》》》》》》》》》》</a>
</body>
C层
前端控制器Servlet
[java]
view plaincopyprint?
package Control;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Controller extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//截取字符串
String requestURI=request.getRequestURI();
String flagAction = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));
IAction action =null;
//根据字符串转发相应的Action
if("/Servlet/Add".equals(flagAction))
{
//TODO 采用读取配置文件,反射,这里省略,就直接NEW了
action=new AddAction();
}else if("/Servlet/Modify".equals(flagAction))
{
action =new ModifyAction();
}
//TODO 获取表单信息
//TODO 将字符串转换为我们需要的格式等等,向下传递
//得到转向信息
String forwordString=action.Excute();
//转发
request.getRequestDispatcher(forwordString).forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
配置文件
[html]
view plaincopyprint?
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>Control.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
Actoin接口和实现Action接口的增和改
[java]
view plaincopyprint?
package Control;
public interface IAction {
public String Excute();
}
[java]
view plaincopyprint?
package Control;
import Model.Manage;
public class AddAction implements IAction {
public String Excute() {
//执行MODEL层逻辑
Manage manage=new Manage();
manage.Add();
//返回转向信息
// TODO 可以在配置文件中读
return "/AddSuccess.jsp";
}
}
[java]
view plaincopyprint?
package Control;
import Model.Manage;
public class ModifyAction implements IAction {
public String Excute() {
//执行MODEL层逻辑
Manage manage=new Manage();
manage.Modify();
//返回转向信息
//TODO 可以在配置文件中读
return "/ModifySuccess.jsp";
}
}
M层
实现业务逻辑
[java]
view plaincopyprint?
package Model;
public class Manage {
public void Add()
{
System.out.println("添加》》》》");
}
public void Modify()
{
System.out.println("更改》》》》");
}
}
我们这么实现会有哪些问题?
1、实例化响应的Action,我们要么用if语句,手动创建,要么需要自己读配置文件,获取Action,反射实例化
2、表单过来的所有数据都是字符串,我们需要手动转成响应的格式
3、转向信息,我们可能会写死,也可能手动去配置文件读
4、……
我们需要手动做很多事,而且很多重复劳动,还容易出错。
如果有个东西能为我代劳就简单得多了,所以Struts应运而生,Struts把我们上面提到的那些都做了封装,让我们的开发更高效,更有灵活性。上面的代码,用时序图表示如下,我们完全可以看做是Struts实现地基本原理。
这篇先说这么多,下篇继续
MVC即Model-View-Controller的缩写,是一种常用的设计模式(具体自己百度吧)
我们用JSP+Servlet实现“一个应用的增改信息”,先来看一下,如果没有Struts,我们一般都是怎么做的。
废话少说,果断上代码
V层
用JSP实现
[html]
view plaincopyprint?
<body>
<a href="Servlet/Add.action">测试增加》》》》》》》》》》</a>
<a href="Servlet/Modify.action">测试修改》》》》》》》》》》</a>
</body>
<body> <a href="Servlet/Add.action">测试增加》》》》》》》》》》</a> <a href="Servlet/Modify.action">测试修改》》》》》》》》》》</a> </body>
C层
前端控制器Servlet
[java]
view plaincopyprint?
package Control;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Controller extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
//截取字符串
String requestURI=request.getRequestURI();
String flagAction = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));
IAction action =null;
//根据字符串转发相应的Action
if("/Servlet/Add".equals(flagAction))
{
//TODO 采用读取配置文件,反射,这里省略,就直接NEW了
action=new AddAction();
}else if("/Servlet/Modify".equals(flagAction))
{
action =new ModifyAction();
}
//TODO 获取表单信息
//TODO 将字符串转换为我们需要的格式等等,向下传递
//得到转向信息
String forwordString=action.Excute();
//转发
request.getRequestDispatcher(forwordString).forward(request, response);
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
package Control; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class Controller extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //截取字符串 String requestURI=request.getRequestURI(); String flagAction = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf(".")); IAction action =null; //根据字符串转发相应的Action if("/Servlet/Add".equals(flagAction)) { //TODO 采用读取配置文件,反射,这里省略,就直接NEW了 action=new AddAction(); }else if("/Servlet/Modify".equals(flagAction)) { action =new ModifyAction(); } //TODO 获取表单信息 //TODO 将字符串转换为我们需要的格式等等,向下传递 //得到转向信息 String forwordString=action.Excute(); //转发 request.getRequestDispatcher(forwordString).forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); } }
配置文件
[html]
view plaincopyprint?
<servlet>
<servlet-name>Controller</servlet-name>
<servlet-class>Control.Controller</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Controller</servlet-name>
<url-pattern>*.action</url-pattern>
</servlet-mapping>
<servlet> <servlet-name>Controller</servlet-name> <servlet-class>Control.Controller</servlet-class> </servlet> <servlet-mapping> <servlet-name>Controller</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
Actoin接口和实现Action接口的增和改
[java]
view plaincopyprint?
package Control;
public interface IAction {
public String Excute();
}
package Control; public interface IAction { public String Excute(); }
[java]
view plaincopyprint?
package Control;
import Model.Manage;
public class AddAction implements IAction {
public String Excute() {
//执行MODEL层逻辑
Manage manage=new Manage();
manage.Add();
//返回转向信息
// TODO 可以在配置文件中读
return "/AddSuccess.jsp";
}
}
package Control; import Model.Manage; public class AddAction implements IAction { public String Excute() { //执行MODEL层逻辑 Manage manage=new Manage(); manage.Add(); //返回转向信息 // TODO 可以在配置文件中读 return "/AddSuccess.jsp"; } }
[java]
view plaincopyprint?
package Control;
import Model.Manage;
public class ModifyAction implements IAction {
public String Excute() {
//执行MODEL层逻辑
Manage manage=new Manage();
manage.Modify();
//返回转向信息
//TODO 可以在配置文件中读
return "/ModifySuccess.jsp";
}
}
package Control; import Model.Manage; public class ModifyAction implements IAction { public String Excute() { //执行MODEL层逻辑 Manage manage=new Manage(); manage.Modify(); //返回转向信息 //TODO 可以在配置文件中读 return "/ModifySuccess.jsp"; } }
M层
实现业务逻辑
[java]
view plaincopyprint?
package Model;
public class Manage {
public void Add()
{
System.out.println("添加》》》》");
}
public void Modify()
{
System.out.println("更改》》》》");
}
}
package Model; public class Manage { public void Add() { System.out.println("添加》》》》"); } public void Modify() { System.out.println("更改》》》》"); } }
我们这么实现会有哪些问题?
1、实例化响应的Action,我们要么用if语句,手动创建,要么需要自己读配置文件,获取Action,反射实例化
2、表单过来的所有数据都是字符串,我们需要手动转成响应的格式
3、转向信息,我们可能会写死,也可能手动去配置文件读
4、……
我们需要手动做很多事,而且很多重复劳动,还容易出错。
如果有个东西能为我代劳就简单得多了,所以Struts应运而生,Struts把我们上面提到的那些都做了封装,让我们的开发更高效,更有灵活性。上面的代码,用时序图表示如下,我们完全可以看做是Struts实现地基本原理。
这篇先说这么多,下篇继续
相关文章推荐
- 一口一口吃掉Struts(一)——用JSP+Servlet演示Struts的基本原理
- 一口一口吃掉Struts(一)——用JSP+Servlet演示Struts的基本原理
- 一口一口吃掉Struts(一)——用JSP+Servlet演示Struts的基本原理
- 一口一口吃掉Struts(一)——用JSP+Servlet演示Struts的基本原理
- Struts(一)——用JSP+Servlet演示Struts的基本原理 .
- struts(一)——jsp+Servlet讲解MVC框架基本原理
- 一口一口吃掉Struts(五)——测试Struts标签库 .
- 一口一口吃掉Struts(八)——四种forward
- 一口一口吃掉Struts(三)——一个简单Struts实例
- 一口一口吃掉Struts(八)——四种forward
- 【struts1】--Servlet讲解MVC框架基本原理
- org.apache.struts.taglib.bean.CookieTei cannot be cast to javax.servlet.jsp.tagext.TagExtraInfo
- jsp引用servlet生成的验证码代码演示
- 一口一口吃掉Struts(三)——一个简单Struts实例
- struts/Servlet,action转到jsp后,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径)
- jsp/servlet/struts/hibernate/spring内部实现机制
- jsp、Servlet、Struts1.X 中使用application对象
- Struts/Servlet,action转到jsp后,CSS失效,路径问题(struts2,jsp路径,action路径,action跳转,相对路径,绝对路径)
- jsp+servlet+javabean && struts+spring+hibernate
- struts中调用servlet动态生成柱状图到jsp页面