抱歉,您的浏览器无法访问本站

本页面需要浏览器支持(启用)JavaScript


了解详情 >

Hello world!

什么是Servlet?

Servlet 是运行在 Web 服务器或应用服务器上的java程序,是Java EE规范之一(一种接口)。

它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层,即接收客户端发送过来的请求并且响应数据给客户端

使用 Servlet,您可以收集来自网页表单的用户输入,呈现来自数据库或者其他源的记录,还可以动态创建网页。

Servlet 架构

💡配置Servlet

  • 创建一个Java类并实现Servlet接口(一般通过继承HTTPServlet类去实现servlet)

  • 重写方法,实现逻辑操作

  • 在web.xml中配置这个servlet的访问地址

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!-- 给tomcat配置servlet相关信息 -->
    <servlet>
    <!-- 写明servlet的名字(一般使用类名即可) -->
    <servlet-name>MyServlet</servlet-name>
    <!-- 写明servlet的全类名 -->
    <servlet-class>servlet.MyServlet</servlet-class>
    </servlet>
    <!-- 给servlet配置访问地址 -->
    <servlet-mapping>
    <!-- 写明需要配置访问地址的servlet -->
    <servlet-name>MyServlet</servlet-name>
    <!-- 写明为该servlet配置的访问地址 -->
    <url-pattern>/myServlet</url-pattern>
    </servlet-mapping>

    <url-pattern>/myServlet</url-pattern>标签中 / 的作用:相当于拼接到 http://ip:port/工程路径后,即http://ip:port/工程路径/myServlet

HTTP协议

什么是HTTP协议

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,所有的WWW文件都必须遵守这个标准,即客户端与服务器之间通信、传输数据需要遵守的规则。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

请求与响应

  • 客户端给服务器发送数据为请求,请求分为GET、POST请求
  • 服务器给客户端回传数据为响应

💡HTTP协议内容

请求/响应行

请求/响应头:
属性名:属性值

请求/响应体:

重要,自行阅读学习

常见响应码

  • 200:表示请求成功
  • 302:表示请求重定向
  • 404:表示服务器找不到该请求地址(地址有错)
  • 500:表示服务器内部错误(代码有错)

💡表单处理、常用API

request对象常用方法 方法介绍
getParameter(String name) 返回name指定参数的参数值
getParameterValues(String name) 返回包含参数name的所有值的数组
setAttribute(String,Object) 存储此请求中的属性
getAttribute(String name) 返回指定属性的属性值
getContextPath() 返回当前WEB项目相对路径
getMethod() 获取请求类型
getSession() 获取Session对象
getCookies() 获取所有Cookie,返回一个Cookie数组
request对象常用方法 方法介绍
setHeader() 设置消息头
setStatus() 设置状态码
addCookie() 添加Cookie
getWriter() 获取通向浏览器的字符流

获取/回传数据

1
2
3
4
5
6
7
8
9
<form action="http://localhost:8080/jsp_war_exploded/myServlet" method="get">
用户名:<input type="text" name="username"><br>
密码:<input type="text" name="password"><br>
兴趣爱好:
<input type="checkbox" name="hobby" value="画画">画画
<input type="checkbox" name="hobby" value="打篮球">打篮球
<input type="checkbox" name="hobby" value="敲代码">敲代码
<input type="submit">
</form>
1
2
3
4
5
String username = req.getParameter("username");
String password = req.getParameter("password");
String[] hobby = req.getParameterValues("hobby");
System.out.println("用户名:"+username+",密码:"+password);
System.out.println(Arrays.toString(hobby));
1
resp.getWriter().println("<div>这是一个div</div>");

http://localhost:8080/jsp_war_exploded/myServlet?username=111&password=222使用?传递参数

请求转发与重定向

image-20210712161839745

1
2
3
4
String username = req.getParameter("username");
req.setAttribute("key", "MyServlet处理的信息:");
System.out.println("MyServlet中的request获得的数据"+username);
req.getRequestDispatcher("/myServlet2").forward(req, resp);
1
2
3
String username = req.getParameter("username");
System.out.println("MyServlet2中的request获得的数据:"+username);
System.out.println("MyServlet2中显示之前处理并保存的数据:"+req.getAttribute("key"));

请求转发的特点:

  1. 浏览器地址栏没有变化
  2. 一次请求
  3. 共享request中的数据
  4. 可以转发到WEB-INF目录下(工程路径下)

image-20210712185234093

1
2
3
4
resp.sendRedirect(req.getContextPath()+"/myServlet2");
// req.getContextPath()获得当前WEB项目相对路径
resp.sendRedirect("http://www.baidu.com");
// 访问外部资源必写http

重定向的特点:

  1. 浏览器地址栏发生变化
  2. 两次请求
  3. 不共享request中的数据
  4. 不能访问WEB-INF目录下资源
  5. 可以访问工程外的资源

💡Filter过滤器

自行学习

中文乱码问题

1
2
req.setCharacterEncoding("UTF-8");
resp.setContentType("text/html;charset=UTF-8");

相关阅读材料

作业

  • 熟悉servlet、jsp并实现一些功能,并写一篇博文。

  • 博文内容要求(必须要求):

    写一篇博文记录你使用servlet、jsp实现功能时遇到了哪些困难、不理解、不知道该如何实现的地方,以及写上解决的过程与结果(未解决的也可以写上有哪些疑惑),或者学习笔记等等皆可。

  • 功能实例(仅参考,不是最低/最高标准):

    1. 含有登陆/注册页面、其他页面。
    2. 登录功能:手动输入信息,符合已存在的用户信息则成功登录。
    3. 注册功能:手动输入信息,不能重复注册已存在的用户名,否则注册失败。
    4. 用户展示:在页面上展示所有已经注册的用户的信息。
    5. 登陆过滤:其他页面,只有登陆成功后才可访问,否则跳转至登陆页面。
    6. 其他页面:利用循环控制语句或其他工具功能输出由后台传递而来的数据。
    7. 等等
  • 提交内容与时间:

    • 提交内容:程序源码+博文链接

    • 提交时间:7.27日晚零点前,将压缩包命名为班级+姓名+学号发送至707823814@qq.com

  • 可能时间太短无法实现太多功能,没有关系,程序源码附上自己实现了的东西就行,没有实现完整也没关系,实现了更多功能也挺好,这个作业打分主要看你的博文里面写的记录内容,程序主要是用来练习以熟悉servlet和jsp的,毕竟大作业会用到。

评论




🧡💛💚💙💜🖤🤍