Servlet入门笔记

 * 1.Tomcat:应用服务器,提供接收请求并做转换,以及返回响应的机制
		bin主体文件目录 
 * 		部署项目的文件夹:webapps
 * 		配置的文件:conf->server.xml文件 修改连接的相关配置:端口号、编码等
 * 2.servlet:接收请求,在service方法中判断请求方式从而应用doXXX方法进行处理
		servlet就是一个java程序,不能直接被浏览器访问,因此需要转换为能被访问的文件格式比如html,因此严重依赖tomcat容器
 * 		配置:需要在web.xml文件中做注册和映射
				 注册<servlet>
					servlet-name名称    servlet-class类所在的位置
				 映射<servlet-mapping>
					servlet-name名称    url-pattren访问的地址    两个名称必须一致,要不然就404
	jsp就是servlet,只不过是包装过后的servlet
 * 3.request和reponse对象
 * 		request的常用方法:getParameter() 接收单个参数
 * 						getParameterValues() 接收多个参数值
 * 						setCharacterEncoding("utf-8") 设置编码格式
 * 						getRequestDispatcher().forward(request,response)转发请求
 * 		response的常用方法:
 * 						getWriter() 获取响应流对象,用于向页面输出内容
 * 						setContentType("text/html;charset=utf-8") 设置浏览器的解码方式
 * 						setCharacterEncoding("utf-8") 设置响应内容的编码方式
 * 						sendRedirct() 重定向
 * 4.转发和重定向的区别:   地址栏,请求,请求的参数
 * 		1.转发的url地址栏不会发生改变;重定向的url地址栏会发生改变
 * 		2.转发实际上是用上一次的请求做的;而重定向是要求浏览器重新发送一次新的请求
 * 		3.转发可以携带上一次请求的参数;而重定向无法携带上一次请求的参数
 * 5.Jsp的九大内置对象:(必考)
 * 		1.request 请求,封装HTTP请求的信息
 * 		2.response 响应,封装HTTP响应的信息
 * 		3.session 会话,封装用户会话的信息
 * 		4.application  应用,封装Web应用程序的全局信息
 * 		5.page 页面,当前JSP页面的实例
 * 		6.pageContext 页面上下文,封装页面上下文的信息
 *		7.config 配置,封装Servlet配置的信息
 * 		8.exception 异常,封装页面抛出的异常信息
 * 		9.out 输出,用于输出响应到客户端的输出流
 * 6.jsp标记:
 * 		指令标记:page设置页面信息	 include整合静态页面  	taglib导入
 * 		动作指令:include整合页面 	 forward跳转页面
		  session代表会话:getAttribute获取值   setAttribute设置键值对   invalidate销毁
		  application代表应用:getAttribute获取值   setAttribute设置键值对
 * 7.cookie和session的区别:
 * 		1.cookie是产生在服务器端,保存在客户端;session是产生在服务器端,保存在服务器端
 * 		2.cookie因为保存在客户端,因此不安全;session相对安全
 * 		3.cookie的键和值都是String类型;session的键是String类型,值是Object类型
 * 		4.cookie有保存时长;session在服务器上保存,会话结束session会在一定时间后销毁
 * 8.四大域:(从小到大)
 * 		1.page域
 * 		2.request域
 * 		3.session域
 * 		4.application域
	servlet中获取四大域方法:page无法获取,只能被servletconfig替代;request方法直接提供;request.getSession();this.getServletContext()
 * 9.监听器以及过滤器:
 * 		过滤器的声明:需要实现javax.servlet.filter接口,重写doFilter方法
 * 			     配置:在web.xml文件中做注册和映射
 * 					<filter>   <filter-mapping>
 * 		监听器的声明:实现相应的监听类型的接口(HttpSessionAttributeListener),重写其中的方法
 * 			    配置:在web.xml文件中做注册
 * 					<listener>   其中HttpSessionBindingListener是唯一一个不需要配置的监听器(必考)
 * 10.EL表达式:可以输出域中存放的值,必须先把值存入域中保存,否则取不到
 * 		语法:${域.键}
 *		关键字:empty 判断内容是否为空
 *
 * 11.JSTL标签库:(必考)
 * 		必须先引入相关的核心库 <%@ taglib perfix="c"  uri="xxxx" %>
 * 		<c:if>
 * 		<c:choose>
 * 		<c:when>
 * 		<c:otherwise>
 * 		<c:forEach>
 * 12.生命周期:
 * 		servlet生命周期:在第一次访问时调用init初始化,每次请求使用service服务,在服务器关闭时调用destory销毁
 * 		filter生命周期:在服务器启动时初始化,每次请求过滤调用doFilter方法,在服务器关闭时调用destory销毁
 * 		listener生命周期:在服务器启动时初始化,事件触发则调用相应的回调函数,在服务器关闭时销毁
			
   13. 乱码解决:server.xml文件配置访问有关的东西,URIEncoding
			//get乱码:因为url地址栏乱码,server.xml文件配置新增URIEncoding
			//post乱码:setCharacterEncoding()设置请求编码,或者加编码过滤器

在这里插入图片描述

设置项目打包方式

  • jar包:java项目归档文件(对外发行软件包)
  • war包:javaweb项目归档文件(最终交付的产品)

servlet 的Maven依赖:

<!--        servletAPI,其中jakarta是现在javax的新版 -->
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>6.0.0</version>
        </dependency>
  • Http协议包括请求头(Get/Post等),响应头
  • Servlet 创建的步骤:
    1. 创建普通java类继承HttpServelt
    1. 重写doXXX/service方法(实现具体的逻辑:接收请求参数,处理并作出响应)
    1. 配置请求映射路径(注册servlet)

Servlet 入门用法示例:

@WebServlet("/login")   // 配置表单提交到的位置来本程序
public class LoginServlet extends HttpServlet {     // 继承 HttpServlet
    @Override                           // 这两个参数用来做请求和响应的
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接收客户端(表单)发送的数据
        String name = req.getParameter("username");
        String pwd = req.getParameter("password");
        System.out.println(name + "/" + pwd);
        //准备响应消息
        String msg = "";
        try {
            //访问数据库执行业务操作
            QueryRunner qr = new QueryRunner(DBUtils.getDataSource());
            //准备SQL
            String sql = "select * from user where username=?";
            //执行查询
            User user = qr.query(sql, new BeanHandler<>(User.class), name);
            if (Objects.isNull(user)) {
                //用户不存在
                msg = "用户不存在";
            } else {
                //对用户输入的密码执行加密加盐
                pwd = SecureUtil.md5(pwd + user.getSalt());
                if (Objects.equals(pwd, user.getPassword())) {
                    //成功
                    msg = "登录成功";
                } else {
                    //密码错误
                    msg = "密码错误";
                }
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }

        //响应
        resp.setContentType("text/html;charset=utf-8");     // 设置编码格式
        PrintWriter pw = resp.getWriter();
        pw.println("登录结果:" + msg);
        pw.flush();     // 刷新并把缓存中的数据写出,和直接close的区别就是还可以继续写数据

        //重定向:客户端跳转(地址栏变为最终地址,无法传递请求数据)
//        resp.sendRedirect("/home.html");

        //请求转发:服务端跳转(地址栏显示第一次请求地址,可以传递请求数据)
//        req.getRequestDispatcher("/index.html").forward(req,resp);
    }
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

永不掉发的陳不錯

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值