jsp + servlet 复习(C01)

4 篇文章 0 订阅
4 篇文章 0 订阅

week2

<!DOCTYPE html>
<html>
    <head>
        <title>四级查询</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <!--link用于引用外部样式表,href指定引用的文件的路径 Ctrl+\-->
        <link rel="stylesheet" href="css/style.css">
    </head>
    <body>
        
        <!--div是用于布局的一个元素,建议页面的最外面添加一个div用于布局-->
        <div>
            
            <!--Emmet插件->用一些缩写快速完成全写-->
            <h1>四级查询程序</h1>
            <hr>
            <br>
            
            <!--h1+hr+br->tab-->
            <!--如果需要提交数据到服务器,则文本框等元素的外面必须加-->
            <form>
                <!--input->tab-->
                考号:<input type="text">
                <br><br>
                姓名:<input type="text">
                <br><br>
                <!--提交按钮才能将表单的数据提交给服务器,除非你使用ajax发送请求-->
                <input type="submit" value="查询">
            </form>
            
        </div>
    </body>
</html>

div{
    width: 300px;
    margin: 50px auto;
    text-align: center;
    background-color: darkcyan;
    padding: 20px 20px 30px 20px;
    color: white;
}

div h1{
    color: lightgoldenrodyellow;                
}

input[type="text"]{
    padding: 8px 10px;
    border: solid 1px lightblue;
    outline: none;
    border-radius: 5px;
}

input[type="text"]:hover{
    box-shadow: 0px 0px 5px yellow;    
}

div input[type="submit"]{
    background-color: darkgreen;
    width: 100px;
    height: 30px;
    border: none;
    outline: none;
    color: white;
    font-size: 16px;
    border-radius: 5px;
}

div input[type="submit"]:hover{
    cursor: pointer;
    background-color: brown;
    font-size: 102%;
}

margin

例子 1
margin:10px 5px 15px 20px;
上外边距是 10px
右外边距是 5px
下外边距是 15px
左外边距是 20px
例子 2
margin:10px 5px 15px;
上外边距是 10px
右外边距和左外边距是 5px
下外边距是 15px
例子 3
margin:10px 5px;
上外边距和下外边距是 10px
右外边距和左外边距是 5px
例子 4
margin:10px;
所有 4 个外边距都是 10px

padding

例子 1
padding:10px 5px 15px 20px;
上内边距是 10px
右内边距是 5px
下内边距是 15px
左内边距是 20px
例子 2
padding:10px 5px 15px;
上内边距是 10px
右内边距和左内边距是 5px
下内边距是 15px
例子 3
padding:10px 5px;
上内边距和下内边距是 10px
右内边距和左内边距是 5px
例子 4
padding:10px;
FirstWebApp

week3 C01_D02_LoginSystem

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>用户登录</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="css/style.css"/>
    </head>
    <body>

        <div>
            <h1>用户登录</h1>
            <hr>
            <br> 
            <!--表单的action属性指定表单提交的请求交给服务器端的哪个组件处理(Servlet或JSP)-->
            <!--如果是一个servlet,则action指定为该servlet的url模式,也就是访问路径-->
            <form action="ls">
                账号:<input type="text" name="uname">
                <br><br>
                密码:<input type="password" name="pwd">
                <br><br>
                <input type="submit" value="登录">
            </form>
        </div>
    </body>
</html>

second.html

<!DOCTYPE html>
<html>
    <head>
        <title>这是我的第二个页面</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
    </head>
    <body style="background-color:red;">
        <h1>这是我的第二个页面!</h1>
    </body>
</html>

div{
    width: 300px;
    margin: 50px auto;
    text-align: center;
    background-color: darksalmon;
    padding: 20px 20px 30px 20px;
    color: white;
}

div h1{
    color: lightgoldenrodyellow;                
}

input[type="text"],input[type="password"]{
    padding: 8px 10px;
    border: solid 1px lightblue;
    outline: none;
    border-radius: 5px;
}

input[type="text"]:hover,input[type="password"]:hover{
    box-shadow: 0px 0px 5px yellow;    
}

