【SSH之旅】一步步学习Struts1框架(一):封装什么

来源:互联网 发布:ae cs4软件下载 编辑:程序博客网 时间:2024/05/16 04:37

       这篇博客主要是说通过实现一个MVC模式代码来说明Struts1主要封装了什么。

       MVC模式流程图(Model2):

              

       从图上可以看到,Servlet控制着页面的跳转以及一些一些页面上的逻辑,M是具体的业务逻辑,一些增删改查的操作,V就是JSP,实现页面的显示,这就是在不使用Struts框架的情况下,MVC各个职责。

       那么具体代码是怎么实现的呢?

整个项目的索引结构:

                            

        具体的增加、删除、修改、查询处理的Action类,再有一个封装的Servlet控制类,根据传过来的路径不同的跳转到相应的具体Action类中进行逻辑处理。

以添加为例看看相关页面代码的实现:

index.jsp页面:

<%@ page language="java" contentType="text/html; charset=GB18030"    pageEncoding="GB18030"%><!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=GB18030"><title>Insert title here</title></head><body><form action="servlet/addUser.action" method="post">姓名:<input type="text" name="username"><br><span style="white-space:pre"></span>年龄:<input type="text" name="age"><br><input type="submit" value="提交"><br></form></body></html>
UserManager业务逻辑代码类:

package zhudan.servlet;import java.util.ArrayList;import java.util.List;public class UserManager {public void add(String username) {System.out.println("UserManager.add() -->> usernamne:" + username);<span style="white-space:pre"></span>System.out.println("UserManager.add() -->> age:" + age);}public void del(String username) {System.out.println("UserManager.del() -->> usernamne:" + username);}public void modify(String username) {System.out.println("UserManager.modify() -->> usernamne:" + username);}public List query(String username) {System.out.println("UserManager.query() -->> usernamne:" + username);List userList = new ArrayList();userList.add("zhudan1");userList.add("zhudan2");userList.add("zhudan3");return userList;}}
AddUserAction类:
package zhudan.servlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class AddUserAction implements Action {public String execute(HttpServletRequest request,HttpServletResponse response) throws Exception {String username = request.getParameter("username");                Integer age=Integer.parseInt(request.getParameter("age"));                //调用业务逻辑                UserManager userManager = new UserManager();                userManager.add(username, age);                return "/add_success.jsp"; //转向路径可以通过配置文件读取 }}
TestServlet控制类:

        主要是判断哪个类做什么请求,需要调用什么方法来完成操作。

package zhudan.servlet;import java.io.IOException;import java.util.List;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class TestServlet extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {String requestURI = request.getRequestURI();String path = requestURI.substring(requestURI.indexOf("/", 1), requestURI.indexOf("."));System.out.println("path=" + path);Action action = null;if ("/servlet/delUser".equals(path)) {action = new DelUserAction();}else if ("/servlet/addUser".equals(path)) {action = new AddUserAction();}else if ("/servlet/modifyUser".equals(path)) {action = new ModifyUserAction();}else if ("/servlet/queryUser".equals(path)) {action = new QueryUserAction();}else {throw new RuntimeException("请求失败");}String forward = null;try {forward = action.execute(request, response);} catch (Exception e) {e.printStackTrace();}request.getRequestDispatcher(forward).forward(request, response);}@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {doGet(request, response);}}
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">  <welcome-file-list>    <welcome-file>index.jsp</welcome-file>  </welcome-file-list>    <servlet>  <servlet-name>TestServlet</servlet-name>  <servlet-class>zhudan.servlet.TestServlet</servlet-class>  </servlet>    <servlet-mapping>  <servlet-name>TestServlet</servlet-name>   <url-pattern>*.action</url-pattern>  </servlet-mapping></web-app>
结果为:

          

总结:

       首先TestServlet控制类中出现了许多if else语句,这样是非常影响效率的,米老师也说过,只要if else多了,肯定就能够再封装,同时,这样的程序也非常不灵活,一旦发生变化,那么维护就相当困难,我还得回过头来修改这个类,另外,在if-else中出现了大量的字符串,无形中给调试带来了麻烦。

      其次,我们从页面上获得的数据类型都是字符串,而此时,按照规范,年龄应该是数字类型的,因此在AddUserAction类中,就存在数据类型转换的问题。

     其实,在Struts中就为我们解决了这些问题,下面就看看在Struts框架下是如何实现登陆的。



3 0
原创粉丝点击