博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
struts2框架快速入门小案例
阅读量:5303 次
发布时间:2019-06-14

本文共 3473 字,大约阅读时间需要 11 分钟。

struts2快速入门:

  index.jsp------>HelloAction--------->hello.jsp    struts2流程
  1.导入jar包
    struts2的目录结构:
      apps: 例子程序
      docs:文档
      lib:struts2框架所应用的jar以及插件包
      src:源代码
        core 它是struts2的源代码
        xwork-core struts2底层使用了xwork,xwork的源代码
    注意:在struts2开发,一般情况下最少导入的jar包,去apps下的struts2-blank示例程序中copy
  2.创建index.jsp页面

  3.对struts2框架进行配置

    1.web.xml文件中配置前端控制器(核心控制器)-----就是一个Filter(目的:是为了让struts2框架可以运行。 

  
struts2
  
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter
  
struts2
  
/*

    2.在src下(对应Tomcat的classes下)创建一个struts.xml配置文件 ,这个是struts2框架配置文件(目的:是为了struts2框架流程可以执行。

  4.创建一个HelloAction类

//要求,在HelloAction类中创建一个返回值是String类型的方法,注意,无参数。public String say(){  return "good";}

  5.在struts.xml文件中配置HelloAction

  
    
/hello.jsp
  

  6.在index.jsp中添加连接,测试

  在地址栏中输入:http://localhost/struts2_day01/index.jsp 访问连接,就可以看到HelloAction类中的say方法执行了,也跳转到了hello.jsp.

运行流程:

 用filter模拟Struts2工作原理:

public class StrutsFilter implements Filter {    public void init(FilterConfig filterConfig) throws ServletException {}    public void destroy() {}    public void doFilter(ServletRequest req, ServletResponse resp,            FilterChain chain) throws IOException, ServletException {        // 1.强转        HttpServletRequest request = (HttpServletRequest) req;        HttpServletResponse response = (HttpServletResponse) resp;        // 2.操作        // 2.1 得到请求资源路径        String uri = request.getRequestURI();        String contextPath = request.getContextPath();        String path = uri.substring(contextPath.length() + 1);        // 2.2 使用path去struts.xml文件中查找某一个
这个标签 SAXReader reader = new SAXReader(); try { // 得到struts.xml文件的document对象。 Document document = reader.read(new File(this.getClass().getResource("/struts.xml").getPath())); // 查找
这样的标签 Element actionElement = (Element) document.selectSingleNode("//action[@name='" + path + "']"); if (actionElement != null) { // 得到
标签上的class属性以及method属性 String className = actionElement.attributeValue("class"); // 得到了action类的名称 String methodName = actionElement.attributeValue("method");// 得到action类中的方法名称。 // 2.3通过反射,得到Class对象,得到Method对象 Class actionClass = Class.forName(className); Method method = actionClass.getDeclaredMethod(methodName); // 2.4 让method执行. String returnValue = (String) method.invoke(actionClass.newInstance()); // 是让action类中的方法执行,并获取方法的返回值。 // 2.5 使用returnValue去action下查找其子元素result的name属性值,与returnValue做对比。 Element resultElement = actionElement.element("result"); String nameValue = resultElement.attributeValue("name"); if (returnValue.equals(nameValue)) { // 2.6得到了要跳转的路径。 String skipPath = resultElement.getText(); request.getRequestDispatcher(skipPath).forward(request,response); return; } } } catch (Exception e) { e.printStackTrace(); } // 3.放行 chain.doFilter(request, response); }}

转载于:https://www.cnblogs.com/fengmingyue/p/6117224.html

你可能感兴趣的文章
js实现瀑布流布局
查看>>
C. Anagram codeforces
查看>>
找工作 做一些关于面试的笔记
查看>>
English trip -- VC(情景课)1 C What's your name?(review)
查看>>
redirect的错误用法asp.net怎么使用自定义错误
查看>>
在MyEclipse下统计工程的代码(package、行数、类个数)
查看>>
Erlcron分析学习
查看>>
idea 快捷键
查看>>
SimpleDateFormate的使用
查看>>
菜鸟运维笔记:Windows上用Xshell管理你的云主机
查看>>
JavaScript中的this
查看>>
Activity生命周期
查看>>
jsp
查看>>
OpenNI / NITE的Stable版更新
查看>>
03 基本数据结构 - 栈
查看>>
Hyper-V虚拟机上安装一个图形界面的Linux系统
查看>>
微信小程序之随笔
查看>>
每秒处理10万高并发订单的乐视集团支付系统架构分享
查看>>
Lua_02
查看>>
ios蓝牙详解
查看>>