Servlet基本知识

1.IDEA创建第一个Servlet程序xing

这里说明如何使用 IDEA Ultimate 2020.1.3版本来新建第一个web程序。参考 MoonChasing

1.1 已安装软件

  • JDK1.8
  • IDEA Ultimate 2020.1.3
  • Tomacat 9

1.2 步骤

File → New →Project→ Java Enterprise,

确保:

  • Project SDK是正确的 JDK1.8
  • Java EE 8
  • Application Server 选择 Tomcat正确安装目录

勾选 Web Application,Next就好了。

  1. 之后在 WEB-INF中新建classes,lib目录分别放字节码文件和依赖jar包并对应的进行设置,File→Project Structure→Modules→path 在 Compiler output 中选择 Use module compile output paht 将两个 path 都设置为 WEB-INF中的 classes目录,勾选 Exclude output paths ,然后再 dependency 中 + jar Directory 设置为 刚刚新建的lib目录 最后 apply & OK

  2. 然后再 Run → Edit Configuration 界面会自动出现Tomcat Server,确认 Application server,URL,HTTP port 8080 是否正常,一般不需要修改,

    BTW:URL是 http://localhost:8080/项目名_war-exploded/ apply & OK

最后可以点击 右上方的绿色三角形开始运行,在运行之前,确保 Tomcat没有自启动,否则会启动失败并报端口已被占用的Error信息,运行后一般浏览器跳到 上述 URL,内容是 index.jsp。同时可能会存在 IDEA中的输出日志信息中文乱码,可以参考 What'_up 方法解决

1.3 第一个 Servlet程序

  1. 在src目录下新建 FirstServlet.java
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter; public class FirstServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接受请求发来的参数
String name = req.getParameter("name");
String html = "<h1 style='color:red'>hi," + name + "!</h1><hr/>";
System.out.println("返回给浏览器的相应数据为: " + html);
PrintWriter out = resp.getWriter();
out.println(html);//将html发送回浏览器
}
}
  1. 在web.xml 的 内 添加如下内容
<display-name>FirstServlet</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
<welcome-file>index.jsp</welcome-file>
<welcome-file>default.html</welcome-file>
<welcome-file>default.jsp</welcome-file>
</welcome-file-list> <servlet>
<servlet-name>first</servlet-name>
<servlet-class>FirstServlet</servlet-class>
</servlet> <servlet-mapping>
<servlet-name>first</servlet-name>
<url-pattern>/hi</url-pattern>
</servlet-mapping>

然后右击编辑器左下角的Tomcat 9.0.41[local],并且运行,浏览器自动启动,在地址栏 http://localhost:8080/WebDemo2_war_exploded/,后面添加 hi/?name=jack,就跳出 hi,jack的页面,即为动态响应页面

http://IP地址:端口/context-path/url-mapping

context-path就是项目名

2.标准Java-web工程结构

3.获取请求参数

getParameter() 获取request的单个参数值

getParameterValues() 获取参数列表

SampleServlet.java

public class SampleServlet extends HttpServlet {
//service是请求处理的核心方法,无论是get或者post都会被service()方法处理
public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
String method = request.getMethod();
String name = request.getParameter("name");
String mobile = request.getParameter("mobile");
String[] specs = request.getParameterValues("spec");
PrintWriter out = response.getWriter();
out.println("<h1>Method:" + method + "</h1>");
out.println("<h1>Name:" + name + "</h1>");
out.println("<h1>mobile:" + mobile + "</h1>");
for(String spec:specs) {
out.println("<h2>spec:" + spec + "</h2>");
}
out.println("<a href='http://www.baidu.com'>baidu</a>");
}
}

student.html

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<h1>学员信息登记表</h1>
<form action="/SevletDemo1_war_exploded/sample" method="post">
姓名:<input name="name"/>
<br/>
电话:<input name="mobile" />
<br/>
性别:
<select name="sex" style="width:100px;padding:5px;">
<option value="male">男</option>
<option value="female">女</option>
</select>
<br/>
特长:
<input type="checkbox" name="spec" value="English" />英语
<input type="checkbox" name="spec" value="Program" />编程
<input type="checkbox" name="spec" value="Speech" />演讲
<input type="checkbox" name="spec" value="Swimming" />游泳
<br/>
<input type="submit" value="提交">
<br/>
</form>
</body>
</html>

