使用dom4j解析struts配置文件,利用反射技术从配置文件中读取FormBean,示例代码如下:
1、com.wgy.form.LoginForm类:
- public class LoginForm {
- private String name;
- private String password;
- public String getName() {
- return name;
- }
- public void setName(String name) {
- this.name = name;
- }
- public String getPassword() {
- return password;
- }
- public void setPassword(String password) {
- this.password = password;
- }
- @Override
- public String toString() {
- return "LoginForm [name=" + name + ", password=" + password + "]";
- }
- }
2、struts-config.xml文件,位于src下:
- <?xml version="1.0" encoding="UTF-8"?>
- <!DOCTYPE struts-config PUBLIC
- "-//Apache Software Foundation//DTD Struts Configuration 1.3//EN"
- "http://jakarta.apache.org/struts/dtds/struts-config_1_3.dtd">
- <struts-config>
- <form-beans>
- <form-bean name="loginForm" type="com.wgy.form.LoginForm" />
- </form-beans>
- </struts-config>
3、使用dom4j解析上述文件:
- public class XmlUtils {
- public static String[] parseXml() throws Exception {
- SAXReader reader = new SAXReader();
- InputStream inStream = XmlUtils.class.getClassLoader()
- .getResourceAsStream("struts-config.xml");
- Document document = reader.read(inStream);
- Element root = document.getRootElement();
- Element formBean = root.element("form-beans").element("form-bean");
- String name = formBean.attributeValue("name");
- String type = formBean.attributeValue("type");
- return new String[] { name, type };
- }
- }
4、编写Servlet控制器:
- public class ActionServlet extends HttpServlet {
- private static final long serialVersionUID = 1L;
- protected void doGet(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- doPost(request, response);
- }
- protected void doPost(HttpServletRequest request,
- HttpServletResponse response) throws ServletException, IOException {
- try {
- String[] values = XmlUtils.parseXml();
- String formName = values[0];
- String formClassFullName = values[1];
- FormUtils.fillForm(request, formClassFullName, formName);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
5、将上述servlet配置到web.xml文件中:
- <?xml version="1.0" encoding="UTF-8"?>
- <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
- id="WebApp_ID" version="2.5">
- <display-name>Struts1Test</display-name>
- <welcome-file-list>
- <welcome-file>index.jsp</welcome-file>
- </welcome-file-list>
- <servlet>
- <servlet-name>ActionServlet</servlet-name>
- <servlet-class>com.wgy.servlet.ActionServlet</servlet-class>
- </servlet>
- <servlet-mapping>
- <servlet-name>ActionServlet</servlet-name>
- <url-pattern>*.do</url-pattern>
- </servlet-mapping>
- </web-app>
6、编写FormUtils类,利用反射封装FormBean
- public class FormUtils {
- @SuppressWarnings("unchecked")
- public static void fillForm(HttpServletRequest request,
- String formClassFullName, String formName) {
- try {
- LoginForm loginForm = (LoginForm) Class.forName(formClassFullName)
- .newInstance();
- Field[] fields = loginForm.getClass().getDeclaredFields();
- Enumeration<String> parameterNames = request.getParameterNames();
- while (parameterNames.hasMoreElements()) {
- String parameterName = parameterNames.nextElement();
- for (Field field : fields) {
- String fieldName = field.getName();
- if (fieldName.equals(parameterName)) {
- String value = request.getParameter(fieldName);
- try {
- BeanUtils.setProperty(loginForm, fieldName, value);
- } catch (InvocationTargetException e) {
- e.printStackTrace();
- }
- }
- }
- }
- System.out.println(loginForm.toString());
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
7、编写测试页面index.jsp
- <%@ page language="java" contentType="text/html; charset=UTF-8"
- pageEncoding="UTF-8"%>
- <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- <title>index</title>
- </head>
- <body>
- <form action="<%=request.getContextPath() %>/login.do" method="post">
- username:<input type="text" name="name" /> <br />
- password:<input type="text" name="password" /> <br />
- <input type="submit" value="登录" />
- </form>
- </body>
- </html>
转载于:https://blog.51cto.com/6337347/1104623