目录

  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的编程实现   

 package cn.xiangxu;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; /**
* Servlet implementation class DemoServlet
*/
public class DemoServlet extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/
public DemoServlet() {
super();
System.out.println("01 利用构造器实例化");
} @Override
public void init() throws ServletException {
super.init();
System.out.println("02 利用init方法初始化");
} /**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
System.out.println("03 调用处理方法"); response.setContentType("text/html;charset:utf-8"); // 设置消息头部分信息
response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter();
out.println("hello servlet");
out.close();
} @Override
public void destroy() {
super.destroy();
System.out.println("04 利用destroy方法销毁");
} /**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
doGet(request, response);
} }

DemoServlet

 package cn.xiangxu;

 import java.io.IOException;
import java.io.PrintWriter; import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletResponse; /**
* Servlet Filter implementation class DemoFilter
*/
public class DemoFilter implements Filter { /**
* Default constructor.
*/
public DemoFilter() {
System.out.println("01 利用构造器实例化");
} /**
* @see Filter#init(FilterConfig)
*/
public void init(FilterConfig fConfig) throws ServletException {
System.out.println("02 利用init方法初始化");
} /**
* @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain)
*/
public void doFilter(ServletRequest request, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
System.out.println("03 调用处理方法"); HttpServletResponse response = (HttpServletResponse)resp; response.setContentType("text/html;charset:utf-8");
response.setCharacterEncoding("utf-8"); PrintWriter out = response.getWriter();
out.println("hello filter");
out.close();
} /**
* @see Filter#destroy()
*/
public void destroy() {
System.out.println("04 利用destroy方法销毁");
} }

DemoFilter

 <?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" 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>servletVsFilter</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>servlet</servlet-name>
<servlet-class>cn.xiangxu.DemoServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>servlet</servlet-name>
<url-pattern>/servlet.do</url-pattern>
</servlet-mapping> <filter>
<filter-name>filter</filter-name>
<filter-class>cn.xiangxu.DemoFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/filter.do</url-pattern>
</filter-mapping>
</web-app>

web.xml

项目结构图

  

servlet效果图

  

filter效果图

  

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的整合插件包

    

 <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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>cn.xiangxu</groupId>
<artifactId>ssh02</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-core</artifactId>
<version>2.3.8</version>
</dependency>
<dependency>
<groupId>org.apache.struts</groupId>
<artifactId>struts2-spring-plugin</artifactId>
<version>2.3.8</version>
</dependency>
</dependencies>
</project>

maven依赖文件代码

  5.2 配置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" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" version="2.5">
<display-name>ssh02</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.htm</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.htm</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <!-- 配置spring监听
目的:容器启动时自动加载一下东西到缓存中 -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener> <!-- 配置Spring配置文件的位置 -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring_*.xml</param-value>
</context-param> <!-- 配置主控制器和过滤条件 -->
<filter>
<filter-name>mvc</filter-name>
<filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>mvc</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> </web-app>

web.xml配置文件源代码

    5.2.1 配置spring监听

      

      所需类的位置

        

    5.2.2 配置Spring配置文件的位置

      

      配置文件所处位置

        

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

      

      所需类的位置

        

  5.3 配置spring_context.xml

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

 <?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jdbc="http://www.springframework.org/schema/jdbc" xmlns:jee="http://www.springframework.org/schema/jee"
xmlns:tx="http://www.springframework.org/schema/tx" xmlns:aop="http://www.springframework.org/schema/aop"
xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:util="http://www.springframework.org/schema/util"
xmlns:jpa="http://www.springframework.org/schema/data/jpa"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jdbc http://www.springframework.org/schema/jdbc/spring-jdbc-3.0.xsd
http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa-1.3.xsd
http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-3.0.xsd
http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-3.0.xsd"> <!-- 配置组件扫描 -->
<context:component-scan base-package="cn.xiangxu" /> </beans>

spring配置文件代码

  5.4 配置struts.xml

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <package name="test" namespace="/test" extends="struts-default"> <!-- namespace是配置访问路径,extends是配置继承默认struts文件 -->
<action name="demo" class="cn.xiangxu.TestAction"> <!-- name是配置访问网名,class是配置action类 -->
<result name="success">
/WEB-INF/jsp/msg.jsp
</result>
</action>
</package> </struts>

struts配置文件

  5.5 编写action类

 package cn.xiangxu;

 public class TestAction {
public String execute() {
System.out.println("struts整合spring");
return "success";
}
}

action类代码

  5.6 编写所需的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>test</title>
</head>
<body>
<h2>恭喜你,struts整合spring成功!</h2>
</body>
</html>

jsp文件代码

  项目结构图

    

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

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

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

 package cn.xiangxu.service;

 import org.springframework.stereotype.Service;

 @Service
public class TestService {
public void test() {
System.out.println("我是业务层的数据哟。");
}
}

增加的service类代码

  6.2 案例改进一

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

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

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

 package cn.xiangxu.action;

 import javax.annotation.Resource;

 import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Controller; import cn.xiangxu.service.TestService; @Controller
@Scope("prototype")
public class TestAction { @Resource(name="testService")
private TestService testService; public String execute() {
System.out.println("struts整合spring");
testService.test();
return "success";
}
}

action类改进

  6.3 案例改进二

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

 <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
