Servlet Java y modelo de programación MVC

Servlet

Servlet es la base de JSP (Java Servlet Pages). Su esencia es una clase Java que se ejecuta en el lado del servidor, recibe solicitudes del cliente y responde.

El contenedor Tomcat se divide en cuatro niveles, de mayor a menor, contenedor, motor, host, servlet, la relación es la siguiente

A continuación se muestra el ciclo de vida del servlet . Cuando la solicitud llega al servlet por primera vez, el servidor carga la instancia del servlet y llama a init () para completar la inicialización, y luego la instancia del servlet reside en la memoria . Cuando la solicitud llega más tarde, la instancia del servlet puede llamar directamente al método de servicio Seleccione doPost / doGet para responder a la solicitud. Hasta que se apague el servidor, se llama a destroy () para destruir el servlet. Además de cargar el servlet en el servidor cuando se solicita la página, también puede configurar la etiqueta <loadon-startup> en el archivo web.xml para configurar el servlet para que se cargue cuando se inicie el servidor. Cuanto menor sea el número, mayor será la prioridad de carga. Cuando se modifica el servlet, se recargará automáticamente.

El uso de clases relacionadas con servlets en Java requiere la introducción del paquete javax.servlet.jar.

Para crear un Servlet, primero debe heredar la clase HttpServlet. Esta clase abstracta es un Servlet que implementa el protocolo Http. Su clase principal es la clase abstracta GenericServlet. Este es un Servlet independiente del protocolo, que también se implementa en la interfaz Servlet. La interfaz tiene Init () , Destroy (), service () tres métodos.

Los métodos doGet () y doPost () deben reescribirse en la clase de servlet, y las operaciones realizadas al solicitar este servlet para los métodos get y post se definen en estos dos métodos, respectivamente.

public class FirstServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("以Post方式请求Servlet");
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("以Get方式请求Servlet");      //控制台输出

        //通过response返回html页面内容
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out=response.getWriter();
        out.println("<h1>Servlet返回的页面</h1>");
    }
}

Finalmente, debe registrar el servlet en el archivo web.xml. Registre un nombre llamado FirstServlet de la siguiente manera, correspondiente a la clase Java en servlet.FirstServlet, y su url es: ruta raíz del sitio web / servlet / FirstServlet, cuando el navegador solicita http: // localhost: 8080 / FirstApp_war_exploded / servlet / FirstServlet , el resultado de la página: la página devuelta por el Servlet

    <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>servlet.FirstServlet</servlet-class>
        <load-on-startup>1</load-on-startup>    <!--服务器启动时自动装载的优先级-->
    </servlet>
    <servlet-mapping>
        <servlet-name>FirstServlet</servlet-name>
        <url-pattern>/servlet/FirstServlet</url-pattern>
    </servlet-mapping>

El uso de objetos de página en páginas de servlet es similar a JSP, y su correspondencia es la siguiente. Por ejemplo, en JSP, use reques.getParameter () para obtener los parámetros del cliente, luego en servlet, puede usar req.getParameter () para realizar la misma operación.

Los parámetros de inicialización también se pueden cargar en el servlet, configurados de la siguiente manera en el archivo web.xml, y luego llamar this.getInitParameter ("username") en el servlet para obtener los parámetros de inicialización.

    <servlet>
        <servlet-name>FirstServlet</servlet-name>
        <servlet-class>servlet.FirstServlet</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>小李</param-value>
        </init-param>
    </servlet>

Modelo de desarrollo MVC

Sobre la base del modelo de desarrollo Java 1, se produce el modelo 2, es decir, el modelo de desarrollo de MVC. El modelo de modelo se refiere a la estructura de la clase de objeto involucrada en el desarrollo, y el almacenamiento de datos del modelo de objeto correspondiente a la tabla de datos se lleva a cabo a través de JavaBean . La vista de vista se refiere a la interfaz que muestra datos al usuario y completa la interacción con el usuario a través de la página JSP . El controlador completa la función de control lógico de la web, y el Servlet implementa el procesamiento de las solicitudes de los usuarios y completa las operaciones requeridas. MVC ha completado la división adicional de las funciones de desarrollo del sitio web, haciendo que el desarrollo y el mantenimiento del código sean más eficientes.

Además, las operaciones básicas de API como la adición, eliminación, modificación e inspección de objetos JavaBean se pueden extraer para encapsular una interfaz DAO (Objeto de acceso a datos), y solo los datos y los métodos get / set se retienen en JavaBean. La lógica de negocios compleja en el servlet también se extrae como una capa de Servicio . En el servlet, solo es responsable de recibir datos, llamar al servicio para que funcione, pasar valores a la página y saltar.

Implemente una función de carrito de compras a través del patrón de diseño MVC, haga clic en el producto como se muestra a continuación para agregar al carrito de compras, y vea y elimine el carrito de compras

   

Primero diseñe la clase Módulo: Cart Cart, a través de Cart puede agregarse al objeto del carrito de compras, eliminar mercancías y otras operaciones

package modules;

import java.util.HashMap;
import java.util.Map;

public class Cart {
    private HashMap<Item,Integer> goods;
    private double totalPrice;

    public Cart(){
        goods=new HashMap<Item,Integer>();
        totalPrice=0.0;
    }

    public HashMap<Item, Integer> getGoods() {  return goods;   }

    public double getTotalPrice() {  return totalPrice;   }

    public void setTotalPrice(double totalPrice) { this.totalPrice = totalPrice;   }

