搭建SpringMVC详解
搭建SpringMVC详解
1.创建web项目,选择2.5版本
2.搭建项目环境
2.1删除src,创建src目录.
step:右键点击项目—>鼠标移到New上—>点击Source Fonder—>输入创建目录(如图所示)
根据上面的步骤依次创建src目录,如图所示
2.2 拷入所需的jar包到lib中,如图所示
2.3 拷入所需的jsp页面,如图所示
2.4 配置文件
2.4.1 src/main/resource中创建名为application.xml的xml文件
step:src/main/resource—>New—>Other—>搜索spring—>点击Spring Bean Configuration—>创建名为application.xml的xml文件
在NameSpaces下勾选如下选项,之后点击Source
配置代码如下
<?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"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.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-4.3.xsd">
<!--类似扫描的作用,指定base-packagebao开始的包内加了Controller、Service、Componet这三类注解的类自动实例化- -->
<context:component-scan base-package="com.jd"></context:component-scan>
<!--如果请求没有任何一个Controller中的某一个方法处理,则交给Web服务器默认Servlet处理-->
<mvc:default-servlet-handler/>
<mvc:annotation-driven></mvc:annotation-driven>
<!-- 对返回的数据进行拼接,如/WEB-INF/view/success.jsp ,这样就能返回一个页面-->
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property> <!--前缀-->
<property name="suffix" value=".jsp"></property> <!--后缀-->
</bean>
</beans>
2.4.2 配置web.xml的Servlet
<?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>moon</display-name>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<!-- 给init()方法传值-->
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:application.xml</param-value><!--配置资源,创建一个Spring容器-->
</init-param>
<!-- Tomcat启动时就创建,默认情况不是 -->
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<!-- /拦截所有的请求,每个请求都会到DispatcherServlet-->
<url-pattern>/</url-pattern>
</servlet-mapping>
</web-app>
3.创建模块,下面举一个例子来更深入的了解一下
3.1模块创建如下
3.2客户端请求执行过程
step0 : Tomcat发布项目,执行web.xml文件中的代码
step1:客户端发请求,
如果请求没有对应的Controller处理,则会交给Web服务器进行处理,
跳出servlet,寻找外部静态资源,这里指Tomcat,
Tomcat寻找到index.jsp,跳转到indexController
<%@ page language="java" contentType="text/html; charset=Utf-8" pageEncoding="Utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setAttribute("path", basePath);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<script type="text/javascript">
location.href="${path}index/index.do";//与Map集合中@RequestMapping的value值相比,找到一样的,则跳转过去
</script>
</body>
</html>
step2:执行indexController中的代码
package com.jd.index;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@Controller
public class IndexController {
@RequestMapping("/index/index.do")
public String index() {
return "login";
}
}
step3: 得到结果,与application中的前缀和后缀组合成路径,返回登录页面
application代码:
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="prefix" value="/WEB-INF/view/"></property> <!--前缀-->
<property name="suffix" value=".jsp"></property> <!--后缀-->
</bean>
``
登录页面
登录代码:
<%@ page language="java" contentType="text/html; charset=Utf-8" pageEncoding="Utf-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
request.setAttribute("path", basePath);
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title></title>
</head>
<body>
<form action="${path}userinfo/login.do" method="post">
<input name="userName"/>
<input type="password" name="password"/>
<input type="submit" value="登陆"/>
</form>
</body>
</html>
step3: 点击登后,走到@RequestMapping的value="/userinfo/login.do"的Controller,并执行其中的代码,得到返回数据与application中的前缀、后缀组合,返回页面
UserInfoController代码:
package com.jd.userinfo;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
@Controller
public class UserInfoController {
//加上该注解会自动创建对象
@Autowired
private IUserInfoService userInfoService;
@RequestMapping(value="/userinfo/login.do",method=RequestMethod.POST)
public String login(String userName,String password,HttpServletRequest request) {
if (userInfoService.login(userName, password)) {//如果用户存在,login方法true,则会执行if里面的代码
request.getSession().setAttribute("userName", userName);
return "success";
}
return "fail";
}
}
返回页面,登录成功
执行Controller里面的代码时,处理数据采用MVC模式处理数据,代码如下:
IUserInfoService代码:
package com.jd.userinfo;
public interface IUserInfoService {
boolean login(String userName,String password);
}
IUserInfoDao代码:
package com.jd.userinfo;
public interface IUserInfoDao {
boolean login(String userName,String password);
}
UserInfoService代码
package com.jd.userinfo.imp;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jd.userinfo.IUserInfoDao;
import com.jd.userinfo.IUserInfoService;
@Service
public class UserInfoService implements IUserInfoService {
@Autowired
private IUserInfoDao userInfoDao ;
public boolean login(String userName,String password) {
return userInfoDao.login(userName, password);
}
}
UserInfoDao代码
package com.jd.userinfo.imp;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.springframework.stereotype.Repository;
import com.jd.tool.db.DBTool;
import com.jd.tool.db.IRowMapper;
import com.jd.userinfo.IUserInfoDao;
@Repository
public class UserInfoDao implements IUserInfoDao {
public boolean login(String userName,String password) {
String sql="select user_name from user_info where user_name=? and password=?";
class RowMapper implements IRowMapper {
boolean state;
public void rowMapper(ResultSet resultSet) {
try {
if (resultSet.next()) {
state=true;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
RowMapper rowMapper = new RowMapper();
DBTool.select(sql, rowMapper,userName,password);
return rowMapper.state;//返回数据到UserInfoController
}
}