发表于: 2018-04-04 23:02:38

1 598


今天完成的事情:(一定要写非常细致的内容,比如说学会了盒子模型,了解了Margin) 

今天使用SpringMVC写了简单网站 部署到了tomcat上

首先是配置文件web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
         http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
        version="3.0">


<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

<!--当系统出现404错误,跳转到页面NoPage.html-->
   <error-page>
<error-code>404</error-code>
<location>/WEB-INF/NoPage.jsp</location>
</error-page>

<!--当系统出现java.lang.NullPointerException,跳转到页面error.html-->


   <!--会话超时配置,单位分钟-->
   <session-config>
<session-timeout>0</session-timeout>
</session-config>

<!--Spring框架给我们提供过滤器CharacterEncodingFilter
   这个过滤器就是针对于每次浏览器请求进行过滤的,然后再其之上添加了父类没有的功能即处理字符编码。
   其中encoding用来设置编码格式,forceEncoding用来设置是否理会 request.getCharacterEncoding()方法,
   设置为true则强制覆盖之前的编码格式。-->
   <filter>
<filter-name>characterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 配置可以把POST 请求转换为 PUT、DELETE 请求的 filter -->
   <filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<!-- 项目中使用Spring时,applicationContext.xml配置文件中并没有BeanFactory,
   要想在业务层中的class文件中直接引用Spring容器管理的bean可通过以下方式-->
   <!--1、在web.xml配置监听器ContextLoaderListener。ContextLoaderListener的作用就是启动Web容器时,
   自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置这个监听器,
   启动容器时,就会默认执行它实现的方法。
   在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。-->
   <!--<listener>-->
       <!--<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>-->
   <!--</listener>-->

   <!--2、部署applicationContext的xml文件。如果在web.xml中不写任何参数配置信息,默认的路径是"/WEB-INF/applicationContext.xml,
   在WEB-INF目录下创建的xml文件的名称必须是applicationContext.xml。
   如果是要自定义文件名可以在web.xml里加入contextConfigLocation这个context参数:
   在<param-value> </param-value>里指定相应的xml文件名,如果有多个xml文件,可以写在一起并以“,”号分隔,
   也可以这样applicationContext-*.xml采用通配符,匹配的文件都会一同被载入。
   在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:applicationContext.xml</param-value>
</context-param>

<!--如果你的DispatcherServlet拦截"/",为了实现REST风格,拦截了所有的请求,那么同时对*.js,*.jpg等静态文件的访问也就被拦截了。-->
   <!--方案一:激活Tomcat的defaultServlet来处理静态文件-->
   <!--要写在DispatcherServlet的前面,让defaultServlet先拦截请求,这样请求就不会进入Spring了-->
   <servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.css</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.swf</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.gif</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.jpg</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.png</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.js</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.xml</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>default</servlet-name>
<url-pattern>*.map</url-pattern>
</servlet-mapping>

<!--使用Spring MVC,配置DispatcherServlet是第一步。DispatcherServlet是一个Servlet,,所以可以配置多个DispatcherServlet-->
   <!--DispatcherServlet是前置控制器,配置在web.xml文件中的。拦截匹配的请求,Servlet拦截匹配规则要自已定义,
   把拦截下来的请求,依据某某规则分发到目标Controller(我们写的Action)来处理。-->
   <!--配置SpringMVC DispatcherServlet-->
   <servlet>
<!--在DispatcherServlet的初始化过程中,框架会在web应用的 WEB-INF文件夹下寻找名为[servlet-name]-servlet.xml 的配置文件,
       生成文件中定义的bean。-->
       <servlet-name>springMVC</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<!--指明了配置文件的文件名,不使用默认配置文件名,而使用spring-mvc.xml配置文件。-->
           <param-name>contextConfigLocation</param-name>
<!--其中<param-value>**.xml</param-value> 这里可以使用多种写法-->
           <!--1、不写,使用默认值:/WEB-INF/<servlet-name>-servlet.xml-->
           <!--2、<param-value>/WEB-INF/classes/dispatcher-servlet.xml</param-value>-->
           <!--3、<param-value>classpath*:dispatcher-servlet.xml</param-value>-->
           <!--4、多个值用逗号分隔-->
           <param-value>classpath:spring-mvc.xml</param-value>
</init-param>
<!--是启动顺序,让这个Servlet随Servlet容器一起启动。-->
       <load-on-startup>1</load-on-startup>
<async-supported>true</async-supported>
</servlet>
<servlet-mapping>
<!--这个Servlet的名字是springMVC,可以有多个DispatcherServlet,
       是通过名字来区分的。每一个DispatcherServlet有自己的WebApplicationContext
       上下文对象。同时保存的ServletContext中和Request对象中.-->
       <!--ApplicationContext是Spring的核心,Context我们通常解释为上下文环境,我想用“容器”来表述它更容易理解一些,
       ApplicationContext则是“应用的容器”了,Spring把Bean放在这个容器中,在需要的时候,用getBean方法取出-->
       <servlet-name>springMVC</servlet-name>
