MVC之Servlet控制器

学习目的是为了知道如何用Servlet实现 MVC,也是从原理上弄清楚SpringMVC。

一、工程目录

功能为用户输入 一个商品的信息,并提交,程序保存商品并展示已经保存的商品的信息。

所有的jsp文件都在WEB-INFO下,因此不能直接访问。

二、程序代码 

  • product

封闭了一个商品信息的javaBean .

package app02a.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 name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public float getPrice() {
		return price;
	}
	public void setPrice(float price) {
		this.price = price;
	}

}
  • ProducForm

注意,下面的price 为String 类型。

package app02a.from;

/**
 * ProductForm与html中的from相对应,是后者在服务端的代表。
 * @author lsj
 */
public class ProductForm {
	private String name ;
	private String description ;
	private String price ;
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getDescription() {
		return description;
	}
	public void setDescription(String description) {
		this.description = description;
	}
	public String getPrice() {
		return price;
	}
	public void setPrice(String price) {
		this.price = price;
	}

}
  • 控制部分
package app02a.servlet;

import java.io.IOException;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import app02a.domain.Product;
import app02a.from.ProductForm;

public class ControllerServlet extends HttpServlet{

	@Override
	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		process(req, resp);
	}

	@Override
	protected void doPut(HttpServletRequest req, HttpServletResponse resp)
			throws ServletException, IOException {
		process(req, resp);
	}
	private void process(HttpServletRequest request, HttpServletResponse response){
		String uri = request.getRequestURI() ;
		int lastIndex =uri.lastIndexOf("/");
		String action = uri.substring(lastIndex+1) ;
		//execute an action
		if (action.equals("produc_input")){
			//nothing to do
		}else if (action.equals("product_save")) {
			//create form
			ProductForm productForm = new ProductForm();
			productForm.setName(request.getParameter("name"));
			productForm.setDescription(request.getParameter("description"));
			productForm.setPrice(request.getParameter("price"));
			//create model
			Product product = new Product() ;
			product.setName(productForm.getName());
			product.setDescription(productForm.getDescription());
			try {
				product.setPrice(Float.parseFloat(productForm.getPrice()));
			} catch (NumberFormatException e) {
				e.printStackTrace();
			}

			//code to save product in DB 

			//store model in a scope variable for the view
			//放入到了HttpServletRequest中,以便 对应的视图可以访问到
			request.setAttribute("product", product);
		}

		//forward to a view
		String dispatchUrl = null;
		if (action.equals("product_input")){
			dispatchUrl= "/WEB-INFO/jsp/ProductForm.jsp" ;
		}else if (action.equals("product_save")){
			dispatchUrl= "/WEB-INFO/jsp/ProductDetails.jsp" ;
		}
		//RequestDispatcher: Defines an object that receives requests from the client and
		//sends them to any resource (such as a servlet, HTML file, or JSP file) on the server
		if (dispatchUrl!= null){
			RequestDispatcher rd = request.getRequestDispatcher(dispatchUrl) ;
			try {
				rd.forward(request, response);
			} catch (ServletException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}

		}
	}

}

  

 

  

时间: 2024-10-17 06:01:07

MVC之Servlet控制器的相关文章

MVC之Servlet控制器(二)

在MVC之Servlet控制器(一)中,我们将业务逻辑的代码都写在了Servlet中,让Servlet显得非常的复杂,为了避免这个问题,我们将业务逻辑代码提取到 独立的controller类中.两个controller类都实现了Controller接口,Controller接口只有handleRequest一个方法,接口实现类通过这个方法访问当前请求的 HttpServletRequest/HttpServletResponse对象 .

java-web——第六课 Servlet 控制器的引入

前言: 之前我们写的代码,可以以这样的流程图来解释 今天我们需要讲的就是不让 jsp 直接访问 javabean 而是加入一个新概念, setvlet 控制器, 也是对应了我们软件工程的 MVC 思想 如下图: 废话不多说,直接进入我们的正文: 正文: 首先我们先考虑我们的需求 需求很简单,就是显示一个表格以及其中的内容 接下来我会一步一步写出步骤来实现这次的需求 步骤一:建立一个 java web 项目 并且分好包,为待会写代码提供规范 步骤二:建立一个 实体类 实体类内容如下图: 步骤三:建

ASP.NET MVC 4 (四) 控制器扩展

MVC的标准流程是请求传递给控制器,由控制器action方法操作数据模型,最后交由视图渲染输出,这里忽略了两个细节,就是MVC是如何创建相应控制器实例,又是如何调用控制器action方法的,这就必须讲到控制器工厂和action调用器. 控制器工厂 Controller factory负责创建并初始化控制器,控制器工厂实现IControllerFactory接口: namespace System.Web.Mvc { public interface IControllerFactory { IC

ASP.NET MVC 5 -从控制器访问数据模型

原文:ASP.NET MVC 5 -从控制器访问数据模型 在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 在解决方案上,用鼠标右键单击Controller文件夹,点击新增,再选择Controller. 在Scaffold新增对话框,选择MVC 5  Controller with views, using

Spring MVC的核心控制器DispatcherServlet的作用

关于Spring MVC的核心控制器DispatcherServlet的作用,以下说法错误的是(  )? 它负责接收HTTP请求 加载配置文件 实现业务操作 初始化上下应用对象ApplicationContext SpringMVC是Spring中的模块,它实现了mvc设计模式,首先用户发起请求,请求到达SpringMVC的前端控制器(DispatcherServlet),前端控制器根据用户的url请求处理器映射器查找匹配该url的handle,并返回一个执行链,前端控制器再请求处理器适配器调用

[转]ASP.NET MVC 5 -从控制器访问数据模型

在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里. 在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题) 在解决方案上,用鼠标右键单击Controller文件夹,点击新增,再选择Controller. 在Scaffold新增对话框,选择MVC 5  Controller with views, using Entity Framework, 点击新增. · 控制

ASP.NET MVC学习之控制器篇扩展性

原文:ASP.NET MVC学习之控制器篇扩展性 一.前言 在之前的一篇随笔中已经讲述过控制器,而今天的随笔是作为之前的扩展. 二.正文 1.自定义动作方法 相信大家在开发过程一定会遇到动作方法的重名问题,虽然方法的名称和参数一样,但是里面的逻辑是不一样的,因为你设置了对应的注解属性可以确定调用哪个动作方法.这个时候你就需要将动作的名称与方法的名称区别开来,那么你就可以使用ActionName注解属性.比如我们要求一个页面在本地访问与非本地访问时呈现不同的页面,但是你又想用不同的方法区分开来写,

MVC在基控制器中实现处理Session的逻辑

当需要跨页面共享信息的时候,Session是首当其冲的选择,最典型的例子就是:在处理登录和购物车逻辑的时候需要用到Session.在MVC中,可以把处理Session的逻辑放在一个泛型基控制器中,但需要注意的是:在判断没有登录就跳转到登录页的时候,需要把出错控制器和登录控制器排除在外. using System.Collections.Generic; using System.Web.Mvc; using System.Web.Routing; namespace MvcApplication

MVC如何避免控制器方法接收到的值不能被转换为参数类型

假设控制器方法参数类型是int: public ActionResult GetSth(int id) { return Content(id.ToString()); } 而视图传递过来的是字符串: @Html.ActionLink("获取","GetSth",new {id="hello"}) 于是就会报类似如下的错: 对于"MvcApplication3.Controllers.HomeController"中方法&qu