Java web个人笔记

一、事先准备

1)首先要安装idea和tomcat,然后里面配置tomcat,创建web文件用到tomcat

在这里插入图片描述
在这里插入图片描述

2)然后我这里创建了 web应用文件

在这里插入图片描述
src里面写java程序,web里面写前端,jsp这个单独另外算,

3).jsp里面写东西
<%--
  Created by IntelliJ IDEA.
  User: master
  Date: 2020-06-28
  Time: 12:09
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
<h1>hello world</h1>
  </body>
</html>

在这里插入图片描述

4)在网页端运行java文件(XML配置)

注意啊,这里就用到了映射这个概念,你直接输入http://localhost:8080/Demo02_war_exploded/,其实就是直接访问out/artifacts/Demo02_war_exploded/
在这里插入图片描述
但是访问java不可以直接用这样子访问,要配置映射才可以,哪里配置映射?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>
<!--        name和下面的一样-->
        <servlet-name>Myservlet</servlet-name>
<!--        这个类的路径要一致-->
        <servlet-class>com.qiang.Demo01.Myservlet</servlet-class>
    </servlet>
    <servlet-mapping>
<!--        name和上面一样-->
        <servlet-name>Myservlet</servlet-name>
<!--    下面的路径自己起的    -->
        <url-pattern>/myservlet</url-pattern>
    </servlet-mapping>
</web-app>

注意啊,这个xml文件配置了的,我们可以http://localhost:8080/Demo02_war_exploded/myservlet访问java程序了,访问的东西是java里面的一个方法

java文件:

package com.qiang.Demo01;

import javax.servlet.*;
import java.io.IOException;

public class Myservlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {

    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        String id = servletRequest.getParameter("id");//传参数
        System.out.println("服务端接受客户端的请求,参数为:"+id);//服务器给客户端的,在控制台显示
        servletResponse.setContentType("text/html;charset=UTF-8");
        servletResponse.getWriter().write("客户端接受到服务器端的回写");//服务器给客户端的,在网页端显示

    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}


在这里插入图片描述
在这里插入图片描述

5)注解方式配置(推荐)

注解非常简单,一行就解决

@WebServlet("/demo02")
public class Myservlet2 implements Servlet {
	//code........
}

这样的效果和上面的XML配置是一样效果的

二、servlet生命周期

init()进行初始化,service()进行业务处理,destroy()进行Servlet的销毁

package com.qiang.Demo01;

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

@WebServlet("/demo02")
public class Myservlet2 implements Servlet {

    public void test(){
        System.out.println("输出一句话");
    }
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("Servlet初始化");
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("Servlet进行业务");
    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {
        System.out.println("进行Servlet销毁");
    }
}

多输入几次这个http://localhost:8080/Demo02_war_exploded/demo02
在这里插入图片描述

1)步骤
  1. 当浏览器访问Servlet时,tomcat回查询当前Servlet的实例化对象是否存在,如果不存在,则通过反射机制动态调用对象,如果存在,直接执行第三步
  2. 调用init进行初始化操作
  3. 嗲用service完成业务操作
  4. 关闭tomcat时,调用的destory,释放资源
2)Servlet生命周期方法:无参构造函数,init、service,destory
  1. 无参构造只调用一次,创建对象
  2. init只调用一次,初始化对象
  3. service调用N次,执行业务
  4. destory执行一次,卸载对象

三、ServletConfig

  • getServletName() :返回servlet名称
  • getInitParameter(String key):返回init参数的值(web.xml)
  • getInitParameterNames():返回集合,包含所有的值
  • getServletContext():返回ServletContext对象
<?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">
    
    <context-param>
        <param-name>username</param-name>
        <param-value>user</param-value>
    </context-param>
    <servlet>
<!--        name和下面的一样-->
        <servlet-name>Myservlet</servlet-name>
<!--        这个类的路径要一致-->
        <servlet-class>com.qiang.Demo01.Myservlet</servlet-class>
<!--        局部俩变量开始-->
        <init-param>
            <param-name>username</param-name>
            <param-value>admin</param-value>
        </init-param>
        <init-param>
            <param-name>password</param-name>
            <param-value>123456</param-value>
        </init-param>
<!--        局部变量结束-->
    </servlet>

    <servlet-mapping>
<!--        name和上面一样-->
        <servlet-name>Myservlet</servlet-name>
<!--    下面的路径自己起的    -->
        <url-pattern>/myservlet</url-pattern>
    </servlet-mapping>
</web-app>
package com.qiang.Demo01;

import javax.servlet.*;
import java.io.IOException;
import java.util.Enumeration;

public class Myservlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("返回类名"+servletConfig.getServletName());//返回类名
        System.out.println("局部变量username:"+servletConfig.getInitParameter("username")+"\n");

        Enumeration<String> initParameterNames = servletConfig.getInitParameterNames();
        while (initParameterNames.hasMoreElements()){
            System.out.println("迭代器中"+servletConfig.getInitParameter(initParameterNames.nextElement()));
        }

        ServletContext servletContext = servletConfig.getServletContext();
        System.out.println("该项目名字"+servletContext.getContextPath());
        System.out.println("服务器信息"+servletContext.getServerInfo());
        System.out.println("全局变量的username:"+servletContext.getInitParameter("username"));
    }

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

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {


    }

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }
}


在这里插入图片描述

四、HttpServlet

HttpServlet 继承 GenericServlet 继承 Servlet
上面我们的Servlet,只有一个service这个函数有用而已,其他的平常生活都用不到,但是又要写那么多,所以简化什么的,日常都是用HttpServlet的多
而且HttpServlet里面的东西方便快捷又多

package com.qiang.Demo01;

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;

@WebServlet("/test")
public class MyHTTPservlet extends HttpServlet {
    //以get方式返回的时候调用函数
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("GET");
    }

    //已post方式返回的时候调用函数
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.getWriter().write("POST");
    }

}

比如这个,他可以得知你是GET传值还是POST传值
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值