<!--Servlet拦截匹配规则可以自已定义,当映射为@RequestMapping("/user/add")时,为例,拦截哪种URL合适?-->
       <!--1、拦截*.do、*.htm, 例如:/user/add.do,这是最传统的方式,最简单也最实用。不会导致静态文件(jpg,js,css)被拦截。-->
       <!--2、拦截/,例如:/user/add,可以实现现在很流行的REST风格。
       很多互联网类型的应用很喜欢这种风格的URL。弊端:会导致静态文件(jpg,js,css)被拦截后不能正常显示。 -->
       <url-pattern>/</url-pattern><!--会拦截URL中带“/”的请求。-->
   </servlet-mapping>

</web-app>

Spring Bean的配置文件所在目录


<context-param>  //上下文参数

<param-name>contextConfigLocation</param-name> //参数名
<param-value>classpath:applicationContext.xml</param-value>  //参数值 此处值为spring配置文件
</context-param>
<welcome-file-list>  //欢迎页面指向
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>

监听器由于未使用到 所以//掉 不然会报错 无法启动监听器



spring的配置文件applicationContext.xml 由于未涉及过多 所以只需要一条扫描注解的

<context:component-scan base-package="task2"/>

就可以


然后是spring-mvc的配置文件

<?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:mvc="http://www.springframework.org/schema/mvc" xmlns:task="http://www.springframework.org/schema/task"
      xsi:schemaLocation="http://www.springframework.org/schema/beans
                       http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
                        http://www.springframework.org/schema/context
                       http://www.springframework.org/schema/context/spring-context-4.3.xsd
                       http://www.springframework.org/schema/mvc
                       http://www.springframework.org/schema/mvc/spring-mvc.xsd http://www.springframework.org/schema/task http://www.springframework.org/schema/task/spring-task.xsd">

<!--<mvc:default-servlet-handler/>-->

   <!--启用spring的一些annotation -->
   <context:annotation-config/>

<!-- 自动扫描该包,使SpringMVC认为包下用了@controller注解的类是控制器 -->
<context:component-scan base-package="task2.controller">
<context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
</context:component-scan>

<!--HandlerMapping 无需配置,SpringMVC可以默认启动-->

   <!--静态资源映射-->
   <!--本项目把静态资源放在了WEB-INF的子目录下,资源映射如下-->
   <!--<mvc:resources mapping="/css/**" location="WEB-INF/css/"/>-->
   <!--<mvc:resources mapping="/js/**" location="WEB-INF/js/"/>-->
   <!--<mvc:resources mapping="/image/**" location="WEB-INF/image/"/>-->

   <!-- 配置注解驱动 可以将request参数与绑定到controller参数上 -->
<task:annotation-driven/>
<mvc:annotation-driven />   //基于Schema-based XML的配置定义模式
<context:annotation-config/>

<!--对模型视图名称的解析,即在模型视图名称添加前后缀(如果最后一个还是表示文件夹,则最后的斜杠不要漏了) 使用JSP-->
   <!--默认的视图解析器在上边的解析错误时使用 (默认使用html)- -->
<bean id="defaultViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<!--设置JSP文件的目录位置-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>

<!--SpringMVC文件上传需要配置的节点-->
   <bean id="multipartResolver" class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
<property name="maxUploadSize" value="20971500"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="resolveLazily" value="true"/>
</bean>

<!--&lt;!&ndash;支持返回json,用来处理json格式转换,避免IE执行ajax时,返回json出现下载文件 &ndash;&gt;-->
   <!--<bean class="org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter">-->
   <!--<property name="messageConverters">-->
   <!--<list >-->
   <!--<ref bean="mappingJacksonHttpMessageConverter" />-->
   <!--</list>-->
   <!--</property>-->
   <!--</bean>-->

<bean id="mappingJacksonHttpMessageConverter" class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
<property name="supportedMediaTypes">
<list>
<value>application/json;charset=UTF-8</value>
</list>
</property>
</bean>

</beans>

然后是controller层

package task2.controller;


import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;

@org.springframework.stereotype.Controller
@RequestMapping("/user")
public class UserController {

@RequestMapping("/index")
public String index() {
return ("index");
}
}

@Controller 用来标注controller层

@RequesMapping("/user")

要配置 Web 请求的映射,就需要你用上 @RequestMapping 注解。 

在地址添加/user后会跳到下面的方法上

@RequestMapping("/index")

在类的级别上的注解会将一个特定请求或者请求模式映射到一个控制器之上。之后你还可以另外添加方法级别的注解来进一步指定到处理方法的映射关系。

而到 /home/index 的请求会由 index() 来处理。

<!--设置JSP文件的目录位置-->
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>

然后由spring-mvc的视图定位 给予前缀后缀 

指定到inded.jsp文件 

这么麻烦的原因 大概是为了更好的整理网站层级 及分层管理吧

然后输入/user.index 就能跳转到index.jsp了

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8" %>
<html>
<head>
<title>hello</title>
</head>
<body>
hellp yaloha
</body>
</html>

此为index.jsp里的内容



明天计划的事情:(一定要写非常细致的内容) 

明天继续学习springMVC 加快进度 今天白天被琐事缠身都没怎么学习
遇到的问题:(遇到什么困难,怎么解决的) 

配置文件要更加熟悉 
收获:(通过今天的学习,学到了什么知识)



返回列表 返回列表
评论

    分享到