    //计算购物车总金额
    public void calculateTotal(){
        double sum=0;
        for (Map.Entry<Item, Integer> entry : goods.entrySet()) {
            Item item=entry.getKey();
            int num= entry.getValue();
            sum+=item.getPrice()*num;
        }
        this.setTotalPrice(sum);
    }
    
    //向购物车中添加商品
    public boolean addGoods(Item item,int num){
        if (goods.containsKey(item))            //如果商品已经在购物车中,则数量增加
            goods.put(item,goods.get(item)+num);
        else
            goods.put(item,num);            //不在,则加到购物车
        this.calculateTotal();
        return true;
    }
    
    //从购物车删除商品
    public void removeGoods(Item item){
        goods.remove(item);
        calculateTotal();
    }
}

Luego implemente View, la vista cart.jsp del carrito de compras, saque el objeto del carrito de compras guardado en la sesión y muéstrelo en la página jsp

<%@ page language="java" import="java.util.*" contentType="text/html; charset=utf-8" %>
<%@ page import="modules.Cart" %>
<%@ page import="modules.Item" %>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>购物车页面</title>
    <link type="text/css" rel="stylesheet" href="css/style1.css"/>
    <script language="javascript">
        function delcfm() {
            if (!confirm("确认要删除?")) {
                window.event.returnValue = false;
            }
        }
    </script>
</head>

<body>
<h1>我的购物车</h1>
<a href="index.jsp">首页</a> >> <a href="index.jsp">商品列表</a>
<hr>
<div id="shopping">
    <form action="" method="">
        <table>
            <tr>
                <th>商品名称</th>
                <th>商品单价</th>
                <th>商品价格</th>
                <th>购买数量</th>
                <th>操作</th>
            </tr>
            <%
                //从session中取出cart对象进行遍历并显示购物车内容
                if (request.getSession().getAttribute("cart") != null) { //判断session中是否有购物车对象
                    Cart cart = (Cart) request.getSession().getAttribute("cart");
                    HashMap<Item, Integer> goods = cart.getGoods();
                    Set<Item> Item = goods.keySet();
                    Iterator<Item> it = Item.iterator();
                    while (it.hasNext()) {
                        Item i = it.next();
            %>
            <tr name="products" id="product_id_1">
                <td class="thumb"><img src="images/<%=i.getPicture()%>"/><a href=""><%=i.getName()%>
                </a></td>
                <td class="number"><%=i.getPrice() %>
                </td>
                <td class="price" id="price_id_1">
                    <span><%=i.getPrice() * goods.get(i) %></span>
                    <input type="hidden" value=""/>
                </td>
                <td class="number">
                    <%=goods.get(i)%>
                </td>
                <td class="delete">
                    <a href="servlet/CartServlet?action=delete&id=<%=i.getId()%>" οnclick="delcfm();">删除</a>
                </td>
            </tr>
            <%
                }
            %>
            <!--遍历购物车结束-->

        </table>
        <div class="total"><span id="total">总计:<%=cart.getTotalPrice() %>¥</span></div>
        <%
            }
        %>
        <div class="button"><input type="submit" value=""/></div>
    </form>
</div>
</body>
</html>

Finalmente, implemente el controlador, procese la solicitud del usuario desde la página a través de CartServlet y juzgue la acción en la solicitud Obtener en la función doGet (). Existen operaciones para agregar, mostrar y eliminar el carrito de compras. Se definen tres funciones para realizar tres operaciones.

package servlets;

import modules.Cart;
import modules.Item;
import modules.ItemList;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet(name = "CartServlet", value = {"/servlet/CartServlet"})
public class CartServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //获取请求中的动作种类并判断
        String action = request.getParameter("action");       

        if (action.equals("add")) {        //添加购物车
            if (addToCart(request, response)) {
                request.getRequestDispatcher("/success.jsp").forward(request, response);
            } else {
                request.getRequestDispatcher("/fail.jsp").forward(request, response);
            }
        }

        if (action.equals("show"))        //显示购物车
            request.getRequestDispatcher("/cart.jsp").forward(request, response);

        if (action.equals("delete")) {        //删除购物车物品
            deleteFromCart(request, response);
            request.getRequestDispatcher("/cart.jsp").forward(request, response);
        }
    }

    //添加购物车操作
    private boolean addToCart(HttpServletRequest request, HttpServletResponse response) {
        int itemId = Integer.parseInt(request.getParameter("id"));
        int num = Integer.parseInt(request.getParameter("num"));

        ItemList itemList = new ItemList();
        Item item = itemList.getItemById(itemId);
        Cart cart = (Cart) request.getSession().getAttribute("cart");      //从session中取出购物车对象
        if (cart == null) {
            cart = new Cart();
        }
        if (cart.addGoods(item, num)) {
            request.getSession().setAttribute("cart", cart);
            return true;
        } else
            return false;
    }

    //删除购物车操作
    private boolean deleteFromCart(HttpServletRequest request, HttpServletResponse response) {
        int itemId = Integer.parseInt(request.getParameter("id"));
        ItemList itemList = new ItemList();
        Item item = itemList.getItemById(itemId);
        Cart cart = (Cart) request.getSession().getAttribute("cart");
        cart.removeGoods(item);
        request.getSession().setAttribute("cart", cart);
        return true;
    }
}

 

124 artículos originales publicados · Me gusta 65 · Visita 130,000+

Supongo que te gusta

Origin blog.csdn.net/theVicTory/article/details/104362912
Recomendado
Clasificación