div input[type="submit"]{
    background-color: crimson;
    width: 100px;
    height: 30px;
    border: none;
    outline: none;
    color: white;
    font-size: 16px;
    border-radius: 5px;
}

div input[type="submit"]:hover{
    cursor: pointer;
    background-color: brown;
    font-size: 102%;
}

在这里插入图片描述

LoginServlet

package com.qdu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 *
 * @author CN
 */
public class LoginServlet implements Servlet{

    //一个Servlet有三个生命周期方法init(),service(),destroy()
    //init()  initialize 初始化的方法,一般用于编写执行初始化的代码
    //Servlet创建一个对象后,会调用init方法执行初始化工作
    @Override
    public void init(ServletConfig config) throws ServletException {
        System.out.println("init()方法被调用...");
    }

    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    
    @Override
    public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
        
        System.out.println("service()方法被调用.....");
        //1. 获取请求参数
        //web程序中请求参数全部是以字符串提交,如果需要转换类型,需要手动转换
        //Ctrl+Shift+上/下
        String uname=req.getParameter("uname"); //根据请求参数的名称获取请求参数的值
        String pwd=req.getParameter("pwd"); //根据请求参数的名称获取请求参数的值
        
        //2. 执行业务逻辑,完成请求处理
        //3. 生成动态响应内容
        res.setContentType("text/html;charset=utf-8"); //设置响应内容的MIME类型和字符集
        PrintWriter out=res.getWriter(); //Ctrl+Shift+I 修复导入
        
        if("anna".equals(uname)&&"1234".equals(pwd))
            out.println("<h1 style=\"color:green;text-align: center;\">登录成功,欢迎你,"+uname+"</h1>");
        else
            //双引号用于括起来字符串,双引号里面不可以直接放双引号,除非转义为普通字符串
            out.println("<h1 style=\"color:red;text-align: center;\">登录失败,请检查用户名或密码是否正确!</h1>");        
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("destroy()方法被调用....");
    }
}

在这里插入图片描述
在这里插入图片描述
C01_D06_SearchStudentInfo

<!DOCTYPE html>
<html>
    <head>
        <title>学生信息查询</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="css/bootstrap.min.css"/>
    </head>
    <body>

        <div class="container">
            <h1 class="text-center text-primary">学生信息查询</h1>
            <hr>
            <br>

            <!--<input type="radio" id="genderM"><label for="genderM">男</label>-->
            
            <!--<br><br>-->
            
            <!--如果不希望表单中添加了form-control类的元素单独占据一行-->
            <!--可以给form添加form-inline类,表示该表单是内联表单-->
            <!--内联表单中添加了form-control类的元素不会单独占据一行-->
            
            <!--action指定表单提交的请求给url模式是sis的servlet处理-->
            <form class="form-inline" action="sis">
                <!--label用于显示一个提示文字,也就是标签-->
                <!--一般是和一个表单元素绑定使用,for指定绑定的元素的id-->
                <label for="xuehao">学号:</label>
                <!--可以使用类form-control给文本框、文本域、下拉列表添加样式-->
                <!--该样式给元素添加基本的文本框样式,并且让该元素单独占据一行-->
                <input class="form-control" id="xuehao" type="text" name="xuehao">
                &nbsp;
                <button class="btn btn-sm btn-primary">查询</button>
            </form>

            <br><br>
            
            <!--点击超链接,可以执行javascript,在href中添加javascript:js代码即可-->
            <a href="javascript:alert('呵呵');">点击我</a>
            
            <br><br>
            
            <!--点击超链接可以请求一个页面或servlet,如果需要追加参数,直接追加即可-->
            <a href="sis?xuehao=2017204612">张文宇</a>
            
            <br><br>
            
            <a href="sis?xuehao=2017204629">
                <img src="images/img6.jpg" alt="这是吕品" title="这是吕品的头像">
            </a>
            
        </div>

    </body>
</html>

在这里插入图片描述
DatabaseUtil


