创建web项目    实现的效果! 用户点击页面不同的链接,后台调用不同的代码!

创建两个类实现共同的接口!

public interface Action { 

    String  execute();
}
public class LoginAction  implements Action{

    public  String  execute(){
System.out.println("LoginAction......");
return "success";
}
}
public class ListAction implements Action {

    public  String  execute(){
System.out.println("ListAction......");
return "success";
}
}

想让用户能访问到我们的后台代码,要么使用servlet  要么使用filter!

使用filter

创建一个filter用来拦截用户的请求

public class DoFilter implements Filter {
//全局的变量
Map<String,String> map=new HashMap<String, String>(); //初始化操作
@Override
public void init(FilterConfig arg0) throws ServletException {
System.out.println("DoFilter 初始化了.............................");
// key是用户请求的路径 value 是对应的全类名
map.put("/login","cn.bdqn.action.LoginAction");
map.put("/list","cn.bdqn.action.ListAction");
} //真正的处理
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//向下转型
HttpServletRequest httpServletRequest=(HttpServletRequest) request;
HttpServletResponse httpServletResponse=(HttpServletResponse) response;
//看一下 各个路径的区别
System.out.println("getContextPath()==>"+httpServletRequest.getContextPath());//项目名
System.out.println("getServletPath()==>"+httpServletRequest.getServletPath());//访问的路径
System.out.println("getRequestURI()==>"+httpServletRequest.getRequestURI());//项目下面的路径
System.out.println("getRequestURL()==>"+httpServletRequest.getRequestURL());//带协议的完整路径
//应该使用getServletPath
String path=httpServletRequest.getServletPath();
try {
if (path.equals("/index.jsp")) {
chain.doFilter(request, response); //放行
}else{
Action action=(Action) Class.forName(map.get(path)).newInstance();
action.execute();
//跳转到成功界面
httpServletRequest.getRequestDispatcher("/success.jsp").forward(request, response);
}
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} }
@Override
public void destroy() { } }

前台页面

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title>
<meta http-equiv="pragma" content="no-cache">
<meta http-equiv="cache-control" content="no-cache">
<meta http-equiv="expires" content="0">
<meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
<meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head> <body>
<a href="login">登录 </a>
<a href="list">详情 </a>
</body>
</html>

sucess.jsp页面就是一个成功界面!!!省略掉!

我们使用xml文件来代替  map中 所保存的 键值对  信息!

key:用户的请求

value:对应的后台实现类 全类名!

Struts01---入门小案例的更多相关文章

  1. 02SpringMvc_springmvc快速入门小案例(XML版本)

    这篇文章中,我们要写一个入门案例,去整体了解整个SpringMVC. 先给出整个项目的结构图:

  2. spring boot入门小案例

    spring boot 入门小案例搭建 (1) 在Eclipse中新建一个maven project项目,目录结构如下所示: cn.com.rxyb中存放spring boot的启动类,applica ...

  3. Hibernate的介绍及入门小案例

    1.Hibernate的诞生 在以前使用传统的JDBC开发应用系统时,如果是小型应用系统,并不觉得有什么麻烦,但是对于大型应用系统的开发,使用JDBC就会显得力不从心,例如对几十,几百张包含几十个字段 ...

  4. React.js入门小案例

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8" /> <title&g ...

  5. Spring中AOP的初窥和入门小案例

    AOP:面向切面编程 AOP的主要作用:是为了程序员更好的关注"业务",专心"做事" 加上双引号的意思:所谓业务,是指他的核心,各行业中需要处理的核心事务,核心 ...

  6. SSM-Spring-03:Spring中AOP的初窥和入门小案例

    ------------吾亦无他,唯手熟尔,谦卑若愚,好学若饥------------- AOP:面向切面编程 AOP的主要作用:是为了程序员更好的关注"业务",专心"做 ...

  7. struts2框架快速入门小案例

    struts2快速入门: index.jsp------>HelloAction--------->hello.jsp struts2流程 1.导入jar包 struts2的目录结构: a ...

  8. 10SpringMvc_springmvc快速入门小案例(注解版本)

    第一步:新建案例工程:

  9. HIBERNATE 入门小案例

    刚刚开始肯定好多人都会问什么是hibernate呢? 那么下面我们就来了解一下什么事hibernate吧! 首先,Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对 ...

  10. Servlet入门小案例

    案例一:tomcat9.jdk1.8 1.eclipse创建web项目 1)创建一个Dynamic web project,名字为Servlet_hjh 2)在src下创建一个包,为com.hjh.d ...

随机推荐

  1. PScc

      photoshop cc 2018破解版是Adobe公司最新版专业化CC图像处理软件,新功能超乎你的想象!photoshop cc 2018破解版新功能给力来袭,访问Lightroom照片,分享作 ...

  2. django 快速数据库操作,不用SQL语句

    配置models文件 # -*- coding: utf-8 -*- from __future__ import unicode_literals from django.db import mod ...

  3. mysql安装前的系统准备工作

    一.系统环境总结:

  4. TRegExpr正则表达式

    TRegExpr正则表达式 2006-10-24 10:55 DELPHi中的REGEXPR   [ 2006-03-29 11:33:46 am | Author: Admin ] 其实这个Pasc ...

  5. yii根据id查询一条数据

    model层 public function selectone($ag_id=''){ return $this->findBySql("SELECT * FROM agency w ...

  6. NHibernate & INotifyPropertyChanged

    One of the things that make NHibernate easy to use is that it fully support the POCO model. But one ...

  7. EXSITS应该怎么用?

    无论是做项目还是普通使用SQL,我们通常都会使用IN.因为很好理解,也很方便.但是,面对着多层查询嵌套,或者IN关键字里面的结果集数量巨大,查询的效率就会直线下降.这时候,我们应该用好EXSITS. ...

  8. Xcode 解决日志打印不全问题

    Xcode 出了8.0后,代码运行日志过长时会出现打印不全的问题. 这可能是Xcode优化的一项,不过这也给开发带来的不必要的麻烦.下面的宏定义可以解决这一问题. #ifdef DEBUG #defi ...

  9. 利用cgroup控制进程使用的资源(cpu、内存等)

    实验环境:centos 6.10 1.安装libcgroup yum install -y libcgroup 2.进入资源控制器默认挂载目录/cgroup [root@hadoop1 cgroup] ...

  10. Django学习笔记之使用 Django项目开发框架

    Django 项目是一个定制框架,它源自一个在线新闻 Web 站点,于 2005 年以开源的形式被释放出来.Django 框架的核心组件有: 用于创建模型的对象关系映射 为最终用户设计的完美管理界面 ...