蓝旭春季培训第四周预习博客

Servlet

Servlet 是 Java Web 应用中的一个重要组件,用于处理客户端的请求并生成响应。Servlet 是基于 Java 的服务器端编程技术,它运行在支持 Java Servlet API 的 Web 服务器上或应用服务器上。当用户请求一个 Web 页面时,Servlet 容器(如 Tomcat)会调用相应的 Servlet 来处理请求,并返回结果给客户端。

使用方法

  1. 编写Servlet类:
    首先,你需要创建一个Java类,并使其继承自HttpServlet或其父类GenericServlet。然后,你需要重写doGet()或doPost()方法(或两者都重写),以处理GET或POST请求。这些方法会接收HttpServletRequest和HttpServletResponse对象作为参数,分别用于获取请求信息和发送响应。

  2. 配置web.xml:
    在你的Web应用的WEB-INF目录下,找到或创建web.xml文件。在这个文件中,你需要配置Servlet的映射。这告诉服务器哪个URL路径应该调用哪个Servlet。
    部署Servlet:
    将你的Web应用(包括Servlet类和web.xml文件)打包成WAR文件,并部署到支持Servlet的Web服务器上,如Tomcat。

  3. 启动Web服务器:
    启动你的Web服务器。当服务器启动时,它会加载你的Web应用,并准备处理请求。

  4. 发送请求并接收响应:
    现在,你可以通过浏览器或其他HTTP客户端向你的Servlet发送请求,并查看其响应。例如,你可以在浏览器中输入http://localhost:8080/myApp/myPath(假设你的应用名为myApp,并chu且你正在本地运行Tomcat服务器)。

  5. 处理异常和日志:
    在编写Servlet时,你可能还需要处理可能出现的异常,并记录相关日志以便调试和监控。

