Web MVC框架-命令及页面跳转

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

   对于开发对于页面连接尤如蜘蛛网一样,经常会有一堆具有千头万绪的关联页面组成的大中型Web应用来说,如何组织及处理页面的跳转成为一个MVC框架非常关键因素。Struts1之所以能得到大家的认可,是因为他基本解决了数据与视图分离的问题,之所以Struts升级一个版本到Struts2后不再“Struts”了,核心原因除了框架核心技术落后、很多地方受限制以外,一个原因是他无法很好地组织及处理页面跳转问题。当然尽管升级到了Struts2,但相对于Rails等新兴MVC的框架来说,显得死板了很多。
   而EasyJWeb在页面组织及处理页面跳转等方面,提供了很多更加灵活的功能,很多思想来自于Spring MVC、Rails等一些新兴Web框架的精髓,他能让你用比较简洁的代码、甚至不用代码来实现页面的跳转。
  在Web应用程序开发中,我们经常遇到如下的需求:
  1、从这个页面连接到另外一个页面;
  2、在服务器执行完某一段程序后,把输出导向另外一个页面;
  3、在服务器端执行完某一段程序后,把输出导向到另外一段程序继续执行;
  4、在服务器程序执行完后,选择使用一个页面呈现用户输出;
  5、页面跳转要具有较强的环境适应能力,比如部署在跟目录下跟部署到其它Context目录下都能执行正确的跳转;
  6、还有更变态的,比如EasyJF官网,要求使用动态地址访问的时候,看到的地址全是动态,当使用静态地址访问的时候,地址全是静态的,Java Web服务器不能工作了,Apache或IIS也要保证网页能正常访问。
  7、有的人喜欢使用/user/edit/1这样的url,有的人喜欢使用/user.ejf?cmd=edit&id=1这样的url,我们要求不管使用哪一种url样式访问页面,连接都会非常友好的变成用户喜爱的形式。

   可以说,现在很少有框架能完全满足或者为用户考虑到如此复杂多变而对于我们国人来说应用性又非常广泛的需求。一些框架即使提供上面一些功能也是以书写复杂的代码及配置文件为代价的。在EasyJWeb中,提供了上面所列的这些功能,并提供了非常简洁的调用接口及方法。
   针对上面的几点,EasyJWeb的解决方案:
  1,这个用<a>标签,不用说了。
  2、在服务器执行完某一段程序后,把输出导向另外一个页面;
  返回html类型的Page对象。
  3、在服务器端执行完某一段程序后,把输出导向到另外一段程序继续执行;
   使用forward或者go方法。
  4、在服务器程序执行完后,选择使用一个页面呈现用户输出;
   使用page方法。
  5、页面跳转要具有较强的环境适应能力,比如部署在跟目录下跟部署到其它Context目录下都能执行正确的跳转;
  在页面模板中使用$html.url,比如:<a href="$html.url('user.list')">用户列表</a>。
  6、不同地址样式转移
  在页面模板中使用$html.forward,比如<a href="$html. forward'('news.technic')">技术前沿</a>。这样动态的时候访问到的是news.ejf?cmd= technic,静态的时候访问到的是/news/technic.html。
  7、传统及现代的URL样式转换
   仍然是使用$html.url,或$html.forward标签,他能感知你的url样式。比如:<a href="$html.url('user.add')">添加用户</a>。你使用user.ejf?cmd=lsit,访问应用,则当点添加user.ejf?cmd=add。而如果你使用/ejf/user/list访问应用,则编辑按钮的连接变成ejf/user/add。
  
  在代码中,除了可以使用最原始的return new Page()方式返回用户的视图模板以外,还可以使用一些快捷方法来实现灵活的视图查询及跳转。比如,go、forward、page等方法。下面看一个用户添删改查的示例中的Action代码如下:

import  com.easyjf.container.annonation.Inject;
import  com.easyjf.core.support.query.QueryObject;
import  com.easyjf.util.CommUtil;
import  com.easyjf.web.WebForm;
import  com.easyjf.web.core.AbstractPageCmdAction;
import  com.easyjf.web.tools.IPageList;

public   class  UserAction  extends  AbstractPageCmdAction  {
 
