MVC + Servlet

MVC

MVC是Model-View-Controller的缩写,是一种软件设计典范。在MVC中,M代表模型(Model),负责数据的处理与业务逻辑的实现;V代表视图(View),负责数据的展示,即用户界面;C代表控制器(Controller),负责接收用户的输入并调用模型和视图完成用户的请求。MVC模式通过将业务逻辑、数据与界面显示进行分离,使得应用程序的各部分可以独立进行开发、测试和维护,提高了代码的可重用性和可维护性。

Servlet

Servlet是使用Java语言编写的服务器端程序,主要用于处理来自客户端的请求并生成动态Web内容。Servlet运行在Web服务器或应用服务器上,通过接收和响应HTTP请求来与客户端进行交互。Servlet可以访问各种资源(如数据库、文件等),并根据这些资源生成相应的HTML、XML或其他格式的响应。

Servlet在MVC模式中通常充当控制器(Controller)的角色,负责接收用户的请求,调用相应的业务逻辑(Model),并将结果传递给视图(View)进行展示。通过使用Servlet,开发者可以实现复杂的Web应用程序,并充分利用Java的强大功能和跨平台性。

假设我们要创建一个简单的Servlet来处理用户的登录请求。首先,我们需要创建一个继承自HttpServlet的Java类,并重写其doPost方法。当用户通过表单提交登录信息时,这个Servlet会接收并处理这些信息。

import javax.servlet.*;  
import javax.servlet.http.*;  
import java.io.IOException;  
  
public class LoginServlet extends HttpServlet {  
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        String username = request.getParameter("username");  
        String password = request.getParameter("password");  
          
        // 假设这里有一个验证用户信息的服务  
        boolean isValid = authenticateUser(username, password);  
          
        if (isValid) {  
            // 登录成功,将用户重定向到主页  
            response.sendRedirect("home.jsp");  
        } else {  
            // 登录失败,将错误信息保存到request属性中  
            request.setAttribute("error", "Invalid username or password");  
            // 转发到登录页面,并显示错误信息  
            RequestDispatcher dispatcher = request.getRequestDispatcher("login.jsp");  
            dispatcher.forward(request, response);  
        }  
    }  
      
    private boolean authenticateUser(String username, String password) {  
        // 这里应该是实际的用户验证逻辑,这里简化处理  
        return "admin".equals(username) && "password".equals(password);  
    }  
}

Cookie

“Cookie”在计算机领域中,特指一种由服务器发送到用户浏览器并保存在用户计算机上的小型文本文件。这个文件可以被服务器用来识别用户身份、跟踪用户活动、保存用户设置等。Cookie由名称、值、域名、路径、过期时间等字段组成。当用户访问网站时,服务器会生成一个包含会话ID的Cookie并发送给浏览器,浏览器将这个Cookie保存在本地。此后,每次用户发送请求时,浏览器都会自动将这个Cookie发送给服务器,服务器通过会话ID识别用户身份,从而保持用户的登录状态或提供个性化服务。

当用户成功登录后,我们想要使用Cookie来实现“记住我”的功能。

// 在用户登录成功后设置Cookie  
Cookie rememberMe = new Cookie("rememberMe", "true");  
rememberMe.setMaxAge(60 * 60 * 24 * 7); // 设置一周的有效期  
response.addCookie(rememberMe);

然后,在每次用户访问时检查这个Cookie是否存在。

// 在用户每次访问时检查Cookie  
Cookie[] cookies = request.getCookies();  
if (cookies != null) {  
    for (Cookie cookie : cookies) {  
        if ("rememberMe".equals(cookie.getName())) {  
            // 如果Cookie存在,自动登录用户或提供其他便利功能  
            // 这里应该是实际的自动登录逻辑  
            break;  
        }  
    }  
}

Session

“Session”是指在客户端与服务器之间建立的一种持久的连接,用于跟踪用户在多个请求之间的状态。Session是一种记录客户端和服务器之间交互状态的机制。通过Session,服务器可以跟踪用户的登录状态、购物车内容、浏览历史等信息,从而提供个性化的服务。同时,Session也可以用来保存用户提交的数据,确保用户在多个页面间的数据一致性。此外,Session还可以用于对用户进行身份认证和权限控制,保护系统的安全性。

假设我们想要实现一个购物车功能,使用Session来存储用户的购物车内容。

// 当用户添加商品到购物车时  
HttpSession session = request.getSession();  
Map<String, Integer> cart = (Map<String, Integer>) session.getAttribute("cart");  
if (cart == null) {  
    cart = new HashMap<>();  
    session.setAttribute("cart", cart);  
}  
String productId = request.getParameter("productId");  
int quantity = Integer.parseInt(request.getParameter("quantity"));  
cart.put(productId, quantity);

在用户查看或结算购物车时,从Session中获取购物车内容。

// 当用户查看或结算购物车时  
HttpSession session = request.getSession();  
Map<String, Integer> cart = (Map<String, Integer>) session.getAttribute("cart");  
if (cart != null) {  
    // 处理购物车内容,例如显示商品列表或计算总价  
}

HTTP报文

“HTTP报文”是HTTP协议中用于传输数据的格式化消息。HTTP(Hypertext Transfer Protocol,超文本传输协议)是一种应用层协议,它规定了浏览器和服务器之间如何进行数据交互和传输超文本(包括文本、图片、视频等)。HTTP报文分为请求报文和响应报文两种类型。请求报文由客户端发送给服务器,包含请求行、请求头部和请求体(可选)三个部分;响应报文由服务器发送给客户端,包含状态行、响应头部和响应体三个部分。通过HTTP报文,客户端和服务器之间可以进行高效的数据传输和通信。

当用户通过浏览器访问我们的网站时,浏览器会发送一个HTTP请求报文给服务器。这个报文可能包含请求行(如GET /login HTTP/1.1),请求头(如User-Agent: Mozilla/5.0),以及请求体(如登录表单的数据)。服务器接收到请求后,会处理请求并生成一个HTTP响应报文返回给浏览器。响应报文包含状态行(如HTTP/1.1 200 OK),响应头(如Content-Type: text/html),以及响应体(如HTML页面的内容)。

GET /products?category=electronics HTTP/1.1  
Host: www.example.com  
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/91.0.4472.124 Safari/537.36  
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8  
Accept-Language: en-US,en;q=0.5  
Connection: keep-alive

Tomcat

Tomcat是一个常用的Servlet容器,它负责解析HTTP请求,找到对应的Servlet进行处理,并返回响应。假设我们已经将上述的登录Servlet打包成一个WAR文件,并部署到Tomcat中。当用户通过浏览器访问登录页面并提交登录信息时,Tomcat会接收到这个HTTP请求,找到对应的登录Servlet进行处理。Servlet验证用户的登录信息后,Tomcat再将生成的响应返回给浏览器。

  • 15
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值