zoukankan      html  css  js  c++  java
  • 初窥Struts2(一)

         在介绍struts2之前下回顾一下我们没使用struts2之前是怎么进行网站系统开发的。利用MVC分层思想建立一个项目,我们只实现一个登陆模块功能

         首先我们在mysql中创建按一张表代码如下

    1 create table user(
    2    id int primary key auto_increment,
    3    name varchar(20) not null,
    4    password varchar(20) not null
    5 );
    6 insert into user(name,password) values('tim','123');
    7 insert into user(name,password) values('jim','123');
    8 insert into user(name,password) values('harry','123');

    在MyEclipse建一个工程,工程目录结构如下

    一个简单的利用MVC搭建的项目,web.xml配置如下

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     6     <servlet-mapping>
     7         <servlet-name>ActionServlet</servlet-name>
     8         <url-pattern>*.action</url-pattern>
     9     </servlet-mapping>
    10     <welcome-file-list>
    11         <welcome-file>index.jsp</welcome-file>
    12     </welcome-file-list>
    13 </web-app>

    使用ActionServlet充当前端控制器,所有请求都通过ActionServlet来控制页面的跳转.

    ActionServlet的代码:

     1 package demo.servlet;
     2 
     3 import java.io.IOException;
     4 
     5 import javax.servlet.ServletException;
     6 import javax.servlet.http.HttpServlet;
     7 import javax.servlet.http.HttpServletRequest;
     8 import javax.servlet.http.HttpServletResponse;
     9 import javax.servlet.http.HttpSession;
    10 
    11 import demo.action.UserAction;
    12 import demo.entity.User;
    13 
    14 public class ActionServlet extends HttpServlet {
    15 
    16     /**
    17      * 
    18      */
    19     private static final long serialVersionUID = -5458581559476188332L;
    20 
    21     @Override
    22     public void service(HttpServletRequest request, HttpServletResponse response)
    23             throws ServletException, IOException {
    24         String url = request.getRequestURI();
    25         System.out.println(url);
    26         String action = url.substring(url.lastIndexOf("/"),
    27                 url.lastIndexOf("."));
    28         if (action.equals("/login")) {
    29             User user = UserAction.login(request, response);
    30             if (user != null) {
    31                 HttpSession session = request.getSession();
    32                 session.setAttribute("user", user);
    33                 response.sendRedirect("main.jsp");
    34             } else {
    35                 request.setAttribute("msg", "用户名或密码错误");
    36                 request.getRequestDispatcher(url).forward(request, response);
    37             }
    38         }
    39     }
    40 
    41 }

    上述代码

    每一个请求我们都要,进行判断,这样随着业务的增加请求越来越多,service里面的代码越来越多,不便于维护。于是便有了struts2框架,struts2充当了前端控制器的角色,不过struts2控制功能更加强大,代码更加容易维护,使我们只关注与业务代码的编写,而不用关心业务之间的跳转。

    现在我们对上述的项目使用struts2进行改进

    首先配置web.xml

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
     3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
     4     xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
     5     http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
     6     <filter>
     7         <filter-name>struts2</filter-name>
     8         <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
     9     </filter>
    10     <filter-mapping>
    11         <filter-name>struts2</filter-name>
    12         <url-pattern>/*</url-pattern>
    13     </filter-mapping>
    14 </web-app>

    在src下新建一个struts.xml文件

     1 <?xml version="1.0" encoding="UTF-8"?>
     2 <!DOCTYPE struts PUBLIC
     3     "-//Apache Software Foundation//DTD Struts Configuration 2.1//EN"
     4     "http://struts.apache.org/dtds/struts-2.1.dtd">
     5 <struts>
     6     <!-- 配置package,用于组织和管理Action的配置 
     7                    属性:
     8              name 指定package的名称,可以定义多个包,name不能重复
     9              extends 指定当前包的基包,通常使用包struts-default,
    10                                该包由strtus-core-*.jar/struts-default.xml中定义,  包含package所必需的底层配置
    11              namespace 指定包的命名空间,用于访问包中的Action时指定对应的路径
    12                                例: namespace="/demo",actionName="login"
    13                  http://localhost:8080/struts2_analysis/demo/login.action
    14                  namespace="/",actionName="login"
    15                  http://localhost:8080/struts2_analysis/login.action
    16           
    17     -->
    18     
    19     <package name="struts2-analysis" extends="struts-default"
    20              namespace="/demo">
    21          <!-- 配置login 
    22                                  属性name 指定访问Action时使用的名称,访问时以.action结尾
    23               method 指定处理业务的方法名称,默认值是execute
    24          -->
    25          <action name="login"
    26                  class="demo.action.UserAction"
    27                  method="execute">
    28              <!-- 配置Result,用于将视图页面映射为逻辑名称 -->
    29              <result name="success">/main.jsp</result>
    30              <result name="fail">/login.jsp</result>
    31          </action>    
    32              
    33     </package>
    34 </struts>

    在对UserAction进行改写

     package demo.action;

    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;

    import com.opensymphony.xwork2.ActionContext;

    import demo.dao.UserDao;
    import demo.entity.User;

    public class UserAction {
    public static User login(HttpServletRequest request,
    HttpServletResponse response) {
    String name = request.getParameter("name");
    String password = request.getParameter("password");
    UserDao dao = new UserDao();
    User user = dao.findUser(name, password);
    return user;
    }

    private String name;
    private String password;
    private String msg;

    public String getMsg() {
    return msg;
    }

    public void setMsg(String msg) {
    this.msg = msg;
    }

    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;
    }

    public String execute() {
    UserDao dao = new UserDao();
    User user = dao.findUser(name, password);
    if (user != null)
    return "success";
    else {
    msg = "用户名或密码错误";
    return "fail";
    }
    }
    }

    login.jsp代码

     1 <%@ page language="java" contentType="text/html; charset=UTF-8"
     2     pageEncoding="UTF-8"%>
     3 <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
     4 <html>
     5     <head>
     6         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
     7         <title>login</title>
     8         <style type="text/css">
     9 .input {
    10     width: 200px;
    11 }
    12 
    13 table {
    14     margin-left: 35%;
    15 }
    16 </style>
    17     </head>
    18     <body>
    19         <form action="demo/login.action">
    20             <table border="1">
    21                 <tr>
    22                     <td>
    23                         用户名:
    24                     </td>
    25                     <td>
    26                         <input type="text" name="name" class="input" />
    27                     </td>
    28                 </tr>
    29                 <tr>
    30                     <td>
    31&nbsp;&nbsp;码:
    32                     </td>
    33                     <td>
    34                         <input type="password" name="password" class="input" />
    35                     </td>
    36                 </tr>
    37                 <tr>
    38                     <td colspan="2" align="center">
    39                         <span style="color: red">${msg}</span>
    40                     </td>
    41                 </tr>
    42                 <tr>
    43                     <td colspan="2" align="center">
    44                         <input type="submit" value="登录" style=" 100px;" />
    45                     </td>
    46                 </tr>
    47             </table>
    48         </form>
    49     </body>
    50 </html>

    在浏览器中输入 http://localhost:8080/struts2_analysis/login.jsp

    这样一个利用struts2构建的MVC程序就完成了.有了struts2我们只需要关注与Action的编写就可以了,页面的跳转我们可以再struts.xml中配置。

  • 相关阅读:
    python使用ORM之如何调用多对多关系
    ORM
    初学者用pycharm创建一个django项目和一个app时需要注意的事项
    CSRF verification failed. Request aborted.
    函数三生成器
    函数二函数进阶二
    函数二函数进阶
    函数一函数初识
    文件操作初识
    类型与运算五
  • 原文地址:https://www.cnblogs.com/ArtsCrafts/p/2610700.html
Copyright © 2011-2022 走看看