初窥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建一个工程,工程目录结构如下

初窥Struts2(一)

一个简单的利用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="width: 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中配置。

 

你可能感兴趣的:(struts2)