这里默认您已经配置好了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去学框架”“
二.开始创建基本的包
![](https://img-blog.csdnimg.cn/img_convert/da2c803b87e94f122225bd597bc74181.png)
首先将src标记为源代码根目录
![](https://img-blog.csdnimg.cn/img_convert/867490847a8944376cba39e2aac1c934.png)
在src更目录下创建软件包,我使用的名字是com.xxxx.controller,并且在下面创建类随便起名字就行,本人直接用的Servlet。
添加一下tomcat的库
![](https://img-blog.csdnimg.cn/img_convert/62de85702658ae694063a6a900b6b165.png)
![](https://img-blog.csdnimg.cn/img_convert/56abd5627001ca05a053fe5028409956.png)
三.继承重写方法
@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="")
下面是属性列表
![](https://img-blog.csdnimg.cn/img_convert/c8b393d98191e92f29712d43e29a8cf7.png)
四.基本使用
测试
System.out.println("Hello Servlet");
resp.getWriter().write("Hello Servlet");
在servlet下写这两段话一个是在控制台一个是传到浏览器
下面是在浏览器输出的效果
![](https://img-blog.csdnimg.cn/img_convert/ef151d249fedd934b69d50b7f5d72507.png)
要注意的是访问这个页面要输入相应的地址,就是上边@WebServlet注解下的路径
![](https://img-blog.csdnimg.cn/img_convert/3c686e5ad8649f8a99ee49c8eb9b98dd.png)
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);
}
}
}
实现的效果
![](https://img-blog.csdnimg.cn/img_convert/10b30851adfadec7e1ebbb7dfa089c43.png)
正确输入账号密码后欢迎
错误提示错误信息
![](https://img-blog.csdnimg.cn/img_convert/ec2e4fa15a623c0035151a14e109f959.png)
五.总结与碎碎念
最近刚开始学jsp一上来讲的就是在jsp上用<%%><%=%><jsp:>实现各种功能,没有学更底层的Servlet,只是简单的说了一下jsp是先转成servlet再执行的。其实这样对后边深入学习框架并不友好,所以利用空余时间补齐一下知识点。