《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;}}
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); }}}
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>
<%@ 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
- 《SpringMVC 学习指南》随书代码实现(二)Eclipse+Servlet+jsp+Maven
- Servlet和JSP学习指南
- servlet&jsp学习指南
- servlet和jsp学习指南pdf
- Servlet与Jsp学习指南-1
- SpringMVC学习指南(一)
- Eclipse+maven配置+web项目实现(修改maven下jsp报错和其web项目默认的jdk和servlet版本)
- 第一个Servlet + Jsp(eclipse下实现)
- (jsp 和 servlet功能篇) jsp+servlet+javaBean 实现分页代码(mysql 数据库)
- jsp+servlet+jdbc增删改查功能实现(二)
- JSP/Servlet实现简单登录(含代码)
- Maven+SpringMVC+MyBatis实现系统(二)
- Servlet基础(二):Servlet与JSP
- 【jsp/servlet】jsp数据交互(二)
- Hive学习指南(二)
- 操作系统学习指南(二)
- Spring+SpringMVC+Mybatis整合系列(二)Eclipse新建Maven web项目
- Spring+SpringMVC+Mybatis整合系列(二)Eclipse新建Maven web项目
- robotframework学习资料链接
- Play slick 3.0 mysql 插入新增数据,并返回自增ID
- LeetCode--String to Integer (atoi)字符串转数字
- QT开发之最简客户端
- nginx代理WebSocket无法访问ws//WebSocket/xxxx
- 《SpringMVC 学习指南》随书代码实现(二)Eclipse+Servlet+jsp+Maven
- hadoop live node数量正确,点击进入里面不正确
- ThinkPad E431 Bluetooth驱动
- Oracle控制文件-移动
- 面试题41(2) 和为s的连续正数序列
- Kinect中多数据源获取和单数据源获取
- MYSQL 两个datetime类型相减
- linux下php7-memcached拓展
- c/c++:内存泄露和野指针的概念