 @Inject
 
private UserService service;
 
 
public void setService(UserService service) {
  
this.service = service;
 }

 
/**
  * 显示添加用户的界面user/edit.html
  
*/

 
public void add()
 
{
  page(
"edit");
 }

 
public void edit(WebForm form)
 
{
  String id
=(String)form.get("id");
  User user
=this.service.getUser(new Long(id));
  form.addPo(user);
 }

 
public void save(WebForm form)
 
{
  User user
=form.toPo(User.class);
  
if(hasErrors())
  
{
   page(
"edit");
   
return;
  }

  service.saveUser(user);
  forward(
"list");
 }

 
public void update(WebForm form)
 
{
  String id
=(String)form.get("id");
  User user
=this.service.getUser(new Long(id));
  form.toPo(user,
true);
  
if(hasErrors())
  
{
   page(
"edit");
   
return;
  }

  service.updateUser(user);
  forward(
"list");
 }

 
public void delete(WebForm form)
 
{
  String id
=(String)form.get("id");
  User user
=this.service.getUser(new Long(id));
  service.delUser(user);
  go(
"list");
 }

 
public void list(WebForm form)
 
{
  QueryObject qo
=form.toPo(QueryObject.class);
  IPageList pageList
=service.queryUser(qo);
  CommUtil.saveIPageList2WebForm(pageList, form);  
 }

}


UserService接口:
public   interface  UserService  {
 
/**
  * 根据id查询用户
  * 
  * 
@param id
  * 
@return
  
*/

 User getUser(Long id);

 
/**
  * 保存用户
  * 
  * 
@param user
  
*/

 
void saveUser(User user);

 
/**
  * 修改用户信息
  * 
  * 
@param user
  
*/

 
void updateUser(User user);

 
/**
  * 删除用户
  * 
  * 
@param user
  
*/

 
void delUser(User user);

 
/**
  * 查询用户信息
  * 
@param query 
  * 
@return 分页信息及记录集
  
*/

 IPageList queryUser(IQueryObject query);
}


 

MVC设计模式实现简单登录跳转 MVC 模式代表 Model-View-Controller(模型-视图-控制器)模式。 这种模式用于应用程序的分层开发。 Model(模型) - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑,在数据变化时更新控制器。 View(视图) - 视图代表模型包含的数据的可视化。 Controller(控制器) - 控制器作用于模型和视图上。它控制数据流向模型对象,并在数据变化时更新视图。它使视图与模型分离开。 这次是在之前验证用户登录的基础上,转换成MVC设计模式实现,可先参考我之 阅读详情

相关推荐

JS实现页面倒计时跳转到指定页面

&lt;!DOCTYPE html&gt; &lt;html&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Insert title here&lt;/title&gt; &lt;script type="text/javascript"&gt; window.onload = func

A_jungle的博客 2091

SpringBoot---WebMvcConfigurer详解

目录 1. 简介 2. WebMvcConfigurer接口 2.1 addInterceptors:拦截器 2.2addViewControllers:页面跳转 2.3addResourceHandlers:静态资源 2.4configureDefaultServletHandling:默认静态资源处理器 2.5configureViewResolvers:视图解析器...

u011277123的博客 1109

SpringBoot通过重写WebMvcConfigurer配置接口中的addViewControllers方法实现页面跳转

WebMvcConfigurer 配置接口其实是 Spring 内部的一种配置方式,采用 JavaBean 的形式来代替传统的 XML 配置文件形式进行针对框架个性化定制,可以自定义一些 Handler,Interceptor,ViewResolver,MessageConverter。基于 java-based 方式的 Spring MVC 配置,需要创建一个配置类并实现 WebMvcConfigurer接口。 了解WebMvcConfigurer配置接口的详解: 请浏览本博客的文章:《Sprin.

pan_junbiao的博客 3561

ASP.NET MVC中如何实现页面跳转

1,最简单的方式:超链接 以下分别是连接到HomeController控制器下的SharpL动作方法,以及百度首页。代码如下: 1 <a href="Home\SharpL">打开SharpL</a> 1 <a href="http://www.baidu.com">打开百度</a> 并且可以向url中添加参数,传递到Act...

weixin_30598225的博客 643

linux获取本机IP地址

转自:http://blog.csdn.net/bailyzheng/article/details/7489656  ifaddrs结构体定义如下: C代码   struct ifaddrs    {        struct ifaddrs  *ifa_next;    /* Next item in list */        char

yueguanyun的专栏 1087

本机发出的包的路由

在网上看到netfilter框架上关于路由的描述,大都是说本机发出去的包经过LOCAL_OUT后再进行路由,画的架构图通常如下:   然最近看路由相关源码,发现本机发出去的是先查找路由后再经过LOCAL_OUT钩子(源码见内核的ip_queue_xmit函数)。那末netfilter的架构图应该按下图画法:  在网上搜上一张2,4内核包处理的图,从图上也可以看到是本机发出的包

kenical的专栏 930

php获取局域网所有用户,php 获取局域网的 所有用户的电脑IP和主机名、及mac地址...

