欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  Java

Struts2框架04 struts和spring整合

程序员文章站 2022-05-12 08:33:26
...
 目录

  1 servlet 和 filter 的异同

  2 内存中的字符编码

  3 gbk和utf-8的特点

  4 struts和spring的整合

  5 struts和spring的整合步骤

  6 springIOC在action类中的使用

  7 注解回顾

1 servlet 和 filter 的异同

  1.1 相同点

    filter完全可以代替servlet使用,但是filter中的某些功能servlet不能实现,而servlet的所有功能filter都能实现

  1.2 不同点

    1.2.1 概念上

      servlet 是运行在服务器端的程序,动态生成web页面

      filter 是一段可以复用的代码,不能生成请求和响应,但是可以对相应和请求做相应的处理

    1.2.2 生命周期上

      servlet 是在web服务器启动或web服务器接收到第一次请求时利用构造器实例化servlet,然后调用init方法进行初始化,之后的每次请求会调用doGet或者doPost方法进行处理;当关闭服务器的时候,调用destroy方法销毁实例

      filter 是在web服务器启动时利用构造器实例化filter,然后调用init方法进行初始化,之后的每次请求调用doFilter方法进行处理,关闭服务器的时候,调用destroy方法销毁实例

    1.2.3 类型不同

      servlet是类、filter是接口

  1.3 servlet 、filter的编程实现   

Struts2框架04 struts和spring整合
 1 package cn.xiangxu;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.ServletException;
 7 import javax.servlet.http.HttpServlet;
 8 import javax.servlet.http.HttpServletRequest;
 9 import javax.servlet.http.HttpServletResponse;
10 
11 /**
12  * Servlet implementation class DemoServlet
13  */
14 public class DemoServlet extends HttpServlet {
15     private static final long serialVersionUID = 1L;
16     
17     /**
18      * @see HttpServlet#HttpServlet()
19      */
20     public DemoServlet() {
21         super();
22         System.out.println("01 利用构造器实例化");
23     }
24     
25     @Override
26     public void init() throws ServletException {
27         super.init();
28         System.out.println("02 利用init方法初始化");
29     }
30 
31     /**
32      * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
33      */
34     protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
35         System.out.println("03 调用处理方法");
36         
37         response.setContentType("text/html;charset:utf-8"); // 设置消息头部分信息
38         response.setCharacterEncoding("utf-8");
39         
40         PrintWriter out = response.getWriter();
41         out.println("hello servlet");
42         out.close();
43     } 
44     
45     @Override
46     public void destroy() {
47         super.destroy();
48         System.out.println("04 利用destroy方法销毁");
49     }
50 
51     /**
52      * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
53      */
54     protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
55         // TODO Auto-generated method stub
56         doGet(request, response);
57     }
58 
59 }
DemoServlet
Struts2框架04 struts和spring整合
 1 package cn.xiangxu;
 2 
 3 import java.io.IOException;
 4 import java.io.PrintWriter;
 5 
 6 import javax.servlet.Filter;
 7 import javax.servlet.FilterChain;
 8 import javax.servlet.FilterConfig;
 9 import javax.servlet.ServletException;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.ServletResponse;
12 import javax.servlet.http.HttpServletResponse;
13 
14 /**
15  * Servlet Filter implementation class DemoFilter
16  */
17 public class DemoFilter implements Filter {
18 
19     /**
20      * Default constructor. 
21      */
22     public DemoFilter() {
23         System.out.println("01 利用构造器实例化");
24     }
25     
26     /**
27      * @see Filter#init(FilterConfig)
28      */
29     public void init(FilterConfig fConfig) throws ServletException {
30         System.out.println("02 利用init方法初始化");
31     }
32     
33     /**
34      * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
35      */
36     public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
37         System.out.println("03 调用处理方法");
38         
39         HttpServletResponse response = (HttpServletResponse)resp;
40         
41         response.setContentType("text/html;charset:utf-8");
42         response.setCharacterEncoding("utf-8");
43         
44         PrintWriter out = response.getWriter();
45         out.println("hello filter");
46         out.close();
47     }
48     
49     /**
50      * @see Filter#destroy()
51      */
52     public void destroy() {
53         System.out.println("04 利用destroy方法销毁");
54     }
55     
56 }
DemoFilter
Struts2框架04 struts和spring整合
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee " id="WebApp_ID" version="2.5">
 3   <display-name>servletVsFilter</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12   <servlet>
