目录
一、Tomcat配置
这里以Eclipse为例,IDEA配置参考:IDEA 配置 Tomcat
Eclipse配置Tomcat
1.配置服务器运行环境
在窗口-首选项找到服务器-运行时环境,点击添加
在Apache中找到安装的Tomcat版本,下一步
选择安装目录以及所需的jdk版本,添加完成后应用并关闭
2.新建服务器
窗口-显示视图,找到服务器,打开
点击服务器视图中的连接
新建服务器,选择Tomcat的对应版本
3.新建动态Web项目
右键左侧空白处新建动态Web项目
输入项目名,下一步
勾选生成web.xml部署描述符,完成
4.创建类继承HttpServlet
创建一个类用于演示,项目结构如下
编写代码:
@WebServlet(urlPatterns = "/easy")
public class EasyServlet extends HttpServlet{
//Servlet java服务端应用程序
//EasyServlet extends HttpServlet
//EasyServlet也是一个java服务端应用程序
//就可以接收浏览器发送过来的请求
//浏览器发送请求一般有两种形式 get/post
//HttpServlet中定义了doGet和doPost两个方法
//分别来处理get请求和post请求
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException {
System.out.println("----接收到请求");
//接收参数
String params_name= request.getParameter("name");
response.getWriter().write("params---"+params_name);
}
@Override
public void doPost(HttpServletRequest request,HttpServletResponse response) {
}
}
5.启动服务器
右键服务器-添加和移除
点击添加
再次右键服务器,启动
控制台会打印日志
6.测试访问
浏览器中可以访问到
二、关于Servlet
Servlet是Java编写的服务器端程序,用于处理HTTP请求和响应。Servlet运行在Web服务器上,可以接收来自客户端的HTTP请求,并生成相应的HTTP响应。Servlet可以动态生成HTML页面、处理表单数据、访问数据库等。Servlet是JavaEE(Java Enterprise Edition)规范的一部分,它通过Java Servlet API提供了对服务器端开发的支持。
Tomcat定义一个Servlet通过继承HttpServlet,不同的服务器可能会有差异。
1.请求转发与重定向
请求转发是指服务器接收到客户端的请求之后,将该请求转发给另一个资源进行处理,并将处理结果返回给客户端。客户端并不知道服务器进行了请求转发,它只知道最终返回的结果。这种方式下,客户端只发送了一次请求,服务器进行了多次处理。
重定向是指服务器接收到客户端的请求之后,返回一个特殊的响应码,告诉客户端需要重新发送请求到另一个URL。客户端会根据这个响应码进行解析,并重新发送请求到指定的URL。这种方式下,客户端发送了两次请求,第一次请求到达服务器后,服务器会返回特殊的响应码,然后客户端再根据这个响应码发送第二次请求。
请求转发
编写一个类测试请求转发
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet接收到请求");
resp.getWriter().write("HelloServlet response");
}
}
修改EasyServlet中的方法
@Override
public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException, ServletException {
System.out.println("----接收到请求");
//接收参数
String params_name= request.getParameter("name");
//转发
if(params_name!=null) {
//回应
response.getWriter().write("params---"+params_name);
return;
}else {
//转发
request.getRequestDispatcher("/hello").forward(request,response);
return;
}
}
测试请求转发
重定向
//重定向
if("re".equals(params_name)) {
response.sendRedirect("https://www.baidu.com");
return;
}
2.Servlet的作用域
Servlet的作用域是指Servlet对象在内存中存在的范围或时间段。Servlet共有4个作用域:请求(Request)、会话(Session)、上下文(Context)和页面(Page)。
请求作用域(Request): 请求作用域表示Servlet对象在一次HTTP请求的处理过程中存在,并且仅对当前请求有效。在同一次请求中,不同的Servlet对象之间无法共享数据。可以使用request对象的setAttribute()和getAttribute()方法来实现在不同的Servlet之间传递数据。
会话作用域(Session): 会话作用域表示Servlet对象在整个用户会话过程中存在,即从用户发送第一个请求到用户关闭浏览器。会话作用域中的Servlet对象可以跨多个请求共享数据。可以使用session对象的setAttribute()和getAttribute()方法来实现在不同的请求之间传递数据。
上下文作用域(Context): 上下文作用域表示Servlet对象在整个Web应用程序的生命周期中存在。在同一个Web应用程序中的不同Servlet对象可以共享数据。可以使用servletContext对象的setAttribute()和getAttribute()方法来实现在不同的Servlet之间传递数据。
页面作用域(Page): 页面作用域表示Servlet对象在页面级别上存在,即一个页面对应一个Servlet实例。在同一个页面中的不同Servlet对象可以共享数据。可以使用pageContext对象的setAttribute()和getAttribute()方法来实现在不同的Servlet之间传递数据。
作用域对象 request,session,ServletContext
转发前设置一个键值对
//作用域对象 request session ServletContext
request.setAttribute("白龙马","小白龙");
//转发
request.getRequestDispatcher("/hello").forward(request,response);
return;
接收请求
@WebServlet("/hello")
public class HelloServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
System.out.println("HelloServlet接收到请求");
Object obj = req.getAttribute("白龙马");
resp.setHeader("Content-Type", "text/html;charset=utf-8");
resp.getWriter().write("HelloServlet response:"+obj);
}
}
request.getParameter()
方法
用于获取请求中的参数值,一般用于获取用户提交的表单数据或URL参数。
request.getAttribute()
方法
用于获取请求中的属性值,一般用于在请求的不同部分之间共享数据。
在webapps文件夹新建一个jsp文件
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
easypage页面
<br/>
${loginuser}
</body>
</html>
创建类
@WebServlet("/page")
public class PageServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//处理业务获取数据...
req.setAttribute("loginuser", "张三");
req.getRequestDispatcher("/easypage.jsp").forward(req, resp);
return;
}
}
测试访问
3.Servlet生命周期
Servlet的生命周期指的是Servlet在服务器中从被创建到被销毁的整个过程。Servlet生命周期可以分为三个阶段:初始化、服务和销毁。
Servlet在第一次访问时实例化对象,实例化之后理解执行了初始化方法,是单例的,线程不安全。
//Servlet生命周期
//loadOnStartup默认-1,设置为正数则在启动时直接实例化对象,数值越小越优先
@WebServlet(urlPatterns = "/page",loadOnStartup = 1)
public class PageServlet extends HttpServlet{
public PageServlet() {
System.out.println("PageServlet------实例化对象");
}
@Override
public void init() throws ServletException {
System.out.println("PageServlet------初始化对象");
}
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//服务
super.service(req, resp);
//先执行service方法根据请求方式不同分别执行doGet或doPost方法
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//处理业务获取数据...
req.setAttribute("loginuser", "张三");
req.getRequestDispatcher("/easypage.jsp").forward(req, resp);
return;
}
@Override
public void destroy() {
//要结束时执行销毁
System.out.println("PageServlet------销毁对象");
}
}
第一次访问时
服务器停止时
三、关于JSP
JSP(Java Server Pages)是一种基于Java技术的服务器端技术,用于动态生成HTML页面。JSP允许在HTML页面中嵌入Java代码,通过标签和脚本语言来动态生成内容。与Servlet相比,JSP更加易于编写和维护,因为它可以直接在HTML页面中嵌入Java代码,而无需编写独立的Servlet类。当客户端请求一个JSP页面时,JSP引擎将会将其转换为一个Servlet类并编译执行。
<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8" isErrorPage="true" isELIgnored="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Insert title here</title>
</head>
<body>
easypage页面
<br/>
<%-- 忽略EL表达式 --%>
${loginuser}
<!-- HTML注释 -->
<%-- JSP注释 --%>
<%-- JSP:java server page tomcat在运行时会将.jsp文件解析成一个Servlet--%>
<%-- JSP九大内置对象 --%>
<%-- pageContext最小域对象、request、session、application四个域对象、
page当前对象、response、out、config、exception--%>
<%-- 打印脚本 out.print() --%>
<%=new String("<h1>你好</h1>") %>
<%-- 运行脚本 运行java程序 --%>
<table>
<tr><td>ID</td><td>编号</td><td>姓名</td></tr>
<% for(int i=0;i<num;i++){%>
<tr><td><%= i+1 %></td><td><%= i+1001 %></td><td><%="张三" %></td></tr>
<% } %>
<%-- 声明脚本 声明属性 --%>
<%! int num=12; %>
</table>
</body>
</html>
JSP源码编译后的位置:在Eclipse中,这些文件可能会被存放在类似workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\work\Catalina\localhost的路径下。
1.JSP的九个内置对象
JSP有以下九个内置对象:
-
pageContext:代表JSP页面的上下文,可以通过该对象访问其他内置对象。
-
request:代表客户端的HTTP请求。可以通过该对象获取请求的参数、请求头、请求方式等信息。
-
session:代表用户的会话。可以通过该对象在用户多次请求之间共享数据。
-
application:代表整个应用程序的上下文。可以通过该对象在整个应用程序范围内共享数据。
-
page:代表当前JSP页面本身,可以通过该对象调用当前页面的方法。
-
response:代表服务器对客户端的HTTP响应。可以通过该对象设置响应的内容、响应头、响应状态码等信息。
-
out:用于输出响应内容的输出流对象。
-
config:代表当前JSP页面的配置信息对象,可以通过该对象获取JSP页面的初始化参数。
-
exception:用于处理页面发生的异常,可以通过该对象获取页面上抛出的异常信息。
2.JSP内嵌的三种Java脚本
(1)打印脚本
使用<%= %>标签将一个表达式的结果输出到JSP页面中。表达式中可以是任意的Java表达式,包括变量、方法调用、运算等。表达式会自动进行类型转换,并将结果输出到客户端。
(2)运行脚本
使用<% %>标签将Java代码嵌入到JSP页面中。在脚本表达式中,可以执行任意的Java代码,并且可以访问和操作JSP页面中的内置对象。
(3)声明脚本
使用<%! %>标签在JSP页面中定义Java方法、变量等。声明块中定义的内容可以在整个JSP页面中使用,并且在脚本表达式中可见。