package com.qdu.util;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * 数据库工具类,帮助获取到对应数据库的连接和关闭连接
 * @author Anna
 */
public class DatabaseUtil {
    
    private static final String DRIVER_CLASS="com.microsoft.sqlserver.jdbc.SQLServerDriver";
    private static final String URL="jdbc:sqlserver://localhost:1433;databaseName=QDU";
    private static final String USERNAME="sa";
    private static final String PASSWORD="sa";
    
    /**
     * 获取数据库连接
     * @return 一个数据库连接对象
     */
    public static Connection getConnection(){
        try {
            Class.forName(DRIVER_CLASS);
            return DriverManager.getConnection(URL, USERNAME, PASSWORD);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
        return null;
    }
    
    /**
     * 关闭数据库连接
     * @param rs 结果集对象
     * @param ps 语句对象
     * @param con 连接对象
     */
    public static void close(ResultSet rs,PreparedStatement ps, Connection con){
        try {
            if(null!=rs) rs.close();
            if(null!=ps) ps.close();
            if(null!=con) con.close();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
}

StudentDao

package com.qdu.dao;

import com.qdu.pojo.Student;
import com.qdu.util.DatabaseUtil;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;

/**
 * Dao类-数据访问对象类,专门用于访问数据库中的表 StudentDao包含方法用于对StudentMark表执行增删改查,
 * 这里只封装了一个方法用于查询
 * Data Access Object 数据访问对象,专门用于操作数据库中表的对象
 * 
 * @author Anna
 */
public class StudentDao {

    /**
     * 根据学号查询学生所有信息
     * @param rollno 学生学号
     * @return 包含学生所有信息的学生对象
     */
    public Student findStudentByRollno(String rollno) {

        Connection con = null;
        PreparedStatement ps = null;
        ResultSet rs = null;

        try {
            con = DatabaseUtil.getConnection();
            ps = con.prepareStatement("select * from Student where Srollno=?");
            ps.setString(1, rollno);
            rs = ps.executeQuery();

            if (rs.next()) {
                return new Student(rs.getString(1), rs.getString(2), rs.getString(3), rs.getString(4), rs.getString(5));
            } 
        } catch (Exception e) {
            e.printStackTrace();
        } finally{
            DatabaseUtil.close(rs,ps,con);
        }
        return null;
    }
}

StudentInfoServlet

package com.qdu.servlet;

import com.qdu.dao.StudentDao;
import com.qdu.pojo.Student;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * 创建一个Servlet,用于处理查询学生信息的请求
 *
 * @author Anna
 */
//Ctrl+Shift+I
//@WebSevlet注解/标注将一个类注册为一个servlet,设置一个url模式,也就是访问路径就可以了
@WebServlet("/sis")
public class StudentInfoServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //1. 获取请求参数
        String xuehao=req.getParameter("xuehao");
        //2. 执行业务逻辑,完成请求处理
        StudentDao dao=new StudentDao();
        //调用StudentDao类的findStudentByRollno()根据学号查询单个学生的信息
        //该方法返回一个Student对象,包含一个学生的5项信息
        Student stu=dao.findStudentByRollno(xuehao);
        //取消快捷键和添加注释快捷键相同 Ctrl+/
        //Alt+Shift+F修复代码个事
        //3. 显示动态响应
        resp.setContentType("text/html;charset=utf-8");
        PrintWriter out = resp.getWriter();
        out.println("<h1>学生信息</h1><hr>");
        out.println("<br>学号:"+stu.getSrollno());
        out.println("<br>姓名:"+stu.getSname());
        out.println("<br>性别:"+stu.getSgender());
        out.println("<br>密码:"+stu.getSpassword());
        out.println("<br>班级:"+stu.getSbatch());
    }

}

C01_D07_GetRequestParameters

<!DOCTYPE html>
<html>
    <head>
        <title>注册页面</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="css/bootstrap.min.css"/>
        <style>
            label{
                margin-left: 3px;
                margin-right: 16px;
            }
            
            label:hover{
                cursor: pointer;
                text-decoration: underline;
            }
        </style>
    </head>
    <body>