?php$bIp = gethostbyname($_ENV[COMPUTERNAME]); //获取echo 本机IP:,$bIp,\n;echo 本机主机名:,gethostbyaddr($bIp),\n\n\n;//exec(net view,$aHost);//获取$bIp = gethostbyname($_ENV['COMPUTERNAME']); //获取本机的局域网IPecho ...

weixin_39688451的博客 160

QT网络(一):主机信息查询

介绍QT网络通信中对于主机信息的查询

路漫漫其修远兮,吾将上下而求索 1541

如何查找本机IP地址?这个方法,简单易懂

如何查找本机IP地址?很多小伙伴在日常生活中,可能会遇到需要查找自己电脑本机IP地址的情况。那么如何查找本机IP地址呢?下面就跟着小编一起来看看吧。

shujuwa_data的博客 1万+

8.SpringBoot学习(八)——Spring Boot Actuator监控

1.简介 1.1 概述 Spring Boot includes a number of additional features to help you monitor and manage your application when you push it to production. You can choose to manage and monitor your application by using HTTP endpoints or with JMX. Auditing, health, a

Soulballad的博客 798

超详细超简单的登录页面实现(MVC实现)

一个超简单的适用于小白上手的javaweb网页登录实现

m0_64997559的博客 2933

svg webtopo原型(1)基本功能

考虑到svg也是html5的标准之一,考虑继续抽空把svg的topo原型移植完。 阻力:已经有webtopology开源包了,实现的功能基本类似 参照vml模型的顺序,先实现基本的文本和画线功能。 之前在前期探索中,已经完成了画矩形、画线的探索,包括ie/opera的兼容,中文处理等。因此基本功能还算顺利。 主要实现文本、线条的显示。 以及基本的js操作的简单封装。 兼容ie+...

web开发 304

Vue中Web组态实现方案-WebTopo的使用

场景 Web组态实现效果 WebTopo的github地址 https://github.com/phynos/WebTopo 注: 博客:https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。 实现 首先你的电脑需要安装node,可以使用npm进行安装依赖 进入根目录执行 npm install 建议使用 cnpm install 如果安装依赖有问题,两种方式切换着用或者多.

BADAO_LIUMANG_QIZHI的博客 3293

spring boot 1.5.3 源代码片段 - webmvc - handler适配器AnnotationMethodHandlerAdapter【已废弃】

方法请求参数注解 方法每个参数可包含的注解有:@RequestParam、@RequestHeader、@RequestBody、@CookieValue、@PathVariable、@ModelAttribute、@Value、@Validated 其中互斥的注解有:@RequestParam、@RequestHeader、@RequestBody、@CookieValue、@PathVariable、@ModelAttribute for (Annotation paramAnn : p...

~~简~~ 434

拦截器WebMvcConfigurer和HandlerInterceptorAdapter

WebMvcConfigurer:拦截器的注册类 HandlerInterceptorAdapter:拦截组件 拦截组件HandlerInterceptorAdapter可以有多个,需要注册到WebMvcConfigurer里面,在WebMvcConfigurer里面拦截器是按顺序执行的。 @SpringBootConfiguration public class InterceptorC...

weixin_41126842的博客 3849

基础11-WebMVC自动化配置原理

打开Spring Boot官网,按照图片找到如下信息: 这里的关键就在于Spring MVC Auto-configuration Spring MVC Auto-configuration 稍微翻译下图中信息: Spring Boot为大多数应用提供了自动化配置的Spring MVC。自动化配置添加了如下内容: ①包含ContentNegotiatingViewResolver、BeanNameViewResolver; ②支持静态资源,包括对webjars的支持; ③自动注册C

狼行千里吃肉 606

Spring MVC中的HandlerMapping

 Spring MVC HandlerMapping中url到handler的映射关系注册与查找

prince2270的专栏 3万+

spring mvc 直接访问html页面,Spring MVC设置默认访问页面的3种方式-Fun言

1.默认tomcat容器的默认页面。/index.html这种方式适合访问静态的页面(也包括JSP)或者说是没有任何参数的页面。2.spirng mvc 默认index controller 方式如果在tomcat容器没有配置默认页面,怎springmvc 会主动去寻找/index的controller,如果有则会调用,没有则会显示404页面。@RequestMapping(value=”/in...

weixin_30851261的博客 2528

Spring思维导图,让Spring不再难懂(mvc篇)

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33728268的博客 677
上一篇: Web MVC框架-视图模板查找及组织
下一篇: EasyJWeb-1.0 m3发布
大峡
博客等级 码龄21年 703粉丝 252原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值