常用方法

  1. 初始化方法:
    public void init(ServletConfig config) throws ServletException
  2. 处理请求的方法
  • protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException:处理HTTP GET请求的方法。客户端通过GET方式发送请求时,此方法会被调用。
  • protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException:
    处理HTTP POST请求的方法。客户端通过POST方式发送请求时,此方法会被调用。
  • protected void service(ServletRequest request, ServletResponse response) throws ServletException, IOException:
    服务方法,是Servlet的入口点。service方法会根据请求的类型(GET、POST等)调用相应的doXXX方法。
  • protected void doPut(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException:
    处理HTTP PUT请求。
  • protected void doDelete(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException:
    处理HTTP DELETE请求。
  • protected void doHead(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException:
    处理HTTP HEAD请求。
  • protected void doOptions(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException:
    处理HTTP OPTIONS请求。
  • protected void doTrace(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException:
    处理HTTP TRACE请求。
  1. 销毁方法
    public void destroy()
package com.example.servletdemo;

import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

public class NameProcessorServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        try (PrintWriter out = resp.getWriter()) {
            String name = req.getParameter("name");
            out.println("<html><body>");
            out.println("<h2>Hello, " + name + "</h2>");
            out.println("</body></html>");
        }
    }
}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>名单</title>
</head>
<body>
<form action="/demo" method="get">
    Name: <input type="text" name="name"/>
    <input type="submit" value="Submit"/>
</form>
</body>
</html>
<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>N1</servlet-name>
        <servlet-class>com.example.servletdemo.NameProcessorServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>N1</servlet-name>
        <url-pattern>/demo</url-pattern>
    </servlet-mapping>
</web-app>

cookie

在Java的Web开发中,cookie通常指的是HTTP cookie,这是一种服务器发送到用户浏览器并保存在本地,以便之后浏览器和服务器之间通信时可以使用的机制。通过cookie,服务器可以跟踪和识别用户,存储会话信息,以及其他与用户相关的数据。

使用方法

  1. 创建Cookie
Cookie cookie = new Cookie("名称","值");
cookie.setMaxAge(60);//设置cookie的有效期为60s

设置cookie的属性
setMaxAge(int expiry):设置Cookie的有效期,以秒为单位。如果设为正数,则Cookie将在指定的秒数后失效;如果设为负数,则Cookie只在浏览器会话期间有效,关闭浏览器即失效;如果设为0,则立即删除该Cookie。
setPath(String uri):设置Cookie适用的路径。例如,如果设置为/sessionWeb/,则只有访问该路径下的资源时,Cookie才会被发送。
setDomain(String pattern):设置Cookie适用的域名。这通常用于跨域Cookie的设置,但需要谨慎使用,以避免安全问题。
setSecure(boolean flag):设置Cookie是否仅通过HTTPS协议传输。如果设为true,则Cookie只在HTTPS连接中传输,提高安全性。
setHttpOnly(boolean flag):设置Cookie是否仅能通过HTTP(S)协议访问,而不能通过客户端脚本(如JavaScript)访问。这有助于防止跨站脚本攻击(XSS)。
2. 发送Cookie到客户端

response.addCookie(cookie);
  1. 从客户端接受Cookie
Cookie[] cookies=request.getCookies();//获取所有Cookie
  1. 修改和删除Cookie
    修改Cookie,创建一个新的Cookie对象使用相同名称,需设置不同的有效期或属性;
    删除Cookie,创建一个新的Cookie对象使用相同名称,设置其有效期为零。
@WebServlet("/login")  
public class LoginServlet extends HttpServlet {  
    @Override  
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {  
        String username = req.getParameter("username");  
        String password = req.getParameter("password");  
        //与数据库交互,验证cookie
        boolean isValidUser = libraryUser(username, password); 
        if (isValidUser) {  
            Cookie userCookie = new Cookie("username", username);  
            userCookie.setMaxAge(60 * 60 * 24);
            userCookie.setPath("/");
            resp.addCookie(userCookie);  
            resp.sendRedirect("home.jsp");  
        } else {  
            req.setAttribute("errorMessage", "Invalid username or password.");  
            req.getRequestDispatcher("login.jsp").forward(req, resp);  
        }  
    }  
}

session

在Java Web开发中,特别是在使用Servlet和JSP技术的环境中,session是一个重要的概念,用于在用户与Web应用程序交互期间跟踪用户的状态。session对象通常用于存储与特定用户会话相关的信息,这些信息在多个页面请求之间保持一致。

使用方法

//获取session对象
HttpSession session = response.getSession();

// 将会话属性存储到session中  
String username = "JohnDoe";  
session.setAttribute("username", username);

// 从session中获取名为"username"的属性  
String storedUsername = (String) session.getAttribute("username");

// 设置会话超时时间为30分钟  
session.setMaxInactiveInterval(1800);

// 使当前会话无效  
session.invalidate();
package com.example.servletdemo;

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 javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/loginServlet")
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");
//与数据库交互,验证用户身份
        if ("admin".equals(username) && "password".equals(password)) {
            HttpSession session = request.getSession();
            session.setAttribute("username", username);
            response.sendRedirect("success.jsp");
        } else {
            request.setAttribute("error", "Invalid username or password");
            request.getRequestDispatcher("login.jsp").forward(request, response);
        }
    
}
//login.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Login</title>
</head>
<body>
<form action="loginServlet" method="post">
    Username: <input type="text" name="username" required><br>
    Password: <input type="password" name="password" required><br>
    <input type="submit" value="Login">
</form>
</body>
</html>
//success.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Success</title>
</head>
<body>
<%
    String username = (String) session.getAttribute("username");
    System.out.println(("Welcome, " + username + "!"));
%>
</body>
</html>

MVC

MVC(Model-View-Controller)是一种软件设计模式,通常用于构建用户界面。它通过将应用程序的逻辑、数据和界面显示分离成三个核心组件,使得应用程序的结构更加清晰、可维护,并有助于团队协作。

以下是MVC模式中的三个核心组件及其职责:

  1. Model(模型):
  • 负责数据的存储、检索以及业务逻辑的处理。
  • 它是应用程序的核心部分,包含了应用程序的数据和业务规则。
    模型不关心数据的显示或用户输入,它只关注数据的处理。
  1. View(视图):
  • 它从模型中获取数据,并将其以用户可以理解的方式呈现出来。
  • 视图不关心数据的来源或处理逻辑,它只关注数据的展示。
  1. Controller(控制器):
  • 负责接收用户的输入(如点击按钮、提交表单等),并根据这些输入来更新模型和视图。
  • 控制器是模型和视图之间的协调者,它确保模型和视图之间的数据流动是同步的。
  • 控制器不处理数据或渲染界面,它只处理用户的输入和请求。

MVC模式通过将这三个组件分离,使得应用程序的开发更加模块化,提高了代码的可重用性和可维护性。同时,它也使得团队协作更加高效,因为不同的团队成员可以专注于各自的部分(模型、视图或控制器),而不需要了解整个应用程序的细节。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值