web.xml 添加:

<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>com.imooc.servlet.SampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>

两种请求

get请求:

将数据通过URL附加数据显性向服务器发送数据,用?分割参数和URL,如下:

http://localhost:8080/SevletDemo1_war_exploded/sample?name=sbt&mobile=123&sex=male&spec=English&spec=Program

post请求

将数据存放在"请求体"中隐形发送数据

在HttpServlet中对应有doGet() 和 doPost() 方法

4.Servlet生命周期

装载-web.xml → 创建-构造函数 → 初始化 - init() → 提供服务- service() → 终止 destroy() ,在这里 init 对应的是 ServeltContext对象

FirstServlet.java

package com.imooc.servlet;

import javax.servlet.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter; public class FirstServlet extends HttpServlet {
// 创建-调用构造函数
public FirstServlet(){
// System.out.println()是输出结果到控制台
System.out.println("正在创建FirstServlet对象");
}
// 初始化-调用init()方法
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("正在初始化FirstServlet对象");
}
// 提供服务-service方法
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//接受请求发来的参数
String name = req.getParameter("name");
String html = "<h1 style='color:red'>hi," + name + "!</h1><hr/>";
System.out.println("返回给浏览器的相应数据为: " + html);
PrintWriter out = resp.getWriter();
out.println(html);//将html发送回浏览器
} @Override
// 销毁
public void destroy() {
System.out.println("终止Servlet对象");
}
}

BTW:IDEA中快捷键 Control+O 可以展开类的所有可重写的方法

5.注解简化配置

Servlet 3.x引入 “注解Annotation”特性,用于简化Web应用程序的配置过程,避免了在java与xml中的频繁切换的烦恼,核心注解是:@WebServlet,直接在java文件中添加 URL映射信息

@WebServlet("/anno")
public class AnnotationServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("I'm annotation servlet!");
}
}

BTW:如果在jsp页面中 form表达中 action="" 链接必须要在注解的 url 前加上项目名(也称contextpath),但是在IDEA中,由于会默认添加 "_war_exploded" 因此 action="/项目名_var_exploeded/anno",这个需要注意。

6.设置初始化加载顺序

web.xml使用设置启动加载顺序

0~9999

启动时加载在工作中常用于系统的预处理

具体操作是

1.init()

这里分别写入三个类

public class CreateServlet extends HttpServlet {
// 在init中写入具体操作
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("正在创建数据库");
}
}
public class ImportServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("准备导入数据");
}
}
public class AnalysisServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("开始分析数据");
}
}

在web.xml中 中加 0~2,0表示最先加载,依次递减,这里无需 urlpattern绑定,因为这是预加载,并没有post,get请求相关

    <servlet>
<servlet-name>create</servlet-name>
<servlet-class>CreateServlet</servlet-class>
<load-on-startup>0</load-on-startup>
</servlet> <servlet>
<servlet-name>import</servlet-name>
<servlet-class>ImportServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> <servlet>
<servlet-name>analysis</servlet-name>
<servlet-class>AnalysisServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>

结合注解,格式如下,以 AnalysisServlet为例:

@WebServlet(urlPatterns="/unused",loadOnStartup=2) //这里 url可以任意,但是不要重,不会被用到
public class AnalysisServlet extends HttpServlet {
@Override
public void init(ServletConfig config) throws ServletException {
System.out.println("开始分析数据");
}
}

