JSP-Servlet-创建项目与使用HttpServletRequest基本方法

这里默认您已经配置好了IDEA下的开发环境并且创建了WebApp项目

一.关于JSP与Servlet

JSP是简化的Servlet设计,在HTML标签中嵌套Java代码,用以高效开发Web应用的动态网页。在仅使用Servlet的web应用开发中,部分Servlet代码通过使用打印语句打印HTML标签来在浏览器中显示页面,而JSP可以代替显示页面的Servlet。

所以学jsp有必要学Servlet吗?下面是知乎上大佬的答案:

”老实说,Servlet放在现在肯定算是一个古老的技术了。现在你去任何的一家公司,应该都不是直接用Servlet来写项目的。现在的项目一般来说还是以SpringMVC-Spring-Mybatis / SpringBoot居多。面试也几乎不会问Servlet的知识(无论是校招还是社招)

既然Servlet已经是一个这么古老的技术了,那我还需要学吗?这是一个非常常见的问题。我初学的时候也非常喜欢搜相关的问题:“SWING/AWT这种技术还需要学吗”。

无论是我在知乎回答Java学习路线,还是读者问到的这个问题,我都会给予肯定的回答:“需要学Servlet,不要跳过Servlet去学框架”“

二.开始创建基本的包

首先将src标记为源代码根目录

在src更目录下创建软件包,我使用的名字是com.xxxx.controller,并且在下面创建类随便起名字就行,本人直接用的Servlet。

添加一下tomcat的库

三.继承重写方法

@WebServlet("/servlet") //路径注解
public class Servlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

    }
}

继承的是HttpServlet重写servlet方法。这个方法中有两个参数req与resp分别代表requst与response一个请求一个相应。

注意上边的@WebServlet()一定要写要不然浏览器找不到Servlet,这个名称可以自己定,也可以定义多个@WebServlet(name="",value="")

下面是属性列表

四.基本使用

  1. 测试

System.out.println("Hello Servlet");
resp.getWriter().write("Hello Servlet");

在servlet下写这两段话一个是在控制台一个是传到浏览器

下面是在浏览器输出的效果

要注意的是访问这个页面要输入相应的地址,就是上边@WebServlet注解下的路径

  1. request实现登录(不连接数据库)

HttpServletResquest对象主要负责的是请求,最重要的使用方法就是从其他jsp页面得到提交的数据。也就是getParameter。

下面做一个简单的登录页面来示范一下

<%--
  Created by IntelliJ IDEA.
  User: Lenovo
  Date: 2023/3/17
  Time: 19:02
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Servlet-learn</title>
</head>
<body>
<h1>主页!</h1>
<form method="post" action="servlet">
    <label>用户名:<input type="text" name="username"></label><br>
    <label>密码:<input type="password" name="password"></label><br>
    <button type="submit">提交</button>
    <button type="reset">重置</button>
</form>
<span><%=request.getAttribute("username")%></span>
<span><%=request.getAttribute("error")%></span>
</body>
</html>

这是jsp的内容,就是在form表单标签中添加action指定servlet,其中servlet与上边@WebServlet注解中路径名字相同。要注意的是jsp中的request与.java中的req相同,respond也是同理。所以可以通过get/setAttribute传递参数。

然后是servlet文件,在下面的代码中主要用到request方法是:

 //req.getParameter(String)用于获取参数
 //req.setCharacterEncoding("utf-8")用于防止乱码
 //req.setAttribute(string,object)用于传递参数
 //req.getRequestDispatcher(url).forward(req,resp)请求转发,实现登录跳转同时传递信息
package com.xxxx.controller;

/******
 * 实现Servlet
 * 1.继承HttpServlet
 * 2.重写Servlet方法用于处理请求
 * 3.设置注解用于指定访问路径
 * 4.req.getRequestDispatcher(url).forward(req,resp)请求转发
 * 5.req.getParameter()用于获取参数
 * 6.req.setCharacterEncoding()用于防止乱码
 * 7.req.setAttribute(string,object)用于传递参数
 * 2023-3-17 RIDDLE
 */

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 java.io.IOException;

@WebServlet("/servlet")
public class Servlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");  //编码格式防止乱码

        String username = req.getParameter("username");  //得到提交的账号密码
        String password = req.getParameter("password");

        if("admin".equals(username)){
            req.setAttribute("username",username);
        }else{
            req.setAttribute("error","账号出错!");
            req.getRequestDispatcher("index.jsp").forward(req,resp);  //请求转发
        }

        if("admin".equals(password)){
            req.setAttribute("username",username);
            req.setAttribute("error","登录成功!");
            req.getRequestDispatcher("index.jsp").forward(req,resp);
        }else{
            req.setAttribute("error","密码出错!");
            req.getRequestDispatcher("index.jsp").forward(req,resp);
        }
    }

}

实现的效果

正确输入账号密码后欢迎

错误提示错误信息

五.总结与碎碎念

最近刚开始学jsp一上来讲的就是在jsp上用<%%><%=%><jsp:>实现各种功能,没有学更底层的Servlet,只是简单的说了一下jsp是先转成servlet再执行的。其实这样对后边深入学习框架并不友好,所以利用空余时间补齐一下知识点。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

RIDDLE!

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

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

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

打赏作者

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

抵扣说明:

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

余额充值