J2EE与Java Web
发展史,三种架构
- 单机时代 - 桌面应用
- 联机时代(Client客户端 - Server模式)
- Client/Server结构(C/S结构)是指客户端和服务器结构
- 优点:数据方便共享,安全系数高
- 缺点:必须安装客户端,升级与维护困难
- 互联网时代(Broswer - Server模式)
- Broswer-Server(B/S)模式即浏览器和服务器模式
- 优点:开发简单,无需安装客户端,数据易于共享
- 缺点:相较于C/S模式,执行速度与用户体验相对较弱
初识Servlet
请求与响应
从浏览器发出送给服务器的数据包称为 “请求(Request)"
从服务器返回给浏览器的结果称为 “响应(Response)”
J2EE(Java 2 Platform Enterprise Edition)是指“Java 2 企业版”
Servlet 主要用于生成动态Web内容
Servlet
Apache Tomcat
Tomcat是Apache 软件基金会旗下一款免费的开放源代码的Web应用服务器程序 Tomcat是运行Servlet的容器
IDEA创建Java Web工程
一、通过maven向导,创建标准java web工程。
- 创建标准maven工程,在选择maven工程,jdk1.8,设置项目坐标系
- main文件夹下新建webapp目录
- 在File-Project Structure-Project Settings-Module-" "-web中设置,表明该目录保存web应用方面的内容
- Deployment Descriptors中调整核心配置文件web.xml的路径,在将"web"修改为“srcmainwebapp”,版本信息与Tomcat保持一致,选择3.1 Apache Tomcat® - Which Version Do I Want?查看版本
- 设置web资源路径,选中webapp路径,部署时映射的路径默认为"/"
- web应用的启动部署方式,使用默认目录保存最终运行的目录D: …outartifactsservelt_first_Web_exploded
二、将idea与Tomcat进行绑定,点击Add Configeration
- 找到Tomcat Server,选择本地(Local)
- 取消自动打开网页(Open browser)
- 点击Deployment,点 号,点击Artifact
- 将Application context:设置为/,取消上下文
Java Web 工程标准结构
Servlet开发与基本配置
- 创建Java类,继承HttpServlet
- 重写service方法,处理请求,生成响应
public class SampleServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//1. 处理请求中的用户数据
String name = req.getParameter("name");
String mobile = req.getParameter("mobile");
//2. 通过响应返回结果
// PrintWriter:字符输出流
PrintWriter out = resp.getWriter();
out.println("<h1>name:" name "</h1>");
out.println("<h1>mobile:" mobile "</h1>");
}
}
- 配置web.xml,绑定访问地址
<servlet>
<servlet-name>sample</servlet-name>
<servlet-class>hua.indi.servlet.SampleServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>sample</servlet-name>
<url-pattern>/sample</url-pattern>
</servlet-mapping>
请求参数的发送与接受
请求参数是指浏览器通过请求向Tomcat提交的数据
request.getParameter() :接收单个参数
request.getParameterValues() :接收多个同名参数
Get与Post请求方式
Get方式将请求参数附加在访问地址后显性向服务器发送的方式。 http://localhost:8080/sample?name=zhangsan Post方式会将数据存放在”请求体”中隐性向服务器发送的方式 http://localhost:8080/samole 请求体:name=zhangsan
Get与Post应用场景
- Get常用于不包含敏感信息的查询功能
- 例如:https://www.baidu.com/s?wd=imooc
- Post用于安全性较高的功能或服务器写操作
- 用户登录、用户注册、公司账目
Get与Post处理方式
- 所有请求:service()方法
- Get求情:doGet()方法
- Post请求:doPost()方法
public class RequestMethodServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
PrintWriter out = response.getWriter();
out.println("<h1>GET:name=" name "</h1>");
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String name = request.getParameter("name");
PrintWriter out = response.getWriter();
out.println("<h1>POST:name=" name "</h1>");
}
}
Servlet生命周期
- 装载 - web.xml
- 创建 - 构造方法
- 初始化 - init()
- 提供服务 - servlet
- 销毁 - destory()
public class FirstServlet extends HttpServlet {
/**
* 装载 web.xml 后创建 FirstServlet构造方法
*/
public FirstServlet() {
System.out.println("正在创建FirstServlet");
}
/**
* 初始化加载 FirstServlet
*/
@Override
public void init() throws ServletException {
System.out.println("正在初始化FirstServlet");
}
/**
* Servlet进行服务
*/
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
// getParameter获取用户输入的指定参数
String name = req.getParameter("name");
String html = "<h1 style='color:red'>Hi," name "!</h1></hr>";
System.out.println("返回给浏览器的响应的内容为:" name);
// getWriter获取响应流
PrintWriter out = resp.getWriter();
// 向客户端返回响应
out.println(html);
}
/**
* 在创建之前,结束后销毁 FirstServlet
*/
@Override
public void destroy() {
System.out.println("正在销毁FirstServlet");
}
}
注解方式配置Servlet
代码语言:javascript复制Servlet 3.x之后引入了“注解Annotation”特性 注解用于简化Web应用程序的配置过程 Servlet核心注解:@WebServlet
/**
* 添加 @WebServlet
* 运行时会在所有在 WEB-INF 中扫描Class文件
*/
@WebServlet("/anno")
public class AnnotationServlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
response.getWriter().println("I'm Annotation Servlet~~");
}
}