13     <servlet-name>servlet</servlet-name>
14     <servlet-class>cn.xiangxu.DemoServlet</servlet-class>
15   </servlet>
16   <servlet-mapping>
17     <servlet-name>servlet</servlet-name>
18     <url-pattern>/servlet.do</url-pattern>
19   </servlet-mapping>
20   
21   <filter>
22     <filter-name>filter</filter-name>
23     <filter-class>cn.xiangxu.DemoFilter</filter-class>
24   </filter>
25   <filter-mapping>
26     <filter-name>filter</filter-name>
27     <url-pattern>/filter.do</url-pattern>
28   </filter-mapping>
29 </web-app>
web.xml

项目结构图

  Struts2框架04 struts和spring整合

servlet效果图

  Struts2框架04 struts和spring整合

filter效果图

  Struts2框架04 struts和spring整合

 

2 为什么对内存中的字符进行编码

  字符在服务器内存中是16位的char,网络传输的单位是8为的byte,我们必须对数据进行拆分才能够进行传输,拆分的过程我们叫做编码

 

3 描述一下GBK和UTF-8的特点

  utf-8是国际化的最优编码方案,包括了所有的字符,中文占3字节
  gbk是本土化的最优编码方案,包含的字符较少,中文占2字节

 

4 struts2 和 spring 整合

  4.1 为什么要进行整合

    使用spring框架管理组件,实现注入,简化代码

  4.2 怎么整合

    导包(struts2 - spring - plugin)

    配置文件(web.xml  spring-struts.xml)

    struts.xml配置文件

 

5 利用 struts + spring 实现 hello world 案例

  5.1 导包

    struts2核心包、struts和spring的整合插件包

    Struts2框架04 struts和spring整合

Struts2框架04 struts和spring整合
 1 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 ">
 2   <modelVersion>4.0.0</modelVersion>
 3   <groupId>cn.xiangxu</groupId>
 4   <artifactId>ssh02</artifactId>
 5   <version>0.0.1-SNAPSHOT</version>
 6   <packaging>war</packaging>
 7   <dependencies>
 8       <dependency>
 9           <groupId>org.apache.struts</groupId>
10           <artifactId>struts2-core</artifactId>
11           <version>2.3.8</version>
12       </dependency>
13       <dependency>
14           <groupId>org.apache.struts</groupId>
15           <artifactId>struts2-spring-plugin</artifactId>
16           <version>2.3.8</version>
17       </dependency>
18   </dependencies>
19 </project>
maven依赖文件代码

  5.2 配置web.xml

Struts2框架04 struts和spring整合
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee " version="2.5">
 3   <display-name>ssh02</display-name>
 4   <welcome-file-list>
 5     <welcome-file>index.html</welcome-file>
 6     <welcome-file>index.htm</welcome-file>
 7     <welcome-file>index.jsp</welcome-file>
 8     <welcome-file>default.html</welcome-file>
 9     <welcome-file>default.htm</welcome-file>
