1. 概念
伪静态,简单来说是指转换url地址,在这里用来替换掉urlMapping。因为urlMapping需要为每一个页面都进行配置,非常麻烦。
2. RequestMapping
3. Spring 注解
3.1. 概念
注解后,可动态操作成员。
3.2. 条件
注解声明、使用注解的元素、操作使用注解元素的代码。
3.3. 注解配置
3.3.1. 打开spring-servlet.xml
3.3.1. 处理urlMapping
在spring-servlet.xml里面:
注释或删除urlMapping。
3.3.2. 添加扫描
3.3.2.1. 添加
在spring-servlet.xml里面,添加
<context:component-scan base-package=“com.myweb”></context:component-scan>
3.3.2.2. 报错
Open quote is expected for attribute "base-package" associated with an element type "context:componet-scan"
3.3.2.3. 分析
问题也就是出在"base-package"上面,expected for ,就是说,上面给的无效的。仔细一看,引号有问题,是中文的。
3.3.2.4. 解决
“com.myweb”应该为英文的"com.myweb"
3.3.2.5. 又报错
The prifix "context" for element "context:component-scan" is not bound.
3.3.2.6. 分析
意思好像是 "context"没有引用进来。果然是。
3.3.2.7. 解决
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd"> <context:component-scan base-package="com.myweb"></context:component-scan> <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp/"></property> <property name="suffix" value=".jsp"></property> </bean> <bean id="IndexAction" class="com.myweb.IndexAction"> <property name="view"> <value>index</value> </property> </bean> </beans>
指的是要扫描指定包下的文件,如有标记则表示该文件为控制器。
3.3.3. 配置控制器标记
3.3.3.1. 生成新的控制器文件
在包com.myweb(控制器包)下面,生成新文件NewsAction.java。
在jsp下面生成对应的News.jsp,并把index.jsp里面的内容拷进来稍微改动下。
3.3.3.2. 注解控制器
需要两步
3.3.3.2.1. @Controller
package com.myweb; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.servlet.ModelAndView; @Controller public class NewsAction { }
只需要添加@Contoller,即告诉Spring,该类为控制器。控制器不用再实现Controller接口。
3.3.3.2.2. @RequestMapping
@RequestMapping("/newsshow") public ModelAndView ShowNews(){ ModelAndView mv = new ModelAndView("news"); return mv; }
newsshow,代表网页访问符。
news,代表news.jsp
3.3.3.4. 使用控制器
上面的例子对应这么输入:http://localhost:8080/newsshow.do
4. 去掉url中的 .do等后缀
4.1. 打开工程中的web.xml
4.2. 修改servlet-mapping
这里指定servlet。
<servlet-mapping> <servlet-name>spring</servlet-name> <url-pattern>/</url-pattern> </servlet-mapping>
把<url-pattern></url-pattern>中的.do 改为 /,表示从根目录开始,都用名为spring的servlet处理。
4.2. 修改filter-mapping
这是字符集处理。
<filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/</url-pattern> </filter-mapping>
同样处理,把<url-pattern></url-pattern>中的.do 改为 /。
5. 使用路径参数
@RequestMapping("/news/{id}/") public ModelAndView ShowNewsCatalog(@PathVariable String id){ ModelAndView mv = new ModelAndView("news"); return mv; }
注意,红颜色标准的参数名必须相同。