从创建工程开始,一步步来,先创建web.xml
先要配置一个servlert,跟struts2差不多,struts2配置的是一个filter,
意思都差不多。
配置的时候最麻烦的地方就是<servlet-class></servlet-class>
很难记住类名。
我认为这也是spring难学的原因之一。
好多类啊~~,完全不知道怎么用。没事,一步步来呗。能用一个是一个。
既然是用spring,那肯定要引入spring的jar包。
我是从spring官网下的,有源码的那种,
每个功能都分得很详细,需要什么用什么,���们是使用mvc,所以我引用了spring-webmvc.jar.
Servlet就要用这个类,名字也比较像,我确实是没有刻意去记他,但是 你翻翻jar包,还是能比较快速的找到所要的类的,大致留个印象在脑海就可以了。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>springmvc</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
好,这样就完成了servlet的配置,就是用来转发的作用,转发给另一个类,然后另一类,再根据你在xml配置的路径 所对应的control。
跟struts还是非常相似的。
我们这么配置个servlet肯定是不可以的,还需要个配置文件,配置分发请求给对应的Control的类,还需要配置一个根据返回值显示jsp的类。
创建配置文件springmvc.xml
配置上述2个bean
首先是handler。
这个时候又要想用什么class了。。。(感觉记住所所有类名是不可能的,还是说在脑子里留个印象)
我随便找了下,可以使用SimpleUrlHandlerMapping。
<bean class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="urlMap">
<map>
<entry key="/user.do" value="userControl"></entry>
</map>
</property>
</bean>
上面意思就是说,当你请求url为user.do 的时候,我就请求id=userControl的bean,
所以我们还需要创建个userControl的bean。
首先我们要创建个UserControl,用来处理用户请求,这个UserControl必须要实现Controller
public class UserControl implements Controller{
@Override
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
return new ModelAndView("user");
}
}
就像struts里面的action差不多。
这个先不多说。
下面把这个类的bean配置一下。
<bean id="userControl" class="com.javalong.springmvc.control.UserControl">
</bean>
就这样简单的写下就可以了,没有什么属性需要注入。
下面我们再来想个问题。
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
return new ModelAndView("user");
}
这个方法中,返回值什么意思啊?
既然说跟struts里面的action差不多,那么不难想象,这个返回值,其实是为了转发给对应的jsp。
在springmvc中,你需要配置一个bean来解析,你要转发的jsp。
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="suffix" value=".jsp"></property>
<property name="prefix" value="/jsp/"></property>
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"></property>
</bean>
前面2个属性,就是配置前后缀,没什么好说的,后面一个就是
配置上后,可以在jsp中 使用jstl。
好,到这里就都配置好了~
还差一个地方就是,我们要创建一个jsp
应为我定义了个前缀/jsp/,所以我建了个文件夹,然后return new ModelAndView("user");
是user,后缀是.jsp,所以合起来就是user.jsp.这应该没什么好说的。
Jsp内容非常简单:
<%@page pageEncoding="utf-8" contentType="text/html; charset=utf-8"%>
<html>
<head>
</head>
<body>
欢迎关注~java_along~
</body>
</html>
就显示一段文字。
下面我们部署到tomcat中,试试可以不可以。
访问:报错
一看就知道少jar包。
导入spring-context-4.1.0.RELEASE.jar
访问,报错
导入spring-beans-4.1.0.RELEASE.jar
访问 报错
导入spring-core-4.1.0.RELEASE.jar
启动报错:
导入commons-logging.jar
访问,报错
这个错误就是jar包问题了。错误说找不到/WEB-INF/spring-servlet.xml,这个就比较奇怪了,这是一个什么文件啊,我在其他地方啊没用到,我需要你找嘛,你就找不到~~~
因为在web.xml里面配置servlet的时候,是需要配置你springmvc配置文件的路径的,如果你不配置,那么你的文件名就默认叫servlet-name再加上-servlet.xml,并且在/WEB-INF
下面我们配置下路径。
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:springmvc.xml</param-value>
</init-param>
</servlet>
加个初始化变量contextConfigLocation,classpath:springmvc.xml这个意思就是类路径下,springmvc.xml,准确点,应该是bin目录下的springmvc.xml,但是因为src编译后就会到bin目录下,所以一般写classpath,你放在src目录下也是没错的。
下面我们访问下~~~
导入spring-expression-4.1.0.RELEASE.jar
访问 报错
导入jstl-1.1.2.jar
运行 报404错误~~
因为我们在web.xml配置了/* 就是所有请求都要通过handler,也就是最后访问的/jsp/user.jsp的请求也经过handler,结果handler发现没有配置对应的controller,所以报了个404,我们在web.xml配置为*.do就可以了
访问成功~~
大功告成~~~~~
希望大家多多关注java_along~~~