通用servler, struts2入门
来源:互联网 发布:淘宝ps3良心店 编辑:程序博客网 时间:2024/05/21 14:43
Struts入门,写一个通用的Servlet
web.xml的配置
<servlet> <servlet-name>ActionServlet</servlet-name> <servlet-class>com.test.framework.ActionServlet</servlet-class> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>ActionServlet</servlet-name> <url-pattern>*.action</url-pattern> </servlet-mapping>
写一个mystruts.xml,用来动态读取<action..>,以下就简单写一个登录的action
<?xml version="1.0" encoding="UTF-8"?><mystruts><package><action name="login" class="com.test.framework.action.LoginAction" method="login"><result name="loginSuccess" type="redirect">/index.jsp</result><result name="loginFaild">/login.jsp</result></action></package></mystruts>
通用ActionServlet
package com.test.framework;import java.io.IOException;import java.lang.reflect.Method;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.dom4j.Element;import com.test.framework.bean.ActionMapping;import com.test.framework.bean.ActionMappingManager;import com.test.framework.bean.Result;/** * 核心控制器,此项目只有这一个serclet * * * @author csz * *总结:获取传过来的uri *.action *部分的内容然后在读取的xml文件中的action中的name属性,得到xml的name,class,method, *然后通过反射得到该类的一个实例调用method方法返回的标识,通过该标识和当前配置文件的result比较,看看跳转的页面是哪个 * */public class ActionServlet extends HttpServlet{private ActionMappingManager actionMappingManager;//启动时候执行执行一次@Overridepublic void init() throws ServletException {actionMappingManager = new ActionMappingManager();}@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {try {//1.获取请求的uri,得到请求路径名称String uri = request.getRequestURI();//得到loginString actionName = uri.substring(uri.lastIndexOf("/")+1, uri.indexOf(".action"));//2.根据路径名称,读取配置文件,得到类的全名ActionMapping actionMapping = actionMappingManager.getActionMapping(actionName);String className = actionMapping.getClassName();//当前请求的处理方法String method = actionMapping.getMethod();//3.反射:创建对象,调用方法,获取方法返回的标记Class<?> clazz = Class.forName(className);Object object = clazz.newInstance();Method m = clazz.getDeclaredMethod(method,HttpServletRequest.class,HttpServletResponse.class);//调用方法的的标记String returnFlag = (String) m.invoke(object, request,response);//4.拿到标记,读取配置文件得到标记对应的页面,跳转类型Result result = actionMapping.getResult().get(returnFlag);//类型String type = result.getType();//页面String page = result.getPage();if ("redirect".equals(type)) {response.sendRedirect(request.getContextPath()+page);}else {request.getRequestDispatcher(page).forward(request, response);}} catch (Exception e) {e.printStackTrace();}}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp)throws ServletException, IOException {doGet(req, resp);}}
ActionMappingManager类
package com.test.framework.bean;import java.io.InputStream;import java.util.HashMap;import java.util.Iterator;import java.util.List;import java.util.Map;import org.dom4j.Document;import org.dom4j.Element;import org.dom4j.io.SAXReader;/** * 加载配置文件,封装都有的整个mystruts.xml * @author csz * */public class ActionMappingManager {private Map<String,ActionMapping> allActions;public ActionMappingManager(){allActions = new HashMap<String, ActionMapping>();this.init();}public ActionMapping getActionMapping(String ActionName){if (ActionName==null) {throw new RuntimeException("传入参数有误,请查看配置文件配置路径");}ActionMapping actionMapping = allActions.get(ActionName);if (actionMapping==null) {throw new RuntimeException("在配置文件中找不到路径");}return actionMapping;}// 初始化allActions集合@SuppressWarnings("unchecked")private void init(){//读取配置文件try {//1.得到解析器SAXReader reader = new SAXReader();// 2. 加载文件InputStream inputStream = this.getClass().getResourceAsStream("/mystruts.xml");Document doc = reader.read(inputStream);//3.获取根Element root = doc.getRootElement();//4.得到package节点Element ele_package = root.element("package");//5.得到package节点下,所有的action子节点List<Element> listAction = ele_package.elements("action");//6.遍历,封装for (Element ele_action : listAction) {ActionMapping actionMapping = new ActionMapping();actionMapping.setName(ele_action.attributeValue("name"));actionMapping.setClassName(ele_action.attributeValue("class"));actionMapping.setMethod(ele_action.attributeValue("method"));//封装当前aciton节点下的resultsHashMap<String, Result> results = new HashMap<String, Result>();//得到当前action节点下所有的result子节点Iterator<Element> iterator = ele_action.elementIterator("result");while(iterator.hasNext()){ // 当前迭代的每一个元素都是 <result...>Element ele_result = iterator.next();Result res = new Result();res.setName(ele_result.attributeValue("name"));res.setType(ele_result.attributeValue("type"));res.setPage(ele_result.getTextTrim());results.put(res.getName(), res);}actionMapping.setResult(results);allActions.put(actionMapping.getName(), actionMapping);}} catch (Exception e) {e.printStackTrace();}}}
ActionMapping类
package com.test.framework.bean;import java.util.Map;/** * 封装action节点 * * @author csz * */public class ActionMapping {// 请求路径的名称private String name;// 处理action类的全名private String className;// 处理方法private String method;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getClassName() {return className;}public void setClassName(String className) {this.className = className;}public String getMethod() {return method;}public void setMethod(String method) {this.method = method;}public Map<String, Result> getResult() {return result;}public void setResult(Map<String, Result> result) {this.result = result;}private Map<String, Result> result;}
result 类
/** * 封装result节点 * * * @author csz */public class Result {// 跳转的标记private String name;// 跳转类型private String type;// 跳转页面private String page;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getType() {return type;}public void setType(String type) {this.type = type;}public String getPage() {return page;}public void setPage(String page) {this.page = page;}}
jsp页面:
<form action="${pageContext.request.contextPath }/login.action" name="frmLogin" method="post"> 用户名: <input type="text" name="name"> <br/> 密码: <input type="text" name="pwd"> <br/> <input type="submit" value="登陆"> <br/> </form>
简单些一个action
/** * 简单写一个action * * @author csz * */public class LoginAction {public String login(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String name = request.getParameter("name");String pwd = request.getParameter("pwd");String uri = null;if ("qqq".equals(name)&&"123".equals(pwd)) {uri = "loginSuccess";}else {uri = "loginFaild";}return uri;}}
跳转到index就显示登录成功几个字。。。不贴代码了
0 0
- 通用servler, struts2入门
- Servler类
- Servler理解
- Servler(2)
- servler作用
- struts2通用标签
- struts2通用配置文件
- struts2通用配置
- Struts2-通用标签
- Struts2通用标签学习
- Struts2-7 通用标签
- struts2中的通用标签
- struts2通用标签
- Struts2入门
- struts2 入门
- struts2入门
- struts2-入门
- struts2入门
- LeetCode-Median of sorted array
- POJ1426——Find The Multiple
- spring springmvc jackson在ajax返回时,不输出null值对应的属性
- SQL的左连接 右连接 全连接 内连接 交叉连接
- 单例模式懒汉式静态内部类形式
- 通用servler, struts2入门
- Bluemix平台一步一步搭建ZooKeeper + Mesos + Marathon平台管理Docker集群之二
- error C4996: '_itoa': This function or variable may be unsafe. Consider using _itoa_s instead. To di
- Charles 从入门到精通
- 【leetcode】137. Single Number II
- 【转】R-CNN学习笔记3:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition(SPP-net)
- Linux目录结构
- Android Activity与Service数据交互:Binder、bindService(系列2)
- CentOS 6.8_x64 Linux下基础环境搭建