自定义框架_解析请求 | 学习笔记

本文涉及的产品
公共DNS(含HTTPDNS解析),每月1000万次HTTP解析
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
简介: 快速学习自定义框架_解析请求,介绍了自定义框架_解析请求系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【Java Web开发系列课程 - Struts2框架入门自定义框架_解析请求】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/537/detail/7330


自定义框架_解析请求

 

自定义框架解析-解析请求

将以下解析完,就会在过滤器里取有。将用户提交的请求,映射到对应的actionfor(Element element :actions ){上。

将过滤器取名为 CoreFilter。过滤器是用来实现 filter 接口的。

Document document = new SAXReader() .read(is);Element root = document. getRootElement();//处理action节点List<Element> actions=root. elements();for(Element element :actions ){Action action = new Action();
//获取action的属性值action. setName(element . attributeValue( "name"));action. setClasses (element. attributeValue("class"));

String method=element. attributeValue(" method") ;if (method!=null)

action. setMethod (method);l//处理Actіon中的结果集List<Element> results = element . elements();for(Element e:results){

过滤器中显示:

java.util.List<Element>An ordered colection (also known as a sequence). The user of this interface has precise control over

where in the list each element is inserted. The user can access elements by their integer index(position in the list), and search for elements in the list.Unlike sets, lists typically allow duplicate elements. More formally, lists typically allow pairs ofelements e1 and e2 such that e1.equals (e2), and they typically allow multiple null elements if theyallow null elements at all. It is not inconceivable that someone might wish to implement a list thatprohibits duplicates, by throwing runtime exceptions when the user attempts to insert them, but we

expect this usage to be rare.

……

过滤器是用来实现 filter 接口的。

package cn. sxt. filter;

import  javax.servlet.Filter;public class CoreFilter implements Filterk{

public void destroy() {//TODO Auto-generated method stub

}

public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException{// TODO Auto-generated method stub

}public void init(FilterConfig arge) throws ServletException (//T//TODO Auto- generated method stub

}

import javax. servlet . FilterConfig;

import javax. servlet . ServletException; import javax. servlet . ServletRequest ;

import javax. servlet. ServletResponse;public class CoreFilter implements Filter{public void destroy() {}public void init() throws ServletException{

}public void doFilter(ServletRequest req, ServletResponse arg1,

FilterChain arg2) throws IOException, ServletException {//TODO Auto- generatedmethod stub

req 改成 rq,arg1改成 rp,arg2改成 chain

import javax. servlet . FilterConfig;import javax. servlet . ServletException;import javax. servlet . ServletRequest ;import javax. servlet. ServletResponse;

12 public class CoreFilter implements Filter{public void destroy() {}public void init() throws ServletException{

}public void doFilter(ServletRequest rq, ServletResponse rp,FilterChain chain) throws IOException, ServletException {//TODO Auto- generated method stub

}

public void init(FilterConfig arge) throws ServletException {//TODO Auto- generated method stub

}

}

public void init(FilterConfig arge) throws ServletException {写入,去掉public void init() throws ServletException{

,config 未使用过。将 ServletRequest ServletResponse 全部转换。

import javax. servlet . FilterConfig;import javax. servlet . ServletException;import javax. servlet . ServletRequest ;

import javax. servlet. ServletResponse;

public class CoreFilter implements Filter{public void destroy() {}

} public void init(FilterConfig config) throws ServletException {

}
public void doFilter(ServletRequest rq, ServletResponse rp,FilterChain chain) throws IOException, ServletException {

HttpServletRequest req = (HttpServletRequest)rq;(强转)HttpServletResponse resp = (HttpServletResponse)rp;//TODO Auto- generated method stub

//第一件事:将请求映射到 action 上(分别用单独的方法处理,上面就变成第二种方法)

reqToAction(req);(注意:在实验过程中要持续测试,去了解)

//创建action对象

//将用户提交的数据设置到action的属性上

//执行action的方法

//处理结果

}

用某个类来处理。将请求映射到 action 型上,返回 action 型对象。返回空,调方法。getRequestURI0 : String-HttpServletRequestgetRequestURL0: StringBuffer-HtpServletRequest的区别是 getRequestURI0 : String HttpServletRequest可以接收后面的

接着验证是不是 action 结尾。固定结尾,或自定义扩展名,甚至没有。也可以验证只要有点就去掉。如果不是. action 结尾的,直接请求下一部的事情。

将请求映射到 action

Private Action reqToAction(HttpServletRequest req ){

String path=req.getRequestURI();

//只处理以action结尾的请求

if (path.endswith(“.action”))

Return null;

//获得请求名

String reqName=path. substring (path.lastIndexOf(“/”)+1, path.lastIndexOf(“.”))

//程序启动后解析配置文件,解析不只是解析一次,开始就要解析。在public void init(FilterConfig config) throws ServletException {

}
public void doFilter(ServletRequest rq, ServletResponse rp,间,加入ActionMapper. parser();启动值后解析文件,回车后,

public void init(FilterConfig config)I throws ServletException {try {

//程序启动后解析配置文件,只会配置一次。inter只会做一次。ActionMapper .parser();} catch (DocumentException e) {

)

return ActionMapper.actionMap.get(reqName);(根据请求名取)

}

reqToAction(req);将请求名获取到这,变成 Action targetAction= reqToAction(req);在进行测试。观察 Acton 是否对的。Action targetAction= reqToAction(req);
System.out.println(targetAction.getName()+”---class”+targetAction.getClasses());都进行测试,

发布并启动20myframework

请求locallhost:8080/framework/hello.action

This is my JSP page

HTTP Status 404- /framework/hello.actiontype Status reportmessage framework/hello.actiondescription The requested resource is not available.Apache Tomcat/7.0.62

将过滤器配置。写代码先将思路捋出,接着测试好每一步骤的结果。

<?xml version= "1.Ѳ" encoding= "UtF-8"?>web-app version="2.5"xmlns= "http://java. sun. com/xmL/ns/javaee"xmlns :xsi= "http://www. w3. org/ 2001/XMLSchema-instance"xsi:schemaLocation="http://java.sun. com xmL/ns/javaeehttp://java.sun. com/xmL/ns/javaee/web-app_2_5.xsd"><display-name></display-name><filter><filter-name>corefilter</filter-name><filter-class>cn. sxt.filter. CoreFilter</filter-class></filter><filter-mapping><filter-name>corefilter</filter-name>

<url-pattern>*.action</ url-pattern >(不能限制用户填的东西)

<filter-mapping><welcome-file-list>

<welcome-file>index.jsp</welcome-file>

Console

信息:Starting ProtocolHandler ["ajp-apr- 8009" ]2015-8-20 11:17 :47 org. apache. catalina. startup.Catalina start
信息: Server startup in 4028 mshello---classqn. sxt. action. HelloAction

Hello 被请出,classcn 等于地方。说明已完成获取 filter。

相关文章
|
3月前
|
存储 Java
深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。
【10月更文挑战第16天】本文深入探讨了Java集合框架中的HashSet和TreeSet,解析了两者在元素存储上的无序与有序特性。HashSet基于哈希表实现,添加元素时根据哈希值分布,遍历时顺序不可预测;而TreeSet利用红黑树结构,按自然顺序或自定义顺序存储元素,确保遍历时有序输出。文章还提供了示例代码,帮助读者更好地理解这两种集合类型的使用场景和内部机制。
49 3
|
9天前
|
设计模式 XML Java
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
本文详细介绍了Spring框架的核心功能,并通过手写自定义Spring框架的方式,深入理解了Spring的IOC(控制反转)和DI(依赖注入)功能,并且学会实际运用设计模式到真实开发中。
【23种设计模式·全精解析 | 自定义Spring框架篇】Spring核心源码分析+自定义Spring的IOC功能,依赖注入功能
|
1月前
|
XML JSON JavaScript
HttpGet 请求的响应处理:获取和解析数据
HttpGet 请求的响应处理:获取和解析数据
|
2月前
|
前端开发 Java 开发者
Spring MVC中的请求映射:@RequestMapping注解深度解析
在Spring MVC框架中,`@RequestMapping`注解是实现请求映射的关键,它将HTTP请求映射到相应的处理器方法上。本文将深入探讨`@RequestMapping`注解的工作原理、使用方法以及最佳实践,为开发者提供一份详尽的技术干货。
131 2
|
2月前
|
开发框架 Dart Android开发
安卓与iOS的跨平台开发:Flutter框架深度解析
在移动应用开发的海洋中,Flutter作为一艘灵活的帆船,正引领着开发者们驶向跨平台开发的新纪元。本文将揭开Flutter神秘的面纱,从其架构到核心特性,再到实际应用案例,我们将一同探索这个由谷歌打造的开源UI工具包如何让安卓与iOS应用开发变得更加高效而统一。你将看到,借助Flutter,打造精美、高性能的应用不再是难题,而是变成了一场创造性的旅程。
|
2月前
|
存储 Java 开发者
Java中的集合框架深入解析
【10月更文挑战第32天】本文旨在为读者揭开Java集合框架的神秘面纱,通过深入浅出的方式介绍其内部结构与运作机制。我们将从集合框架的设计哲学出发,探讨其如何影响我们的编程实践,并配以代码示例,展示如何在真实场景中应用这些知识。无论你是Java新手还是资深开发者,这篇文章都将为你提供新的视角和实用技巧。
36 0
|
2月前
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
86 2
|
3月前
|
缓存 Java 程序员
Map - LinkedHashSet&Map源码解析
Map - LinkedHashSet&Map源码解析
87 0
|
9天前
|
存储 设计模式 算法
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
行为型模式用于描述程序在运行时复杂的流程控制,即描述多个类或对象之间怎样相互协作共同完成单个对象都无法单独完成的任务,它涉及算法与对象间职责的分配。行为型模式分为类行为模式和对象行为模式,前者采用继承机制来在类间分派行为,后者采用组合或聚合在对象间分配行为。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象行为模式比类行为模式具有更大的灵活性。 行为型模式分为: • 模板方法模式 • 策略模式 • 命令模式 • 职责链模式 • 状态模式 • 观察者模式 • 中介者模式 • 迭代器模式 • 访问者模式 • 备忘录模式 • 解释器模式
【23种设计模式·全精解析 | 行为型模式篇】11种行为型模式的结构概述、案例实现、优缺点、扩展对比、使用场景、源码解析
|
9天前
|
设计模式 存储 安全
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析
结构型模式描述如何将类或对象按某种布局组成更大的结构。它分为类结构型模式和对象结构型模式,前者采用继承机制来组织接口和类,后者釆用组合或聚合来组合对象。由于组合关系或聚合关系比继承关系耦合度低,满足“合成复用原则”,所以对象结构型模式比类结构型模式具有更大的灵活性。 结构型模式分为以下 7 种: • 代理模式 • 适配器模式 • 装饰者模式 • 桥接模式 • 外观模式 • 组合模式 • 享元模式
【23种设计模式·全精解析 | 创建型模式篇】5种创建型模式的结构概述、实现、优缺点、扩展、使用场景、源码解析

推荐镜像

更多