        <div class="container">

            <h1 class="text-danger">用户注册</h1>
            <hr>

            <form action="rs" class="form-inline">

                <!--表单元素提交给服务器的都是自己的value属性的值,而不是显示文字-->
                用&nbsp;户: <input type="text" name="username" value="anna" class="form-control">
                <br><br>
                密&nbsp;码: <input type="password" name="password" value="1234"  class="form-control">
                <br><br>
                性&nbsp;别:
                <!--表单元素提交的都是value的值
                    同一组单选按钮的name必须相同,才是单选
                    male, female
                -->
                <input type="radio" name="gender" value="M" id="male"> 
                <label for="male">男</label>

                <input type="radio" name="gender" checked value="F" id="female">
                <label for="female">女</label>
                <br><br>
                国&nbsp;家:
                <select name="country" class="form-control">
                    <option value="China">中国</option>
                    <option value="USA">USA</option>
                    <option value="Korea">한국</option>
                    <option value="Japan">Japan</option>
                </select>
                <br><br>
                爱&nbsp;好:
                <!--多个同一个组的复选框名称可以相同,可以不同,但是一般建议相同-->
                <!--如果相同,则参数作为一个字符串数组提交给服务器 hobby-->
                <input id="h1" type="checkbox" name="hobbies" value="LOL"><label for="h1">英雄联盟</label> &nbsp;&nbsp;
                <input id="h2" checked type="checkbox" name="hobbies" value="王者荣耀"><label for="h2">王者荣耀</label> &nbsp;&nbsp;
                <input id="h3" checked type="checkbox" name="hobbies" value="绝地求生"><label for="h3">绝地求生</label> &nbsp;&nbsp;
                <input id="h4" type="checkbox" name="hobbies" value="学习"><label for="h4">学习</label>
                <br><br>
                <input type="submit" value="提交注册" class="btn btn-sm btn-success">
            </form>
        </div>
    </body>
</html>

RegisterServlet

package com.qdu.servlet;

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

@WebServlet("/rs")
public class RegisterServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        
        res.setContentType("text/html;charset=utf-8");
        PrintWriter out=res.getWriter();
        out.println("<h1>注册信息</h1><hr>");
        out.println("<br>账户:"+req.getParameter("username"));
        out.println("<br>密码:"+req.getParameter("password"));
        out.println("<br>性别:"+req.getParameter("gender"));
        out.println("<br>国家:"+req.getParameter("country"));
        out.println("<br>爱好:");
        
        //如果想获取一个参数的多个值,比如通过复选框提交的参数
        //可以调用getParameterValues()方法根据参数名获取参数的多个值
        //以字符串数组返回多个值
        String[] hbs=req.getParameterValues("hobbies"); 
        
        //Http报头/标头
        
        //forEach循环
        //:后面跟着要遍历的数组或集合的名称
        //:前面跟着一个变量,变量类型和数组类型相同,表示遍历的当前元素
        for(String x:hbs){
            out.println(x+"&nbsp;");
        }
    }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

package com.qdu.servlet;

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

