一、什么是MVC
1、M model模型 (javabean)
2、V view视图 (html/jsp)
3、C controller控制器 (servlet)
二、SpringMVC
1、先配置pom.xml中的依赖
<packaging>war</packaging>
<dependencies>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
</dependencies>
<build>
<plugins>
<!-- define the project compile level -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.6.1</version>
<configuration>
<source>1.8</source>
<target>1.8</target>
</configuration>
</plugin>
<!-- 添加tomcat插件 -->
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<path>/</path>
<port>8080</port>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
</plugins>
</build>
其中:
<packaging>war</packaging>
指定打包方式打成war包
但需要注意的的是如果报红,如图:
则要在<build></build>中添加依赖:
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
下是servlet的依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
下是jstl的依赖:
<dependency>
<groupId>jstl</groupId>
<artifactId>jstl</artifactId>
<version>1.2</version>
</dependency>
2、为了提高程序的安全性,将页面放入WEB-INF下,这样便无法直接访问。
(1)在WEB-INF下建一个输入商品的页面input.jsp
<form method="post" action="/show">
编号<input type="text" name="id" /><br />
品名<input type="text" name="name" /><br />
价格<input type="text" name="price" /><br />
图示<input type="text" name="img" /><br />
<input type="submit" value="submit" /><br />
</form>
点击提交就会将"/show"发送,由servlet获取然后跳转展示页面
(2)自定义一个接口,实现管理多个请求,模拟Spring MVC中的控制器
public interface Controller {
/*
* 自定义接口,实现管理多个请求,在模拟Spring MVC中的控制器
* */
String handleRequest(HttpServletRequest request, HttpServletResponse response);
}
(3)DispatcherServlet (分发)
多个请求可以交给同一个Servlet(DispatcherServlet),然后各自不同的请求会交给各自的控制器。所有请求都交给DispatcerServet,该角色相当于一个前端控制器,可以大大的提高客户的以及服务器端的工作效率。
@WebServlet({"/input","/show"})
public class DispatcherServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String requestURI = request.getRequestURI();
String action = requestURI.substring(requestURI.lastIndexOf("/") + 1);
Controller controller = null;
if("input".equalsIgnoreCase(action)){
controller = new InputController();
}else if("show".equalsIgnoreCase(action)){
controller = new ShowController();
}
String url = controller.handleRequest(request, response);
request.getRequestDispatcher(url).forward(request, response);
}
}
@WebServlet({"/input","/show"})
要想填入两个值,要在外面加{}
判断请求的是/input还是/show,然后将请求交个判断出来的控制器。例如如果是/input,就将请求交给InputController,跳转到input.jsp去。如果是/show,就将请求交给ShowController,跳转到show.jsp去。
(4)InputController.java
public class InputController implements Controller {
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) {
return "/WEB-INF/input.jsp";
}
}
控制器。继承接口。根据请求控制跳转要去的页面
(5)ShowController.java
public class ShowController implements Controller{
@Override
public String handleRequest(HttpServletRequest request, HttpServletResponse response) {
String id = request.getParameter("id");
String name = request.getParameter("name");
String sprice = request.getParameter("price");
String img = request.getParameter("img");
double price = sprice == null ? 0.0 : Double.parseDouble(sprice);
Product p = new Product();
p.setId(id);
p.setName(name);
p.setPrice(price);
p.setImg(img);
request.setAttribute("p", p);
return "/WEB-INF/show.jsp";
}
}
获取前台输入的信息然后放入p对象里。
控制器。继承接口。根据请求控制跳转要去的页面。
(6)创建show.jsp页面,展示输入的商品信息
<body>
<h3>编号 : ${p.id}</h3>
<h3>品名 : ${p.name}</h3>
<h3>价格 : ${p.price}</h3>
<h3>图示 : ${p.img}</h3>
</body>
展示效果如下:
点击submit提交:
点击submit提交form表单,然后DispatcherServlet 获取、判断提交的/show,再将请求交给show的控制器ShowController.java,跳转到show.jsp。