𝓝𝓮𝓶𝓸&博客

【Web】Servlet基本概念

Servlet(Server Applet)是Java Servlet的简称,称为小服务程序或服务连接器,用Java编写的服务器端程序,具有独立于平台和协议的特性,主要功能在于交互式地浏览和生成数据,生成动态Web内容。

Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。

Servlet 三大域对象

对象类型 对象名称 范围 备注
HttpServletRequest request 一次请求内有效 servlet的域对象
HttpSession session 一次会话范围内有效 servlet的域对象
会话(打开浏览器访问服务器,直到关闭浏览器)
ServletContext application 整个web工程范围内都有效 servlet的域对象
工程(只要web工程不停止,数据都在)

注意:只关闭标签页的话,session状态是还在的。要完全关闭浏览器后,重新打开才会启用新的session。
session有自身的生命周期,如一定的时间内不再激活的话就会过期,被服务器注销。

Servlet 容器

servlet 容器(tomcat)中有很多 servlet 程序
Java Servlet(Java服务器小程序)是一个基于 Java 技术的 Web 组件,运行在服务器端,它由 Servlet 容器所管理,用于生成动态的内容,Servlet 是平台独立的 Java 类,编写一个 Servlet,实际上就是按照 Servlet 规范编写一个 Java 类。Servlet 被编译为平台独立的字节码,可以被动态地加载到支持 Java 技术的 Web 服务器中运行。 Servlet没有 main() 方法,不能独立运行,它必须被部署到 Servlet 容器中,由容器来实例化和调用 Servlet 的方法(如 doGet() 和 doPost()),Servlet 容器在 Servlet 的生命周期内包容和管理 Servlet。
Servlet 容器也叫做 Servlet 引擎,是 Web 服务器或应用程序服务器的一部分,用于在发送的请求和响应之上提供网络服务,解码基于 MIME 的请求,格式化基于 MIME 的响应。
Tomcat 是一个免费的开放源代码的 Servlet 容器,目前比较流行的 Web 服务器。


servlet 是小服务器程序,写后端服务器端用的;而 JSP 是模板引擎,显示前端用的。

其实,Tomcat 访问任何的资源都是在访问 Servlet!当然了,JSP 也不例外!JSP 本身就是一种 Servlet。为什么我说 JSP 本身就是一种 Servlet 呢?其实 JSP 在第一次被访问的时候会被编译为 HttpJspPage 类(该类是 HttpServlet 的一个子类)

JSP 是为了简化 Servlet 的工作出现的替代品,Servlet 输出 HTML 非常困难,JSP 就是替代 Servlet 输出 HTML 的。

jsp 就是在 html 里面写 java 代码,servlet 就是在 java 里面写 html 代码…其实 jsp 经过容器解释之后就是 servlet。只是我们自己写代码的时候尽量能让它们各司其职,jsp 更注重前端显示,servlet 更注重模型和业务逻辑。不要写出万能的 jsp 或 servlet 来即可。

Servlet 应用

servlet 主要就是处理页面传过来的表单数据,页面上的 form 的 action 指向到 web.xml 中,然后在 XML 中对称节点中找到对应的 servlet 类去执行你的处理方法.
servlet 中使用 HttpServletRequest 和 HttpServletResponse 来接受和返回数据
这个类要继承一个 HttpServlet 类然后重写他的 doGet 和 doPost 方法,一般在 doGet 里 this.doPost(req,resp); 然后具体的代码在 doPost() 方法中执行。

Servlet

一个登陆的小例子,这个是 Servlet.

package com.wangchao.action;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.wangchao.bo.AdminBO;
import com.wangchao.service.SfInfoService;
import com.wangchao.service.SfInfoServiceImpl;
public class LoginAction extends HttpServlet{
    /**
    *
    */
    private static final long serialVersionUID = 1L;
    String name = "";
    String pass = "";
    SfInfoService loginser;
    AdminBO bo;
    boolean istrun;
    PrintWriter pw;
    public LoginAction(){
        loginser = new SfInfoServiceImpl();
        bo = new AdminBO();
    }
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        this.doPost(req, resp);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=utf-8");
        name = req.getParameter("username");
        pass = req.getParameter("password");
        bo.setName(name);
        bo.setPassword(pass);
        istrun = loginser.userLogin(bo);
        pw = resp.getWriter();
        if(istrun){
            req.setAttribute("name", name);
            req.setAttribute("pass", pass);
            req.getRequestDispatcher("admin/user_info.jsp").forward(req, resp);
    // resp.sendRedirect("admin/MyJsp.jsp");
        }else{
            pw.print("<h3>用户名或密码错误,点击<a href='admin/index.jsp'>返回</a></h3>");
            pw.flush();
        }
    }
}

web.xml

下面是 web.xml
在 web.xml 中配置 servlet 的映射。
要配置 servlet 的名称以及对应的类,还有名称以及对应的url样式映射。

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
    <servlet>
        <servlet-name>login</servlet-name>
        <servlet-class>com.wangchao.action.LoginAction</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>login</servlet-name>
        <url-pattern>/login.do</url-pattern>
    </servlet-mapping>
</web-app>

JSP

以下为 JSP 页面:

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <base href="<%=basePath%>">
    <title>My JSP 'index.jsp' starting page</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
<!--
<link rel="stylesheet" type="text/css" href="styles.css">
-->
</head>
<body>
    <div align="center">
        <form action="login.do" method="post">
            用户名:<input type="text" name="username" style="color: red"><br><br>
            密  码:<input type="password" name="password" style="color: green"><br><br>
            <div align="center">
                <input type="submit" value="登陆"> <input type="reset" value="重填">
            </div>
        </form>
    </div>
</body>
</html>
posted @ 2020-10-27 17:49  Nemo&  阅读(522)  评论(0编辑  收藏  举报