10     <welcome-file>default.jsp</welcome-file>
11   </welcome-file-list>
12   
13   <!-- 配置spring监听
14               目的:容器启动时自动加载一下东西到缓存中 -->
15   <listener>
16       <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
17   </listener>
18   
19   <!-- 配置Spring配置文件的位置 -->
20   <context-param>
21       <param-name>contextConfigLocation</param-name>
22       <param-value>classpath:spring_*.xml</param-value>
23   </context-param>
24   
25   <!-- 配置主控制器和过滤条件 -->
26   <filter>
27       <filter-name>mvc</filter-name>
28       <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
29   </filter>
30   <filter-mapping>
31       <filter-name>mvc</filter-name>
32       <url-pattern>/*</url-pattern>
33   </filter-mapping>
34   
35   
36 </web-app>
web.xml配置文件源代码

    5.2.1 配置spring监听

      Struts2框架04 struts和spring整合

      所需类的位置

        Struts2框架04 struts和spring整合

    5.2.2 配置Spring配置文件的位置

      Struts2框架04 struts和spring整合

      配置文件所处位置

        Struts2框架04 struts和spring整合

    5.2.3 配置主控制器和过滤条件

      Struts2框架04 struts和spring整合

      所需类的位置

        Struts2框架04 struts和spring整合

  5.3 配置spring_context.xml

     只需要在里面配置组件扫描即可

Struts2框架04 struts和spring整合
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <beans xmlns="http://www.springframework.org/schema/beans"
 3     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
 4     xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
 5     xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
 6     xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
 7     xmlns:jpa="http://www.springframework.org/schema/data/jpa"
 8     xsi:schemaLocation="
 9          http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
10          http://www.springframework.org/schema/context/spring-context-3.0.xsd
11          http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
12          http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
13          http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
14          http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
15          http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
16          http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
17          http://www.springframework.org/schema/util/spring-util-3.0.xsd">
18 
19     <!-- 配置组件扫描 -->
20     <context:component-scan base-package="cn.xiangxu" />
21     
22 </beans>
spring配置文件代码

  5.4 配置struts.xml

Struts2框架04 struts和spring整合
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6 
 7     <package name="test" namespace="/test" extends="struts-default"> <!-- namespace是配置访问路径,extends是配置继承默认struts文件 -->
 8         <action name="demo" class="cn.xiangxu.TestAction"> <!-- name是配置访问网名,class是配置action类 -->
 9             <result name="success">
10                 /WEB-INF/jsp/msg.jsp
11             </result>
12         </action>
13     </package>
14     
15 </struts>
struts配置文件

  5.5 编写action类

Struts2框架04 struts和spring整合
1 package cn.xiangxu;
2 
3 public class TestAction {
4     public String execute() {
5         System.out.println("struts整合spring");
6         return "success";
7     }
8 }
action类代码

  5.6 编写所需的JSP文件

Struts2框架04 struts和spring整合
 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>test</title>
 8 </head>
 9 <body>
10     <h2>恭喜你,struts整合spring成功!</h2>
11 </body>
12 </html>
jsp文件代码

  项目结构图

    Struts2框架04 struts和spring整合

 

6 struts整合spring后就可以使用springIOC啦

  例如:持久层的action类中通过依赖注入服务层的类,从而就可以使用服务层的相关属性和方法啦

  6.1 案例改进所需的业务层类

Struts2框架04 struts和spring整合
 1 package cn.xiangxu.service;
 2 
 3 import org.springframework.stereotype.Service;
 4 
 5 @Service
 6 public class TestService {
 7     public void test() {
 8         System.out.println("我是业务层的数据哟。");
 9     }
10 }
增加的service类代码

  6.2 案例改进一

    在action类上添加@Controller注解,这样spring容器就会自动给其增加一个bean

    在action类上添加@Scope("prototype")注解,这样就能让每一个请求都有一个action处理类,如果不写就是所有的请求公用一个action处理类(即:默认时使用单例模式)

    在action类中依赖注入业务层,从而实现控制反转

Struts2框架04 struts和spring整合
 1 package cn.xiangxu.action;
 2 
 3 import javax.annotation.Resource;
 4 
 5 import org.springframework.context.annotation.Scope;
 6 import org.springframework.stereotype.Controller;
 7 
 8 import cn.xiangxu.service.TestService;
 9 
10 @Controller
11 @Scope("prototype")
12 public class TestAction {
13     
14     @Resource(name="testService")
15     private TestService testService;
16     
17     public String execute() {
18         System.out.println("struts整合spring");
19         testService.test();
20         return "success";
21     }
22 }
action类改进

  6.3 案例改进二

    struts中的action标签中的class属性值可以用相应bean的id代替

Struts2框架04 struts和spring整合
 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE struts PUBLIC
 3     "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
 4     "http://struts.apache.org/dtds/struts-2.3.dtd">
 5 <struts>
 6 
 7     <package name="test" namespace="/test" extends="struts-default"> <!-- namespace是配置访问路径,extends是配置继承默认struts文件 -->
 8         <action name="demo" class="testAction"> <!-- name是配置访问网名,class是配置action类 -->
 9             <result name="success">
10                 /WEB-INF/jsp/msg.jsp
11             </result>
12         </action>
13     </package>
14     
15 </struts>
sturts配置文件代码改进

  

7 注解回顾

  @Component@Controller@Service@Repository

  @Resource@Scope

  @Component 通用的标记(不推荐使用,菜鸟可以使用,【AOP编程时可以使用】)

    格式1:@Controller("指定id")   

    格式2:@Controller  这种方式时使用默认的id,即:类名小写后的值
  @Controller 作用于控制层
  @Service 作用于业务层
  @Repository 作用于持久层

  @Scope 避免线程的安全问题,指定值为“prototype",这样每个请求都会对应一个action处理类;如果不写的话就是单例模式(即:所有请求对应一个action处理类)

    格式:@Scope("prototype")

  @Resource 依赖注入时的声明  

    格式:@Resource(name="依赖注入的id")

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

    

 

以上就是Struts2框架04 struts和spring整合的详细内容,更多请关注其它相关文章!