Servlet学习复习与浅看jsp
学一点servlet,jsp过时了,然后浅看,然后快进到ssm(先springmvc
不多写了直接复习学了啥(也没啥)
Servlet是啥
Java Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
https://www.runoob.com/servlet/servlet-intro.html
Tomcat是啥
有 Java 环境,再安装一款 Web 容器就可以运行 Servlet 代码了
市面上初学者可用tomcat
tomcat下载安装直接百度
https://www.cnblogs.com/LRF-/p/14940259.html
然后我自己捣鼓报错好多,还有啥字符,都是别人走过的弯路,都搜得到
然后idea里面配置一下(spring那边好像都不用配 所以总结快点去学spring)
helloworld前的准备
参考一个就好了
找不到javax包,需要把下载tomcat的lib中把servlet-api.jar包导入项目中
…奇奇怪怪
Servlet.java:
package testDemo;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
public class Servlet extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
resp.getWriter().println("Hello World !!!");
}
}
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!-- 配置和映射Servlet -->
<servlet>
<!--Servlet 注册的名字-->
<servlet-name>helloServlet</servlet-name>
<!--Servlet 的全类名-->
<servlet-class>testDemo.Servlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>helloServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
</web-app>
奇奇怪怪的整完 然后开始复习
Web目录
web.xml很关键,决定配置和部署
web.xml与@WebServlet注解
在 Servlet 中,web.xml 扮演的角色十分的重要,它可以将所有的 Servlet 的配置集中进行管理,但是若项目中 Servelt 数量较多时,web.xml 的配置会变得十分的冗长。这种情况下,注解(Annotation)就是一种更好的选择。
注解直接在类里用
web.xml放一起了
就是说看情况两个各有优势,暂不深入
关于web.xml,启动容器是要去读取这配置文件的配置的
Servlet 生命周期
- 初始化阶段
- 运行时阶段
- 销毁阶段
init()、service()、destory()
一些web.xml的内容
load-on-startup
控制开容器顺序(多容器下)
<servlet> 和 <servlet-mapping>
元素实现 Servlet 单一映射,还是可以多重的
ServletConfig接口
ServletConfig 对象即可获得当前 Servlet 的初始化参数信息
1.直接从带参的 init() 方法中提取
public class ServletConfigDemo extends HttpServlet {
private ServletConfig servletConfig;
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//获取Servlet得名字
this.servletConfig.getServletName();
}
@Override
public void init(ServletConfig config) throws ServletException {
//从带参init方法中,提取ServletConfig对象
this.servletConfig = config;
}
}
- 调用 GenericServlet 提供的 getServletConfig() 方法获得
//调用 GenericServlet 提供的 getServletConfig 方法获得 ServletConfig 对象
ServletConfig servletConfig = this.getServletConfig();
关于获取信息:
public class ReadConfigServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter writer = response.getWriter();
// 获取ServletConfig对象
ServletConfig config = getServletConfig();
// 获取servletName
String servletName = config.getServletName();
// 返回 servlet 的初始化参数的名称的集合
Enumeration<String> initParameterNames = config.getInitParameterNames();
// 遍历集合获取初始化参数名称
while (initParameterNames.hasMoreElements()) {
// 获取初始化参数名称
String initParamName = initParameterNames.nextElement();
// 获取相应的初始参数的值
String initParamValue = config.getInitParameter(initParamName);
// 向页面输出
writer.write(initParamName + " : " + initParamValue + "<br/>");
}
// 关闭流
writer.close();
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
ServletContext接口
- 获取上下文初始化参数
- 实现 Servlet 之间的数据通讯
- 读取 Web 应用下的资源文件
其他不看,数据通讯
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
* 使用ServletContext展示网站的访问次数
*
*/
@WebServlet("/ShowServlet")
public class ShowServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// 获取ServletContext中存放的count属性(即页面的访问次数)
Integer count = (Integer) getServletContext().getAttribute("count");
// 向页面输出
response.setContentType("text/html;charset=UTF-8");
// 若CountServlet已被访问
if (count != null) {
response.getWriter().write("<h3>该网站一共被访问了" + count + "次</h3>");
} else {
// 若CountServlet未被访问,提示先访问CountServlet
response.getWriter().write("<h3>请先访问 CountServlet</h3>");
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
HttpServletRequest接口&&HttpServletResponse接口
https://www.runoob.com/servlet/servlet-client-request.html
https://www.runoob.com/servlet/servlet-server-response.html
转发请求
RequestDispatcher 接口
javax.servlet 包中定义了一个 RequestDispatcher 接口,RequestDispatcher 对象由 Servlet 容器创建,用于封装由路径所标识的 Web 资源。利用 RequestDispatcher 对象可以把请求转发给其他的 Web 资源。
Servlet 可以通过 2 种方式获得 RequestDispatcher 对象:
- 调用 ServletContext 的 getRequestDispatcher(String path) 方法,参数 path 指定目标资源的路径,必须为绝对路径;
- 调用 ServletRequest 的 getRequestDispatcher(String path) 方法,参数 path 指定目标资源的路径,可以为绝对路径,也可以为相对路径。
重定向
response.sendRedirect()
其他没搞好…
赶着学spring去了,所以就留下坑之后填写
cookie,session,filter…
jsp
JSP 是 Java Server Pages 的缩写,是一种动态网页开发技术。动态网页是指跟静态网页相对的一种网页编程技术。静态网页,随着 HTML 代码的生成,页面的内容和显示基本上不会发生变化,除非修改页面代码。动态网页显示的内容可以随着时间、环境或者数据库操作的结果而发生改变。
JSP 本质是一个 Java 类(Servlet),我们可以在 JSP 页面中嵌入 Java 代码,即:JSP = HTML + Java。
请求 JSP 时,服务器内部会经历一次动态资源(JSP)到静态资源(HTML)的转化。服务器会自动把 JSP 中的 HTML 片段和数据拼接成静态资源响应给浏览器。也就是说,JSP 运行在服务器端,但最终发给客户端的是已经转换好的 HTML 静态页面。