《SpringMVC 学习指南》随书代码实现(二)Eclipse+Servlet+jsp+Maven

来源:互联网 发布:淘宝网店实践总结报告 编辑:程序博客网 时间:2024/06/05 01:59

声明:本博客适用于《SpringMVC 学习指南》的书本示例代码的Eclipse 4.7 + Mavne +Tomcat 8.5实现,是我自己实现了,写点笔记整理一下思路所用,供大家参考,仅适用于初学者。与书本代码有些出入,请大家加以甄别。


1.创建Maven工程

File-new-project-maven project。不懂怎么建的可以在网上搜一下,大把大把的~

2.首先上网站架构

笔记本屏幕小,只能截两次图了。大家凑合着看吧。

(Continue)

(END)

架构跟书本有些出入,我把原来放在/WEB-INF/class中的java源码放到了src/main/java。这是Maven项目标配。

3.pom.xml

注意:jstl一定要用1.2版本的,不然跟Tomcat8.5(web容器)不兼容。当然,自己手动配置jstl也可以,我下了个1.1的没配成功,后来查博客,发现是版本太低了。后来改用maven,做个配置妥妥的。配置jstl主要是针对ProductForm.jsp的<c:if /*content*/>(c标签)无法正常使用问题。
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">  <modelVersion>4.0.0</modelVersion>  <groupId>com.test</groupId>  <artifactId>mvc6</artifactId>  <packaging>war</packaging>  <version>0.0.1-SNAPSHOT</version>  <name>mvc6 Maven Webapp</name>  <url>http://maven.apache.org</url>  <dependencies>    <dependency>      <groupId>junit</groupId>      <artifactId>junit</artifactId>      <version>3.8.1</version>      <scope>test</scope>    </dependency>    <dependency>    <groupId>javax.servlet</groupId>    <artifactId>javax.servlet-api</artifactId>    <version>3.1.0</version>    </dependency>    <!-- https://mvnrepository.com/artifact/jstl/jstl --><dependency>    <groupId>jstl</groupId>    <artifactId>jstl</artifactId>    <version>1.2</version></dependency>      </dependencies>  <build>    <finalName>mvc6</finalName>  </build></project>

4. web.xml

web.xml配置也是个坑,原文一点都不提,我也是无语了。这里关键的一步是配置servlet的映射(Mapping),不然你没办法通过localhost:8080/mvc6/product_input.action访问到servlet控制器。
<web-app version="3.0" 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/javaeehttp://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">  <display-name>Archetype Created Web Application</display-name>  <welcome-file-list>          <welcome-file>ProductForm.jsp</welcome-file>     </welcome-file-list>    <servlet>    <servlet-name>DispatcherSevlet</servlet-name>     <servlet-class>servlet.DispatcherSevlet</servlet-class>  </servlet>  <servlet-mapping>     <servlet-name>DispatcherSevlet</servlet-name>     <url-pattern>*.action</url-pattern>  </servlet-mapping> <!-- <jsp-config><taglib><taglib-uri>http://java.sun.com/jsp/jstl/core</taglib-uri><taglib-location>/WEB-INF/c.tld</taglib-location></taglib></jsp-config>--></web-app>

5.Java类

接下来就是各个java类,跟书本上的是一样的,我建议自己敲一遍。我按照网站的架构,由上至下分别是src/main/java、WEB-INF/views

5.1 controller

package controller;/**controller.java 接口*/import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public interface Controller {String handleRequest(HttpServletRequest request,HttpServletResponse response);}


package controller;
//InputProductController.java
import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;public class InputProductController implements controller.Controller{  public String handleRequest(HttpServletRequest request,HttpServletResponse response) {return "/WEB-INF/views/ProductForm.jsp";}}

package controller;import java.util.List;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import domain.Product;import form.ProductForm;import validator.ProductValidator; public class SaveProductController implements Controller {public String handleRequest(HttpServletRequest request, HttpServletResponse response) {ProductForm productForm = new ProductForm();productForm.setName(request.getParameter("name"));productForm.setDescription(request.getParameter("description"));productForm.setPrice(request.getParameter("price")); ProductValidator pValidator = new ProductValidator();List<String> errs = pValidator.validate(productForm);if (errs.isEmpty()) {Product product = new Product();product.setName(productForm.getName());product.setDescription(productForm.getDescription());product.setPrice(Float.parseFloat(productForm.getPrice()));request.setAttribute("product", product); return "/WEB-INF/views/ProductDetails.jsp"; }else {request.setAttribute("errors", errs);request.setAttribute("form",productForm);return "/WEB-INF/views/ProductForm.jsp";}}}


 5.2 domain