@WebServlet("/rs")
public class RegisterServlet extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res)
            throws ServletException, IOException {
        
        //ServletRequest
        //ServletResponse
        //HttpServletRequest继承ServletRequest
        //HttpServletResponse继承ServletResponse
        
        //除了响应内容,也可设置一些响应报头/标头,关于响应的额外信息
        //调用setHeader()方法可以设置标头的名称和值
        
        //refresh标头指定间隔多长时间刷新响应内容
        //3是用秒表示的时间间隔,也可添加一个url,表示间隔多久后跳转到目标页面
        //res.setHeader("refresh","3;url=https://www.baidu.com"); 
        //content-type用于设置响应内容的MIME类型和字符集编码
        //setContentType()方法中的代码其实就是设置content-type这个报头
        res.setHeader("content-type", "text/html;charset=utf-8");
        //res.setContentType("text/html;charset=utf-8");
        PrintWriter out=res.getWriter();
        out.println("<h1>注册信息</h1><hr>");
        out.println("<br>账户:"+req.getParameter("username"));
        out.println("<br>密码:"+req.getParameter("password"));
        out.println("<br>性别:"+req.getParameter("gender"));
        out.println("<br>国家:"+req.getParameter("country"));
        out.println("<br>爱好:");
        
        //如果想获取一个参数的多个值,比如通过复选框提交的参数
        //可以调用getParameterValues()方法根据参数名获取参数的多个值,以字符串数组返回多个值
        String[] hbs=req.getParameterValues("hobbies"); 
        
        for(String x:hbs){
            out.println(x+"&nbsp;");
        }
        
        //请求是客户端发送的,所以作为服务器端的servlet,servlet可以获取请求报头
        out.println("<br>客户端优先接受的MIME类型:"+req.getHeader("accept"));
        out.println("<br>客户端优先接受的语言:"+req.getHeader("accept-language"));
        out.println("<br>客户端的浏览器信息:"+req.getHeader("user-agent"));
    }
}

index.html

<!DOCTYPE html>
<html>
    <head>
        <title>ServletConfig接口和ServletContext接口</title>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <link rel="stylesheet" href="css/bootstrap.min.css"/>
    </head>
    <body>


        <div class="container">
            <h1 class="text-center text-danger">ServletConfig接口 和 ServletContext接口</h1>

            <hr>
            <br>
            
            <!--点击超链接可以请求一个资源(页面、图片、servlet)-->
            <a href="s1">请求Servlet1</a>
            <br><br>
            <a href="s2">请求Servlet2</a>
            <br><br>
            
            <!--点击超链接可以执行js代码,href中javascript:开头,后面跟着js代码即可-->
            <a href="javascript:alert('呵呵呵呵呵');">点击我试试</a>
            
        </div>

    </body>
</html>

C01_D08_ServletConfig_ServletContext
在这里插入图片描述
Servlet1

package com.qdu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Random;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet1
 *
 * @author Anna
 */
public class Servlet1 extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        
        //硬编码: 将一些用到的数据写死在代码里,不方便程序维护
        //如果有一些初始数据是多个servlet或整个程序需要使用的
        //可以考虑在web.xml中配置为程序的初始化参数,程序的初始化参数叫做上下文参数
        
        //每个web程序有且仅有一个ServletContext对象,用于在整个程序中共享数据
        //程序的上下文参数也会封装到该对象中
        //在Servlet中可调用getServletContext()方法获取程序的上下文对象
        ServletContext ctx=getServletContext();
        //上下文参数是初始化参数的一种,调用getInitParameter()方法可根据参数名获取参数值
        //这样如果需要修改编码,修改web.xml中的上下文参数的值即可,无需修改每个Servlet
        String encoding=ctx.getInitParameter("encoding");
        
        resp.setContentType("text/html;charset="+encoding);
        try (PrintWriter out = resp.getWriter()) {
            out.println("<h1>Servlet1哈哈</h1>");
            out.println("<hr>");
            //也可直接获取上下文对象直接操作,而不用变量接收
            out.println("<br>上下文参数encoding:"+getServletContext().getInitParameter("encoding"));
           
            //如果有一些初始数据是某个Servlet要用的,可考虑定义为该Servlet的初始化参数
            //每个servlet的配置信息(包括servlet的初始化参数)被封装到一个ServletConfig对象中
            //一个Servlet有一个对应的ServletConfig对象
            //该对象通过Servlet的init()方法传入给Servlet
            //在Servlet中可通过调用getServletConfig()方法获取对应的ServletConfig对象
            ServletConfig cfg=getServletConfig();
            out.println("<br>Servlet1的初始化参数emailId:"+cfg.getInitParameter("emailId"));
            out.println("<br>Servlet1的初始化参数emailPwd:"+cfg.getInitParameter("emailPwd"));
            
            //如果在程序运行的过程中,某个servlet产生了一些数据(可以是任何类型:整数、字符串或其他对象),需要共享给其他servlet用
            //可以考虑将数据作为一项属性(attribute)添加到上下文对象中
            //setAttribute()方法用于添加一项属性到上下文对象中,要求给出属性名和属性值
            //属性名是字符串表示的名称,属性值可以是任何对象
            
            Random rand=new Random();
            int num=rand.nextInt(10001);
            ctx.setAttribute("number", num);
            //在其他Servlet中可以通过调用getAttribute(String name)方法根据属性名获取属性值
            out.println("<br>Servlet1生成的数字:"+num);
        }
    }
    
}

