Servlet与Jsp

xiaoxiao2021-02-28  19

请求响应图:

一:Servlet简介与体系结构

Servlet是使用JAVA语言编写的服务器端程序。Servlet主要运行在服务器端,并由服务器调用。

Servlet是单实例的,所以赢尽量少使用全局变量。

Servlet(接口)<——GenericServlet(抽象类)<——HttpServlet(抽象类)

二:Servlet实现方式:

方式一:实现Servlet接口,覆写其中的方法

url俩种访问方式:

第一种:访问资源:http://localhost/HelloServlet/hello/login.html

第二种:访问后台路径(直接与Servlet关联)

方式二:继承GeneriServlet类,覆写service方法

方式三:继承HttpServlet

根据要求可以覆写doGet(xxx)doPost(xxx),service(xxx),如果覆写了servicexxx)方法,则执行service(xxx)方法,不执行doGet(xxx)doPost(xxx)方法。

eg1: (1)<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录页面</title> </head> <body> <form action="loginURL" method="post"> 用户名:<input type="text" name="username"/> <br/><br/> 密码:<input type="password" name="pwd"/> <br/><br/> <input type="submit" value="登录"/> <input type="reset" value="重置"/> </form> </body> </html> (2)<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>欢迎页面</title> </head> <body> <h3>恭喜,登录成功!</h3> </body> </html> (3) <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>失败页面</title> </head> <body> <h3>用户名或密码错误,请重新登录!</h3> <a href="http://localhost/HelloWeb/hello/login.html">点击跳转</a> </body> </html> (4)package org.afanti.com; import java.io.IOException; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class LoginServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { doPost(req,resp); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { String username=req.getParameter("username"); String pwd=req.getParameter("pwd"); if("lily".equals(username) && "123789".equals(pwd)){ req.getRequestDispatcher("/hello/welcome.html").forward(req,resp); }else{ req.getRequestDispatcher("/hello/fail.html").forward(req,resp); } } } (5)<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> <display-name>HelloWeb</display-name> <welcome-file-list> <welcome-file>index.html</welcome-file> <welcome-file>index.htm</welcome-file> <welcome-file>index.jsp</welcome-file> <welcome-file>default.html</welcome-file> <welcome-file>default.htm</welcome-file> <welcome-file>default.jsp</welcome-file> </welcome-file-list> <servlet> <servlet-name>firstServlet</servlet-name> <servlet-class>org.LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>firstServlet</servlet-name> <url-pattern>/hello/loginURL</url-pattern> </servlet-mapping> </web-app>

三:Servlet配置方式

方式一:注解配置   @WebServlet(urlPatterns={“/xxx”})方式二:web.xml(部署描述符)配置

注意:<load-on-startup>属性的值为0或正数指   明当容器启动时就加载该Servlet,值越小,优先级越高;但是loadOnStartup的值为负数或没有此属性时则当请求该Servlet时,才加载该Servlet.

加载(实例化):Servlet容器创建Servlet实例;

初始化:该容器调用init()方法;

服务:如果请求Servlet,则容器调用service()方法;

销毁:销毁实例之前调用destroy()方法。

“服务器端跳转的路径”可以是绝对路径也可以是   相对路径。服务器端如果是绝对路径,要写成: /跳转路径   ("/"代表的是上下文根目录后的"/")如果客户端跳转的路径使用的是绝对路径,要写成:

   /上下文根目录/跳转路径

六:JSP(Java Server Page)

1. JSP:Java服务页,JSP是一种动态页面技术。JSP页面存活于Web容器中。 JSP其实就是在HTML页面中嵌入Java代码。 JSP=HTML+Java代码 2 JSP与Servlet的关系是什么?    Servlet是JSP的前身,本质上是一样的。    JSP页面在运行时由Web容器先转换成Servlet类, 然后编译,再运行编译好的.class文件,   最终转换成HTML代码发送给客户端浏览器。

在HTML页面中嵌入Java代码:

使用Scriptlet代码    1.<%!           Java类、方法、全局变量(或常量)      %>   2.<%         Java代码(语句),局部变量      %>

    3.<%=变量或常量%>      // 输出内容

<%@page import="java.net.URLDecoder"%> <%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title></title> </head> <body> <% String username=request.getParameter("user"); // 获取请求参数名为user的参数值 if("tom".equals(username)){ %> <h3>欢迎Tom,你是我们的VIP用户!你抓老鼠很厉害~~~</h3> <% }else{ %> <h3>你是<%=username%>,不欢迎!!!</h3> <% } %> </body> </html>

七:JSP四种属性范围

(1) page属性范围:

    使用pageContext内置对象操作,但是习惯上将这种范围称为page范围。只在一个页面中保存属性,跳转之后无效

(2)request属性范围

    在一个请求范围内保存属性,例如:服务器端跳转后想要让属性保存下来,则可以使用request属性范围。

(3)session属性范围( Session代表客户端与服务器端的一次会话,保存于服务器端。

  也就是属性可以在一个会话范围内保存,只要是  同一个会话,则无论是客户端跳转还是服务端跳转,都可以保存。

(4) application属性范围

   将属性设置到服务器中,这样,所有会话都可以 访问该属性。不宜设置过多,因为会影响服务器性能。

八:Cookie与Session

1)Cookie:  Cookie是Http header的一部分,其传输由HTTP协议控制;                        要将Cookie发送到浏览器,需要调用HttpServletResponse的addCookie(cookie对象)方法;

                       注意:. 在客户端每次向服务器端发送请求时都会将之前设置的Cookie随着头信息一起发送到服务器上;                                           Cookie由服务器端生成,但保存于客户端。

(2)Cookie与Session关系:

   在Cookie中保存着一个SessionId(在Tomcat中的这个Cookie名为JSESSIONID),这样用户在每次发出请求时都会将此SessionID发   送到服务器端,服务器端依靠此Cookie中保存着的SessionId来区分每一个不同的客户端。

eg1:

(1).

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>Cookie</title> </head> <body> <% Cookie cookie=new Cookie("mycookie","Hello,this is my cookie!"); // 生成一个Cookie对象 response.addCookie(cookie); // 将该Cookie发送给客户端 %> </body> </html>

(2).

<%@ page contentType="text/html; charset=utf-8" pageEncoding="utf-8"%> <%@ page import="java.util.Enumeration"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>获取所有的请求头信息(request headers)</title> </head> <body> <h3>所有的请求头信息如下:</h3> <% Enumeration<String> enumers=request.getHeaderNames(); // 获取所有的头信息名称 while(enumers.hasMoreElements()){ String headerName=enumers.nextElement(); // 获取当前的头信息名称 String headerValue=request.getHeader(headerName); out.println("<h4>"+headerName+"=============>"+headerValue+"</h4>"); // 输出到浏览器 } String sessionId=session.getId(); %> <h3>当前的SessionId是:<%=sessionId%></h3> </body> </html>

转载请注明原文地址: https://www.6miu.com/read-2631437.html

最新回复(0)