package domain;import java.io.Serializable;public class Product implements Serializable{private static final long serialVersionUID=1L;private String name;private String description;private Float price;public String getName() {return this.name;}public void setName(String name) {this.name=name;}public String getDescription() {return this.description;}public void setDescription(String description) {this.description=description;}public Float getPrice() {return this.price;}public void setPrice(Float price) {this.price=price;}}

 5.3 form
package form; public class ProductForm {private String name;private String description;private String price;public String getName() {return this.name;}public void setName(String name) {this.name=name;}public String getDescription() {return this.description;}public void setDescription(String description) {this.description=description;}public String getPrice() {return this.price;}public void setPrice(String price) {this.price=price;}}

 5.4 servlet
package servlet;import java.io.IOException;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import controller.InputProductController;import controller.SaveProductController;import javax.servlet.RequestDispatcher;/** * Servlet implementation class DispatcherSevlet */public class DispatcherSevlet extends HttpServlet {private static final long serialVersionUID = 1L;/** * @see HttpServlet#HttpServlet() */public DispatcherSevlet() {super(); }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse *      response) */@Overrideprotected void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { process(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse *      response) */@Overrideprotected void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException { process(request, response);}private void process(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException {String uri=request.getRequestURI(); int lastIndex=uri.lastIndexOf('/');String action=uri.substring(lastIndex+1);String dispatchUrl=null;if (action.equals("product_input.action")){InputProductController controller=new InputProductController();dispatchUrl=controller.handleRequest(request, response);  }else if (action.equals("product_save.action")) {SaveProductController controller=new SaveProductController();dispatchUrl=controller.handleRequest(request, response);}if (dispatchUrl!=null) {RequestDispatcher rd=request.getRequestDispatcher(dispatchUrl); rd.forward(request, response); }}}

 5.5 validator
package validator;import java.util.ArrayList;import java.util.List;import form.ProductForm;public class ProductValidator {public List<String> validate(ProductForm productForm){List<String> errors=new ArrayList<String>();String name=productForm.getName();if(name==null||name.trim().isEmpty()) {errors.add("prodcuct must hava a name");}String price=productForm.getPrice();if(price==null||price.trim().isEmpty()) {errors.add("product must have a price");}else {try {Float.parseFloat(price);}catch (NumberFormatException e) {// TODO: handle exceptionerrors.add("invalid price value");}}return errors;}}

5.6 ProductDetials.jsp
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"    pageEncoding="ISO-8859-1"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><title>save details</title><style type="text/css"></style></head><body><center><div id ="global" style="border: 1px solid black;width:300px"><h4>The product has been save</h4><p><h5>Detils:</h5>Product Name:${product.name }<br/>Description:${product.description }<br/>Price:$${product.price}</div><a href="product_input.action">return</a></center></body></html>

5.7 ProductForm.jsp
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>  <%/*@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" */%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>Add product Form</title></head><body><center><div id="global"><c:if test="${requestScope.errors!=null }"><p id="errors">Errors(s)!<ul><c:forEach var="error" items="${requestScope.errors}"><li>${error}</li></c:forEach></ul></p></c:if><form action="product_save.action" method="post" ><fieldset style="width:300px"><legend>Add a product</legend><p><label for="name">Product Name:</label> <input type="text"id="name" name="name" tabindex="1"></p><p><label for="description">Description:</label> <input type="text"id="description" name="description" tabindex="2"></p><p><label for="price">Price:</label> <input type="text"id="price" name="price" tabindex="2"></p><p><input type="reset" id="reset" tabindex="4" value="Reset"> <inputtype="submit" id="submit" tabindex="5" value="Add product"></p></fieldset></form></div></center></body></html>


6 运行结果

要先访问product_input.action。图片上的url是为了演示验证功能。






7 项目文件

我上传到我的CSDN download了,还没有通过审核,请同志们按需取取食~后面有空再粘源码~




【参考】
1 http://blog.csdn.net/WSKinght/article/details/48638299
2 http://mvnrepository.com/artifact/jstl/jstl/1.2


阅读全文
0 0
原创粉丝点击