Servlet基本知识的更多相关文章

  1. 面试之jsp、Servlet相关知识——生命周期, 区别等

    1.servlet生命周期 所谓生命周期,指的是servlet容器如何创建servlet实例.分配其资源.调用其方法.并销毁其实例的整个过程. 阶段一: 实例化(就是创建servlet对象,调用构造器 ...

  2. Servlet基础知识

    基本知识一.Web结构1.两种应用程序 ①桌面应用程序:QQ.CS.MyEclipse.Office.DW.360.浏览器等必须下载.安装.桌面快捷方式.注册表信息.操作系统后台服务.占用操作系统端口 ...

  3. Servlet基本知识总结

    Servlet 简介 Servlet是什么? Servlet是一个Java编写的程序,此程序是基于Http协议的,并运行在web服务器上或者应用服务器上.它主要是作为web浏览器或其他Http客户端的 ...

  4. Servlet基础知识总结

    Servlet是JavaWeb应用开发的核心组件.Servlet运行在Servlet容器中(例如最常用的Tomcat),它可以为各种客户请求提供相应服务.Servlet可以轻松完成以下任务: 动态生成 ...

  5. JSP SERVLET 基础知识

    jsp(java server page)和servlet是JAVA EE规范的两个基本成员,是JAVA WEB开发的重点也是基础知识.JSP本质上也需要编译成SERVLET运行. JSP比较简单,可 ...

  6. Tomcat是如何加载Spring和SpringMVC及Servlet相关知识

    概述 大家是否清楚,Tomcat是如何加载Spring和SpringMVC,今天我们就弄清下这个过程(记录最关键的东西) 其中会涉及到大大小小的知识,包括加载时候的设计模式,Servlet知识等,看了 ...

  7. 第一次接触servlet的知识

    什么是Servlet?① Servlet就是JAVA 类② Servlet是一个继承HttpServlet类的类③ 这个在服务器端运行,用以处理客户端的请求 Servlet相关包的介绍--javax. ...

  8. servlet部分知识总结

    1.解决中文显示乱码问题: 对于servlet :servlet里面加入代码response.setContentType("text/html;chartset=utf-8"); ...

  9. Servlet深层知识

    一.ServletContext实现请求转发1.得到请求分发器:RequestDispatcherServletContext.getRequestDispatcher(String path):pa ...

随机推荐

  1. Springboot整合shardingsphere和druid进行读写分离

    最近在使用springboot整合shardingsphere和druid实现mysql数据库读写分离时遇到了一些问题,特此记录一下. 依赖版本 Springboot 2.1.6.RElEASE sh ...

  2. 其他:Git生成SSH、Git生成本地库、下载远程库代码 命令

    1.安装Git Bash https://git-scm.com/downloads 2.鼠标右键git bash here 3.执行以下命令: ①   cd ~/.ssh/    [如果没有对应的文 ...

  3. Qt5双缓冲机制与实例

    1. 双缓冲机制 所谓双缓冲机制,是指在绘制控件时,首先将要绘制的内容绘制在一个图片中,再将图片一次性地绘制到控件上. 在早期的Qt版本中,若直接在控件上进行绘制工作,则在控件重绘时会产生闪烁的现象, ...

  4. [刘阳Java]_SpringMVC与Struts2的对比_第12讲

    今日来具体给讲讲SpringMVC与Struts2的对比,这样方便朋友们在工作中或者是面试学习中对这两者的区别有个更好的了解 把这张图放在这里,我是想说SpringMVC和Struts2真的是不一样的 ...

  5. Swift-为什么String转换Int的结果是nil

    摘要 知其然,更要知其所以然.前段时间用 String 转换 Int 处理时,发现一种情况返回 nil,就换成 String 转换 Double 的方式处理.今天就要来看看这种返回 nil 的情况是怎 ...

  6. 大疆M3508、M2006必备CAN总线知识与配置方法

    使用大疆M3508.M2006的CAN总线知识与配置方法 目录 使用大疆M3508.M2006的CAN总线知识与配置方法 前言: 0x00 需要额外的CAN收发器!!! 0x01 硬件层面分析 为什么 ...

  7. 【剑指offer】03.数组中重复的数组

    剑指 Offer 03. 数组中重复的数字 知识点:数组:哈希表:萝卜占坑思想 题目描述 找出数组中重复的数字. 在一个长度为 n 的数组 nums 里的所有数字都在 0-n-1 的范围内.数组中某些 ...

  8. Requests方法 -- Http协议的短链接与长连接介绍

    转载于简书: 作者:熊师傅链接:https://www.jianshu.com/p/3fc3646fad80 1.以前的误解 很久之前就听说过长连接的说法,而且还知道HTTP1.0协议不支持长连接,从 ...

  9. sqliab刷题笔记-联合注入

    Less-1 测试是字符型还是数字型 判断所在字段数 查看显示值 可以看出显示2,3位置.因此我们选择2的位置进行联合注入 查看表名 我们要对admin,users等字符敏感 查看admin表中的字段 ...

  10. FiddlerEverywhere 的配置和基本应用

    一.下载大家自行在官网下载即可,这个可以当做是fiddler的升级版本,里面加了postman的功能,个人感觉界面比较清晰简约,比较喜欢. 二.下载完成之后大家可以自行注册登录,主页面的基本使用如下: ...