Stage3-day10-SSM整合操作

首先用逆向工程生成对应的类:

逆向工程的三要素:导包,配置文件,java工具类

                    

创建mavenweb工程,一定要看对了包再选,有好几个webapp结尾的

idea默认的maven项目不符合规范,我们需要自己创建几个文件夹

      

修改文件夹的属性,他们不同于普通的文件夹

 选中文件夹,点击对应选项,设置文件夹的属性即可。  

设置Tomcat服务器

web.xml 中<context-param>与<init-param>的区别与作用

引用自:https://www.cnblogs.com/zhaoleigege/p/5807995.html

Listener配置信息必须在Filter和Servlet配置之前,Listener的初始化(ServletContentListener初始化)比Servlet和Filter都优先,而销毁比Servlet和Filter都慢。

<context-param>的作用: 
web.xml的配置中<context-param>配置作用 

1. 启动一个WEB项目的时候,容器(如:Tomcat)会去读它的配置文件web.xml.读两个节点: <listener></listener> 和 <context-param></context-param> 
2.紧接着,容器创建一个ServletContext对象(上下文),这个WEB项目所有部分都将共享这个上下文对象. 
3.容器将<context-param></context-param>转化为键值对,并交给ServletContext. 
4.容器创建<listener></listener>中的类实例,即创建监听. 

换句话说,这个时候,你在<context-param>中的键值做的操作,将在你的WEB项目完全启动之前被执行.

context-param和init-param区别 
web.xml里面可以定义两种参数: 
(1)application范围内的参数,存放在servletcontext中,全局都可以用,在web.xml中配置如下: 

<context-param> 
    <param-name>context/param</param-name> 
    <param-value>avalible during application</param-value> 
</context-param> 


(2)servlet范围内的参数,只能在servlet的init()方法中取得,在web.xml中配置如下: 

<servlet> 
    <servlet-name>MainServlet</servlet-name> 
    <servlet-class>com.wes.controller.MainServlet</servlet-class> 
    <init-param> 
       <param-name>param1</param-name> 
       <param-value>avalible in servlet init()</param-value> 
    </init-param> 
    <load-on-startup>0</load-on-startup> 
</servlet> 

在servlet中可以通过代码分别取用: 

package com.wes.controller; 
import javax.servlet.ServletException; 
import javax.servlet.http.HttpServlet; 
public class MainServlet extends HttpServlet ...{ 
    public MainServlet() ...{ 
        super(); 
     } 
    public void init() throws ServletException ...{ 
         System.out.println("下面的两个参数param1是在servlet中存放的"); 
         System.out.println(this.getInitParameter("param1")); 
         System.out.println("下面的参数是存放在servletcontext中的"); 
        System.out.println(getServletContext().getInitParameter("context/param")); 
      } 
} 

第一种参数在servlet里面可以通过getServletContext().getInitParameter("context/param")得到 
第二种参数只能在servlet的init()方法中通过this.getInitParameter("param1")取得. 

为什么扫描包要在不同的配置文件里

我们首先扫描包是在springmvc配置文件中,我们扫描包的时候特意只扫描了controller一个,为什么? --体现了分层的思想.因为controller的对象都是springmvc创建的,所以我们在springmvc中扫描controller,而其他的对象都是在spring中创建的,所以我们除了controller以外的对象都放在spring配置文件中扫描.我们spring也体现了分层思想,spring配置文件本来只有一个即applicationContext.xml我们把这个配置文件按照需求不同分成了3个,分别是applicationContext-tx,applicationContext-jdbc,applicationContext-mybatis.xml那我们要在哪里配置扫描对象呢?答案是无论在哪一个里面都可以,因为我们在web.xml中配置监听加载spring配置文件的时候是这样写的,这样容器启动,对象创建的时候所有的配置文件同时加载,所以不论写在哪一个里面都可以.

property对象注入的时候路径名填写

当对象注入的value是classpath的时候不能写包名.类名,因为他是类路径,最终他会去classes文件夹下去找对应的文件,路径是相对于classes文件夹的路径,我们通过target文件夹就可以看出来,target是部署的时候生成的,没有classpath的时候找对应的包就写包名.类名即可. 涉及到获取配置信息的都要用classpath

idea不同于eclipse,他默认是不会把mapper下的接口部署的,我们需要在pom.xml文件中的build标签里的filename下加上如下代码,或者是在resources文件夹下新建mapper文件夹,然后把我们想要部署的java文件复制到里面也可以

<resources>
    <resource>
      <directory>src/main/java</directory>
      <includes>
        <include>**/*.properties</include>
        <include>**/*.xml</include>
      </includes>
      <filtering>false</filtering>
    </resource>
</resources>

方法二

关于在web.xml中url-pattern中使用名称空间的问题

我们为什么设置url-pattern的时候要使用名称空间?--分组管理,避免不同项目整合时url出现重名. 注意当我们这里url-pattern虽然写的是/restful/*(图一) 但是我们在controller中匹配的时候千万不要写例如/restful/classes这样的url匹配,否则页面会404,并且控制台会报下面的错误

18-May-2019 19:27:15.947 警告 [http-nio-8080-exec-6] org.springframework.web.servlet.PageNotFound.noHandlerFound No mapping found for HTTP request with URI [/ssm/restful/classes] in DispatcherServlet with name 'DispatcherServlet'

   


关于jsp页面加载jquery路径错误的问题

需要特别注意的是jquery,图片等这类静态资源千万不能放到WEB-INF下,因为WEB-INF是受保护的,外界除非通过请求(页面跳转也只能用转发而不能用redirect)否则不能直接访问,我们把jquery单独建个文件夹直接放在webapp下就可以了. 当实在找不到错误的时候,也可以使用网络路径...

<script type="text/javascript" src="https://code.jquery.com/jquery-3.3.1.min.js"></script>
<script src="//cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script>

猜你喜欢

转载自blog.csdn.net/qq_42837554/article/details/90272446