在这里插入图片描述
自从JDK最初版本发布起,我们就可以使用java.util.Random类产生随机数了。在JDK1.2中,Random类有了一个名为nextInt()的方法:
public int nextInt(int n)
给定一个参数n,nextInt(n)将返回一个大于等于0小于n的随机数,即:0 <= nextInt(n) < n。

web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app version="3.1" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd">
    <!--如果有一些初始数据是多个servlet或整个程序要使用的,可以考虑定义程序的初始化参数,-->
    <!--叫做上下文参数(context parameter)-->
    <context-param>
        <description>servlet响应内容的编码</description>
        <param-name>encoding</param-name>
        <param-value>utf-8</param-value>
    </context-param>
    <!--    
    <context-param>
        <param-name>dbusername</param-name>
        <param-value>sa</param-value>
    </context-param>
    
    <context-param>
        <param-name>dbpassword</param-name>
        <param-value>sa</param-value>
    </context-param>
    -->
    <servlet>
        <servlet-name>servlet1</servlet-name>
        <servlet-class>com.qdu.servlet.Servlet1</servlet-class>
        <!--servlet的初始化参数在servlet中定义-->
        <!--init-param标记定义一个初始化参数,param-name定义参数的名称,param-value定义参数的值-->
        <init-param>
            <description>公司邮箱地址</description>
            <param-name>emailId</param-name>
            <param-value>anna@163.com</param-value>
        </init-param>
        <init-param>
            <description>公司邮箱密码</description>
            <param-name>emailPwd</param-name>
            <param-value>666666</param-value>
        </init-param>
    </servlet>
    <servlet>
        <servlet-name>servlet2</servlet-name>
        <servlet-class>com.qdu.servlet.Servlet2</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>servlet1</servlet-name>
        <url-pattern>/s1</url-pattern>
    </servlet-mapping>
    <servlet-mapping>
        <servlet-name>servlet2</servlet-name>
        <url-pattern>/s2</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>
            30
        </session-timeout>
    </session-config>
</web-app>

在这里插入图片描述
这是什么意思来着?

Servlet2

package com.qdu.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet2
 *
 * @author Anna
 */
public class Servlet2 extends HttpServlet {

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

        ServletContext ctx = getServletContext();
        //上下文参数是初始化参数的一种,调用getInitParameter()方法可根据参数名获取参数值
        //因为上下文参数是属于整个程序的,所以每个servlet都可以用,所以Servlet2也可获取到上下文参数的值
        String encoding = ctx.getInitParameter("encoding");

        resp.setContentType("text/html;charset=" + encoding);
        try (PrintWriter out = resp.getWriter()) {
            out.println("<h1>Servlet2呵呵</h1>");
            out.println("<hr>");
            out.println("<br>上下文参数encoding:" + getServletContext().getInitParameter("encoding"));

            //这里调用getServletConfig()获取的是Servlet2自己的ServletConfig对象,所以没有初始化参数
            ServletConfig cfg = getServletConfig();
            out.println("<br>Servlet1的初始化参数emailId:" + cfg.getInitParameter("emailId"));
            out.println("<br>Servlet1的初始化参数emailPwd:" + cfg.getInitParameter("emailPwd"));
            
            //Servlet1放入上下文对象的属性可以通过getAttribute()方法根据属性名获取到属性值
            out.println("<br>Servlet1生成的数字:"+ctx.getAttribute("number"));
        }
    }
}

在这里插入图片描述
//这里调用getServletConfig()获取的是Servlet2自己的ServletConfig对象,所以没有初始化参数,所以显示null

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值