Struts2的原理和搭建
来源:互联网 发布:python opencv blur 编辑:程序博客网 时间:2024/05/10 08:49
今天心情不是很好,梳理一下Struts2来转移注意力。
1.工作流程
当Web容器收到 请求(HttpServletRequest)它将请求传递给一个标准的过滤链包括(ActionContextCleanUp)过滤器,然后经过Other filters(SiteMesh ,etc),接下来需要调用FilterDispatcher核心控制器,然后它调用ActionMapper确定请求哪个Action,ActionMapper返回一个收集Action详细信息的ActionMaping对象。
接下来FilterDispatcher将控制权委派给ActionProxy,ActionProxy调用配置管理器(ConfigurationManager) 从配置文件中读取配置信息(struts.xml),然后创建ActionInvocation对象,ActionInvocation在调用Action之前会依次的调用所用配置拦截器(Interceptor N) 一旦执行结果返回结果字符串ActionInvocation负责查找结果字符串对应的(Result)然后执行这个Result Result会调用一些模版(JSP)来呈现页面,之后拦截器(Interceptor N)会再被执行(顺序和Action执行之前相反)最后响应(HttpServletResponse)被返回在web.xml中配置的那些过滤器和(核心控制器)(FilterDispatcher)。
2.Demo
项目结构
web.xml
<?xml version="1.0" encoding="UTF-8"?><web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> <!-- 定义Struts2的FilterDispathcer的Filter --> <filter> <filter-name>struts2</filter-name> <filter-class>org.apache.struts2.dispatcher.FilterDispatcher</filter-class> </filter> <!-- FilterDispatcher用来初始化struts2并且处理所有的WEB请求。 --> <filter-mapping> <filter-name>struts2</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> </web-app>
struts2.xml
<?xml version="1.0" encoding="GBK"?><!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.0//EN" "http://struts.apache.org/dtds/struts-2.0.dtd"><struts> <!-- 若package加上namespace属性,则jsp页面form的action属性必须加上项目名的路径; 若不加namespace属性,则直接方法名.action即可访问 --> <package name="struts2" extends="struts-default" namespace="/demo"> <action name="login" class="com.hyan.action.LoginAction" method="login"> <result name="success">/result.jsp</result> </action> </package></struts>
LoginAction.java
package com.hyan.action;import com.opensymphony.xwork2.ActionSupport;public class LoginAction extends ActionSupport { private static final long serialVersionUID = 1L; private String username; private String password; public String login() throws Exception { return SUCCESS; } public String getUsername() { return username; } public void setUsername(String username) { this.username = username; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; }}
index.jsp
<%@ page language="java" import="java.util.*" pageEncoding="ISO-8859-1"%><%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> This is my JSP page. <br> </body></html>
login.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%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 'login.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> <form action="/Struts2Project/demo/login.action" method="post"> 账号:<input type="text" name="username" /><br /> 密码:<input type="password" name="password" /><br /> <input type="submit" value="submit" /> </form> </body></html>
result.jsp
<%@ page language="java" import="java.util.*" pageEncoding="gb2312"%><%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 'result.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> 账号:${request.username}<br /> 密码:${requestScope.password} </body></html>
3.运行效果
- Struts2的原理和搭建
- struts2的介绍和搭建struts2环境
- struts2简介和环境的搭建
- 3.2Struts2的搭建和基础知识
- struts2拦截器的原理和写法
- struts2的工作流程和原理
- Spring和Struts2的运行原理
- struts2 拦截器的原理和实现
- struts2的核心和工作原理
- struts2的核心和工作原理
- struts2的核心和工作原理
- struts2的核心和工作原理
- struts2的核心和工作原理
- struts2的核心和工作原理
- struts2的核心和工作原理
- struts2的工作流程和运行原理
- struts2的核心和工作原理
- struts2的核心和工作原理
- Redis中keys命令的使用与带来的性能问题
- B - Light Bulb
- 1008 数组元素循环右移问题 PAT
- NLP学习笔记(1)-词向量与语言模型
- iOS开发-常用第三方开源框架介绍(绝对够你用了)
- Struts2的原理和搭建
- CentOS 6.5下搭建hadoop 2.6.0集群(二):网络配置
- Windows 7资源管理器打开FTP出错情况总结
- GCD
- js--------String
- 《增长黑客》与我们的生活
- FloatingActionButtonPlus,一款使用简单的MaterialDesign控件。
- 1006 换个格式输出整数 PAT
- C++ Operators