servlet笔记

17 篇文章 0 订阅
10 篇文章 0 订阅

servlet接口需要实现的5个方法

package app01a;

import javax.servlet.*;
import javax.servlet.annotation.WebServlet;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "MyServlet",urlPatterns = ("/my"))
public class MyServlet implements Servlet{
    private transient ServletConfig servletConfig;//transient是Java语言的关键字,用来表示一个域不是该对象串行化的一部分。

    @Override
    public void init(ServletConfig servletConfig) throws ServletException{
        this.servletConfig=servletConfig;
    }

    @Override
    public ServletConfig getServletConfig() {
        return servletConfig;
    }

    @Override
    public String getServletInfo(){
        return "My Servlet";
    }

    @Override
    public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{
        String servletName=servletConfig.getServletName();
        response.setContentType("text/html");
        PrintWriter writer=response.getWriter();
        writer.print("<html><head></head><body>Hello World "+servletName+"</body></html>");

    }

    @Override
    public void destroy(){

    }
}

HttpServlet简单HelloWorld

  • HelloWorld.java
import javax.servlet.ServletException;
import javax.servlet.annotation.WebInitParam;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

@WebServlet(name = "HelloWorld",
        urlPatterns = {"/HelloWorld"}
    )
public class HelloWorld extends HttpServlet {
    private String message;

    @Override
    public void init() throws ServletException {
        message = "Hello world, this message is from servlet!";
    }

    @Override  //service
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置响应内容类型
        resp.setContentType("text/html");

        //设置逻辑实现
        PrintWriter out = resp.getWriter();
        out.println("<h1>" + message + "</h1>");

        //测试对参数的处理

    }

    @Override
    public void destroy() {
        super.destroy();
    }
}

  • 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-name>HelloWorld</servlet-name>
        <servlet-class>HelloWorld</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HelloWorld</servlet-name>
        <url-pattern>/HelloWorld</url-pattern>
    </servlet-mapping>
</web-app>

初始参数处理

  • 默认参数
@WebServlet(name = "HelloWorld",
        urlPatterns = {"/HelloWorld"},
        initParams = {
            @WebInitParam(name = "user",value = "tqc"),
            @WebInitParam(name = "email",value = "666"),
        }
  • 获取键名
//获取键的名字
Enumeration<String> names=getInitParameterNames();
while (names.hasMoreElements()){
    System.out.println(names.nextElement());
}
  • 遍历键值对
ServletConfig servletConfig=getServletConfig();
Enumeration<String> names=servletConfig.getInitParameterNames();
while (names.hasMoreElements()){
    String name=names.nextElement();
    String value=servletConfig.getInitParameter(name);
    System.out.println(name+":"+value);
}

通过cookie保持用户登录

//cookie操作
CookieTool cookieTool=new CookieTool();
cookieTool.buildCookiesMap(req);
String userId=cookieTool.get("userId");
System.out.println("userId="+userId);    //打印用户Id
if(userId.equals("")){
    Cookie userIdCookie=new Cookie("userId","1");
    resp.addCookie(userIdCookie);
}
  • CookieTool.java
package tools;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import java.util.HashMap;

public class CookieTool {
    HashMap<String,String> cookiesMap;
    public CookieTool(){
        cookiesMap=new HashMap<String,String>();
    }
    public void buildCookiesMap(HttpServletRequest request){
        Cookie[] cookies=request.getCookies();
        if(cookies!=null){
            for(Cookie cookie:cookies){
                String name=cookie.getName();
                String value=cookie.getValue();
                this.cookiesMap.put(name,value);
            }
        }
    }
    public String get(String name){
        String ans=this.cookiesMap.getOrDefault(name,"");
        return ans;
    }
}

JSP的EL表达式

java代码中提供模板数据,装入request中,重定向

        HashMap<String,String> person=new HashMap<>();
        person.put("name","tqc");
        request.setAttribute("person",person);
        RequestDispatcher rd=request.getRequestDispatcher("/LearnEL/index.jsp");
        rd.forward(request,response);

jsp中通过EL读取数据

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ page pageEncoding="utf-8" isELIgnored="false" %>
<p>ID=${requestScope.person.name}</p><br>

JSTL

依赖两个库

/usr/local/apache-tomcat-8.5.39/webapps/examples/WEB-INF/lib/

taglibs-standard-impl-1.2.5.jar taglibs-standard-spec-1.2.5.jar
拷到 lib

通用动作指令

out

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:out value="value" default="default"></c:out>

set

  • 创建一个限域变量
    <c:set var="name" value="tqc" scope="request"></c:set>
    <p>${requestScope.name}</p>
  • 设置限域变量中的属性值

键值对或者对象成员赋值

    <c:set target="${person}" property="name" value="dsy"></c:set>
    <p>${requestScope.person.name}</p>

条件动作指令

if

  <c:if var="ans" test="${fn:contains(\"Hello World\",\"Hello\" )}" />
  <p>${ans?"ok":"no"}</p>

forEach

  • 下标访问
    <c:forEach var="i" begin="1" end="5">
      <p>x=${i}</p>
    </c:forEach>
  • 元素访问(列表)
    <c:forEach var="e" items="${list}">
      <p>e=${e}</p>
    </c:forEach>
  • 元素访问(键值对)
    <c:forEach var="item" items="${person}">
      <p>key=${item.key},value=${item.value}</p>
    </c:forEach>

forToken

    <c:forTokens var="item" items="nice to meet you" delims=" ">
      <p>${item}</p>
    </c:forTokens>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值