JSP_Servlet实战
1.Servlet定义Java Servlet或简称Servlet是在某些Web或应用程序服务器上运行的程序。它们充当来自Web浏览器或HTTP客户端的入站请求与HTTP服务器上存在的应用程序或数据库之间的中间层。2.为什么使用Servlet场景1-冗余的JSP:<%@ page contentType="text/html;charset=UTF-8" language="java" %&
1.Servlet定义
Java Servlet或简称Servlet是在某些Web或应用程序服务器上运行的程序。
它们充当来自Web浏览器或HTTP客户端的入站请求
与HTTP服务器上存在的应用程序或数据库之间的中间层。
详细介绍:
- Servlet 是JavaEE规范之一 。规范就是接口
- Servlet 就JavaWeb三大组件之一。
三大组件分别是: Servlet 程序、Filter 过滤器、Listener 监听器。 - Servlet 是运行在服务器上的一个java小程序,
它可以接收客户端发送过来的请求,并响应数据给客户端。
2.为什么使用Servlet
场景1-冗余的JSP:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>$Title$</title>
</head>
<body>
<%request.setAttribute("name","zhangsanfeng");%>
<%=request.getAttribute("name")%>
</body>
</html>
结果 : 123
场景2-Servlet改造JSP:
创建Servlet
(1)servlet(包名)/HelloWorldServlet(servlet名)
src下创建个servlet(包名)文件夹,然后右击Create New Servlet,
创建一个Servlet = = >HelloWorldServlet
然后在web.xml 里web-app加
(2)web.xml
<!--访问类 就需要映射-->
<!--servlet标签给Tomcat配置Servlet程序-->
<servlet>
<!--servlet-name标签 Servlet程序起一个别名(一般是类名)-->
<servlet-name>HelloWorldServlet</servlet-name>
<!--servlet-class是Servlet程序的全类名-->
<servlet-class>servlet.HelloWorldServlet</servlet-class>
</servlet>
<!--下面配置地址 servlet-mapping 标签给Servlet程序配置访问地址-->
<servlet-mapping>
<!--servlet-name标签的作用是告诉服务器,我当前配置的地址给哪个Servlet程序使用-->
<servlet-name>HelloWorldServlet</servlet-name>
<!--url-pattern标签配置访问地址
/ 斜杠在服务器解析的时候,表示地址为http://ip:port/工程路径
/HelloWorldServlet表示地址为http://ip:port/工程路径/HelloWorldServlet
-->
<url-pattern>/HelloWorldServlet</url-pattern>
</servlet-mapping>
==》配置servlet程序的访问地址
两个servlet-name要相同,名字可以任意取。
servlet-class是src下的地址,全路径,包名加类名。
如果有第二个servlet可以在中间创建这两个,
也可以直接在下面写,但servlet-mapping一定在servlet下面。
主要思路是:
浏览器的资源路径去web.xml配置文件 的找对应的地址
这个地址给谁用的,找到对应的name,然后找到最上面的name
然后就找到了对应的的工程地址,然后就到对应的类。
然后在HelloWorldServlet里面写:
==》编写一个类去实现Servlet接口
没有配tomcat需要导包tomcat 的 jsp-api.jar 和 servlet-api.jar
service等价于doPost和doGet
service方法是专门用来处理请求和响应的。
(3)HelloWorldServlet.java
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;
public class HelloWorld2Servlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//request绑定数据
request.setAttribute("name","asdfg");
//转发
request.getRequestDispatcher("index.jsp").forward(request,response);
}
}
快捷键自动补全:
alt + 回车 == 》introduce local variable
创建相应类型的变量
(4)index.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Title</title>
</head>
<body>
${name}
</body>
</html>
通过后台(Servlet)调用jsp
http://localhost:8080/HelloWorldServlet
==》
http://表示http协议
localhost是服务器ip
8080 是服务器端口号
/ 是工程路径
(就是8080和HelloWorldServlet中间的,配置tomcat时已 省略)
/HelloWorldServlet资源路径
结果 :asdfg
相对于之前的代码,省略了html和java混合使用。
3.Servlet的优势
专人专职:JSP负责显示,Servlet负责控制
4.创建Servlet的两种方式:
第一种方式 implements Servlet
(不用这种,用第二种,第一种了解就行)
核心要点:
Servlet生命周期:
如果一个Servlet没有被部署在分布式的环境中,
一般web.xml中声明的一个Servlet只对应一个实例。(相当于单例模式)
而如果一个Servlet实现了SingleThreadModel接口,
就会被初始化多个实例。
(1)加载和实例化
(2)初始化:init() 【执行一次】
第一二步,是第一次访问的时候创建Servlet程序会调用。
(3)服务:service() 【反复执行】
第三步,每次访问都会调用
(4)销毁:destory() 【执行一次】
在web工程停止的时候调用
快捷键:alt + 回车 接口实现方法
步骤1:WorldServlet
如果没效果,把下面换成英文
public class WorldServlet implements Servlet {
//自定义
public WorldServlet(){
System.out.println("实例化。。。");
}
@Override
public void init(ServletConfig servletConfig) throws ServletException {
System.out.println("初始化...");
}
@Override
public ServletConfig getServletConfig() {
return null;
}
@Override
public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
System.out.println("处理请求和生成响应...");
}
@Override
public String getServletInfo() {
return null;
}
@Override
public void destroy() {
System.out.println("销毁...");
}
}
步骤2:web.xml
<servlet>
<servlet-name>WorldServlet</servlet-name>
<servlet-class>servlet.WorldServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>WorldServlet</servlet-name>
<url-pattern>/WorldServlet</url-pattern>
</servlet-mapping>
结果:
1实例化。。。
2初始化…
3(服务)处理请求和生成响应…
(每刷新一次页面就会出现一次)
3(服务)处理请求和生成响应…
3(服务)处理请求和生成响应…
点击stop
4销毁…
第二种方式 extends HttpServlet(企业专用)
最上面的案例
5.总结
JSP本质上是一个Servlet,JSP适合表示层开发,Servlet适合封装控制逻辑
题外话:
web中/斜杠的不同意义
在web中/斜杠是一种绝对路径。
/斜杠如果被浏览器解析,得到的地址是: htp://ip:port/
<a href="/">斜杠</a>
/斜杠如果被服务器解析,得到的地址是: htp//ip:port/工程路径
1、<url -pattern>/servlet1</url-pattern>
2、servletContext.getRealPath("/");
3、request.getRequestDispatcher(/");
特殊情况: response.sendRediect("/");
把斜杠发送给浏览器解析。得到http://ip:port/
----2021.10.16
更多推荐
所有评论(0)