"http://struts.apache.org/dtds/struts-2.3.dtd">
<struts> <package name="test" namespace="/test" extends="struts-default"> <!-- namespace是配置访问路径,extends是配置继承默认struts文件 -->
<action name="demo" class="testAction"> <!-- name是配置访问网名,class是配置action类 -->
<result name="success">
/WEB-INF/jsp/msg.jsp
</result>
</action>
</package> </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整合的更多相关文章

  1. 三大框架:Struts+Hibernate+Spring

    三大框架:Struts+Hibernate+Spring Java三大框架主要用来做WEN应用. Struts主要负责表示层的显示 Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作 ...

  2. 【SSH框架】系列之 Spring 整合 Hibernate 框架

    1.SSH 三大框架整合原理 Spring 与 Struts2 的整合就是将 Action 对象交给 Spring 容器来负责创建. Spring 与 Hibernate 的整合就是将 Session ...

  3. ssh整合之五struts和spring整合

    1.首先,我们需要先分析一下,我们的spring容器在web环境中,只需要一份就可以了 另外,就是我们的spring容器,要在我们tomcat启动的时候就创建好了(包括其中的spring的对象),怎么 ...

  4. struts和spring整合

    开发流程: 1)引jar包,可以在配置工程中设置用户libarary,然后直接引入.如果在web-inf/lib没有用户导入的lib文件,可以参考问题0的解决方案 需要的是struts_core,sp ...

  5. 2018.11.11 Java的 三大框架:Struts+Hibernate+Spring

    ·定义:Java三大框架主要用来做WEN应用.Struts主要负责表示层的显示: Spring利用它的IOC和AOP来处理控制业务(负责对数据库的操作): Hibernate主要是数据持久化到数据库. ...

  6. JavaWeb_(Struts2框架)使用Struts框架实现用户的登陆

    JavaWeb_(Struts2框架)使用Servlet实现用户的登陆 传送门 JavaWeb_(Struts2框架)Servlet与Struts区别 传送门 MySQL数据库中存在Gary用户,密码 ...

  7. SSI框架【Struts、Spring、iBatis、Hibernate】

    1.B/S架构的JavaEE开发设计模式,JavaEE架构分成三个层次即表现层.业务逻辑层.数据持久层:而这三层分别通过Struts.Spring.iBatis开源的框架紧密组合在一起的. Strut ...

  8. struts与spring整合

    Spring与Struts框架整合 Spring,负责对象对象创建 Struts, 用Action处理请求 Spring与Struts框架整合, 关键点:让struts框架action对象的创建,交给 ...

  9. struts+hibernate+spring整合过程常见问题收集

    1.java.lang.NoClassDefFoundError: org/objectweb/asm/ClassVisitor缺少asm-3.3.jar2.java.lang.NoClassDefF ...

随机推荐

  1. 一直想写的关于tarjan算法的理解——向struct edge大佬低头

    tarjan的算法精髓就是dfn[]和low[]数组 dfn[i]表示在该节点被搜索的次序(时间戳) low[i]表示i或i的子树可以追溯到的最早的栈中节点 判断有强连通分量的条件就是 dfn[i]= ...

  2. localtime 和 localtime_r 的区别

    转自:http://blog.csdn.net/maocl1983/article/details/6221810 #include <cstdlib> #include <iost ...

  3. MPEG4、XVID、AVC有什么区别

    MPEG-4包含XviD和DivX,而AVC优于二者mpeg4 DVD用的多,101mpeg4有AVC格式(加强版MP4)AVC/H.264是一种最新且技术含量最高的视频编码格式,由MPEG-4标准进 ...

  4. Xcode9 修改工程名(含cocopods)

    由于需要现在要更改包名,但是在网上找了N多资料都比较老,16年的资料却是残缺不全,尤其 ios10 出了 .entitlement  的机制 ,很多琐碎的小细节 很容易忘记.所以我自己总结了一篇, 环 ...

  5. Gym - 101635K:Blowing Candles (简单旋转卡壳,求凸包宽度)

    题意:给定N个点,用矩形将所有点覆盖,要求矩形宽度最小. 思路:裸体,旋转卡壳去rotate即可. 最远距离是点到点:宽度是点到边. #include<bits/stdc++.h> #de ...

  6. HihoCoder1080 更为复杂的买卖房屋姿势(线段树+多重lazy)

    描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们可以化身上帝模式,买卖房产. 在这个游戏里,会不断的发生如下两种事件:一种是房屋自发的涨价或者降价,而另一种是政 ...

  7. Windbg内核调试之四: Dump文件分析

    Dump 文件分析很大程度上就是分析蓝屏产生的原因.这种系统级的错误算是Windows提示错误中比较严重的一种(更严重的还有启动黑屏等硬件或软件兼容性错误等等).说它是比较严重,是因为毕竟Window ...

  8. HIVE-如何查看执行日志

    HIVE既然是运行在hadoop上,最后又被翻译为MapReduce程序,通过yarn来执行.所以我们如果想解决HIVE中出现的错误,需要分成几个过程 HIVE自身翻译成为MR之前的解析错误 Hado ...

  9. Salesforce注册教程

    打开网址 https://developer.salesforce.com/,点击右上角的Sign up(注册) 在页面输入基本信息 >Name:First(姓名) Last(姓)  >E ...

  10. uboot指令和环境变量

    一.uboot指令 1.printenv(pri) - 打印环境变量 2.setenv - 设置环境变量,和saveenv 配合使用 3.saveenv - 保存环境变量 4.run - 执行设置好的 ...