idea配置,servlet

eclipse与idea

同为java主流开发工具,用于代码开发

区别:

1、工作空间

eclispse使用的是是唯一工作空间的原则,将使用eclispe开发的所有项目系统存放至指定的工作空间,由于所有项目存在同一工作空间,eclipse可以快速的对同一工作空间的不同项目进行切换

idea则为每个项目单独创建指定目录空间,所以idea每次每个工作区只能操作一个项目,但是可以启动多个工作区

2、代码提示

eclipse可以通过配置全字母进行代码的自动提示

idea自带代码全字母提示,配置忽略大小写后提示功能更完善并且对于导包,字符串设置都有提示

3、插件功能

eclipse虽然拥有很多的插件匹配,但相对于idea而言就没有那么完善了

Idea配置

修改编码集

idea配置,servlet_第1张图片

设置ctrl+鼠标滚轮修改字体大小

idea配置,servlet_第2张图片

设置自动导包

idea配置,servlet_第3张图片

忽略大小写提示

idea配置,servlet_第4张图片

https://blog.csdn.net/qq_36135928/article/details/90348725

idea创建动态web工程进行tomcat配置

1、点击new->Project…

idea配置,servlet_第5张图片

2、选择对应模板选择指定tomcat服务

idea配置,servlet_第6张图片

3、如果没有配置过tomcat需要首先配置tomcat

idea配置,servlet_第7张图片

idea配置,servlet_第8张图片

4、配置tomcat项目默认打开以及访问项目名

idea配置,servlet_第9张图片

**URL:**Idea启动tomcat后自动打开的浏览器以及浏览器默认访问的地址(一般不进行修改,在修改项目访问名称后会自动修改)

**HTTP port:**访问端口号

idea配置,servlet_第10张图片

项目访问路径(/必须)

5、配置classes与lib

calsses用于保存运行编译的class文件

lib用于保存项目运行时需要的jar包

(1)在WEB-INF下分别创建classes与lib文件夹

idea配置,servlet_第11张图片

(2)打开项目配置

idea配置,servlet_第12张图片

选择自定义输出位置将之前的classes位置选择

idea配置,servlet_第13张图片

配置lib自动导入jar包

idea配置,servlet_第14张图片

idea配置,servlet_第15张图片

idea配置,servlet_第16张图片

Servlet

在服务器运行期间用于对非静态资源请求做出处理并给予响应的程序

要想在web通过tomcat执行java代码,那么就必须实现servlet接口

Servlet接口中的方法:

生命周期方法:
void init(ServletConfig config) 用于初始化Servlet
void service(ServletRequest req ,ServletResponse resp) 用于处理用户请求且做出响应
void destroy() 用于从容器中销毁该Servlet实例

servlet的生命周期

servlet的生命周期基于三个相应的方法

服务器启动后,当客户端第一次请求对应servlet时,调用对应servlet init()方法进行初始化创建,在程序执行期间每次请求重复调用service()方法进行服务的处理,当服务器正常关闭时,调用destroy()方法执行销毁

idea配置,servlet_第17张图片

tomcat执行时对应的serlvet实例是单例模式,当客户发送http请求至tomcat,tomcat解析请求,根据地址查找对应web.xml,上所有的servlet-mappring中的url-pattern值中进行匹配,如果没有匹配项返回404,如果存在匹配性获取对应servlet-name继续上servlet的servlet-name进行匹配获取对应servlet-class使用反射进行操作,进行操作前会进行判断,是否已经实例化过,如果创建过(不是第一次被请求)那么直接返回请求的对象调用service方法,如果没有请求过(第一次被请求),调用init方法进行初始化创建之后调用service方法处理请求。service方法在服务器运行期间随着客户的请求重复调用,服务器关闭时,会在关闭之前自动调用destroy方法进行销毁

获取该Servlet对应的ServletConfig
ServletConfig getServletConfig() 返回该Servlet对应的配置对象

基于servlet接口方式实现web功能的调用

1、创建java类实现servlet接口

import javax.servlet.*;
import java.io.IOException;
//创建java类 实现servlet接口
//注意servlet包由tomcat提供  所以一定首先配置tomcat
public class MyServlet implements Servlet {
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        System.out.println("servlet初始化");
    }
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("serlvet被调用");
    }

    @Override
    public void destroy() {
        System.out.println("servlet销毁");
    }
    @Override
    public ServletConfig getServletConfig() {
        return null;
    }
    @Override
    public String getServletInfo() {
        return null;
    }
}

2、在web.xml中配置请求路径与servlet之间的联系

    <servlet-mapping>
        
        <servlet-name>testservlet-name>
        
        <url-pattern>/testurl-pattern>
    servlet-mapping>
    <servlet>
        
        <servlet-name>testservlet-name>
        
        <servlet-class>com.yunhe.servlet.MyServletservlet-class>
    servlet>

基于GenericServlet抽象类方式实现web功能的调用

为简化Servlet的编写,sun提供了一个实现Servlet接口的抽象Servlet类,主要实现了类的序列化,配置

1、创建java类继承GenericServlet抽象类重写相应方法

import javax.servlet.GenericServlet;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import java.io.IOException;
import java.io.PrintWriter;

//继承GenericServlet抽象类
public class MyGenericServlet extends GenericServlet {
    //GenericServlet中帮我们实现了大部分方法  但service作为服务方法每个servlet可能不同所以需要我们实现
    //如果对于GenericServlet提供的方法不想使用或功能额外添加可以使用重写的方式

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        //servletRequest用于存放请求的所有内容

        //servletResponse用于相应客户端的对象
        //从相应对象中获取可以输出至客户端的打印流对象
        PrintWriter writer = servletResponse.getWriter();
        writer.println("hello world!");

    }
}

2、书写配置文件

    <servlet-mapping>
        <servlet-name>MyGenericServletservlet-name>
        <url-pattern>/test1url-pattern>
    servlet-mapping>
    <servlet>
        <servlet-name>MyGenericServletservlet-name>
        <servlet-class>com.yunhe.servlet.MyGenericServletservlet-class>
    servlet>

注意:在进行xml配置时,不能出现相同的url与name,但是不同的url与name可以指向相同的class

Httpservlet

为了能够快速开发适用于HTTP协议的Servlet类,sun提供了一个抽象类HttpServlet
javax.servlet.http.HttpServlet
继承自GenericServlet
适用于JavaWeb应用程序Servlet
除了继承自GenericServlet的方法外,HttpServlet还提供了7个处理HTTP请求的方法

HTTP请求方法 HttpServlet对应的处理方法
GET doGet(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
POST doPost(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
HEAD doHead(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
PUT doPut(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
DELETE doDelete(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
TRACE doTrace(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException
OPTIONS doOptions(HttpServletRequest req,HttpServletResponse resp) throws ServletException,IOException

1、创建类继承httpServlet,重写相应的请求处理方法

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

//sun公司提供的针对于http协议处理的setvlet
public class myHttpServlet extends HttpServlet {

    //用于处理get请求的方法
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("get请求处理");
    }

    //用于处理post请求的方法
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("post请求处理");
    }
}

2、配置web.xml映射

    <servlet-mapping>
        <servlet-name>myHttpServletservlet-name>
        <url-pattern>/test2url-pattern>
    servlet-mapping>
    <servlet>
        <servlet-name>myHttpServletservlet-name>
        <servlet-class>com.yunhe.servlet.myHttpServletservlet-class>
    servlet>

注解开发

java的重写注解 重载注解 函数式接口注解,这些就是一些限制性的注解

servlet3.0以上版本推出了注解开发,使用webservlet注解并填入相应的参数实现0配置

通过注解与相应参数的传入可以避免麻烦的web.xml的配置

使用模板与注解实现servlet的编写

1、点击相应的模板创建

模板与servlet由tomcat提供所以必须先配置tomcat

idea配置,servlet_第18张图片

2、输入创建servlet的名字

idea配置,servlet_第19张图片

3、修改注解进行地址映射

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("/asd")
//通过注解形式进行快速配置
//这个注解相当于web.xml中的相应配置  所以同样不能出现相同的地址
public class FinalServlet extends HttpServlet {
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        doGet(request,response);
    }

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        System.out.println("get");
    }
}

ServletContext对象(上下文对象)

上下文对象概述及生命周期

上下文对象在项目中,是一个全局管理者.是单例的,只有一个
在服务器启动的时候,服务器会自动的为我们创建出来一个上下文对象.这个上下文对象始终存储在服务器上.当服务器关闭,上下文对象销毁.
上下文对象作为项目的全局管理者,可以服务于每一个servlet.
每一个servlet都可以随时随地的取得并使用上下文对象.
上下文对象的取得方式

 * 取得上下文对象的方式:
	 * 	
	 * 	取得方式1:
	 * 	ServletContext application = this.getServletConfig().getServletContext();
	 *  变量名:必须叫application
	 *  
	 *  取得方式2:
	 *  ServletContext application = this.getServletContext();
	 *  
	 *  未来的实际项目开发,使用第二种方式来取得上下文对象,因为简单方便.
	 *  注意:第二种方式,虽然没有调用getServletConfig()方法,但是内部的实现原理仍然是先调用了getServletConfig()方法,只不过在代码中省略掉了而已.
	 *  
	 *  第一种方式和第二种方式的实现原理是一模一样的,第二种是第一种的简写形式.

上下文对象的常用方法

(1)获得全局初始化参数
getInitParameter(String key)
搭配web.xml中的配置
通过key获取value


<context-param>
			<param-name>encodingparam-name>
			<param-value>utf-8param-value>
context-param>

通过上下文对象可以获取web.xml中配置的相应name的value

ServletContext servletContext = this.getServletContext();
String encoding = servletContext.getInitParameter("encoding");
System.out.println(encoding);

(2)作为域对象存取数据

在servlet中,域对象一共有3.上下文域对象是其中一种
* 域对象是用来做存取值操作的.
* 在域对象中保存的值,只要域对象没有销毁,那么域对象中的值就始终存在
*
* 作为上下文域对象,取值范围最广泛.
* 当我们将值存放到上下文域对象中之后,上下文对象不销毁,里面存的值也始终存在.服务器关闭,上下文对象销毁,里面的值也随之销毁.域对象的存取值和值的是否销毁,与浏览器是否重启无关
* 域对象的常用方法:
* 存值: 域对象.setAttribute(String key,Object value)
* 取值: 域对象.getAttribute(String key) Object value
* 移除值: 域对象.removeAttribute(String key) 
 ServletContext servletContext = this.getServletContext();
        //获取上下文对象中key属性为key的值返回object类型的数据
        Object key = servletContext.getAttribute("key");
        if(key==null){
            //设置指定key属性为key的value的值为1
            servletContext.setAttribute("key",1);
        }else{
            servletContext.setAttribute("key",Integer.valueOf(key.toString())+1);
        }
        System.out.println(servletContext.getAttribute("key"));

(3)获取项目发布路径
getRealPath("/");

//获取项目发布路径
ServletContext application = this.getServletContext();
String path = application.getRealPath("/");
//E:\Code\apache-tomcat-9.0.0.M10\webapps\1_servlet5\
System.out.println(path);

ServletConfig对象

ServletConfig对象概述

在Servlet对象创建出来之后,搭配每一个Servlet对象,会伴随着一个ServletConfig对象的产生.
Servlet对象是我们要用的对象,ServletConfig对象是用来装饰Servlet对象的配置对象.
Servlet对象就相当于人,ServletConfig对象相当于衣服.
先有Servlet对象,后有ServletConfig对象
该对象在实际项目中没有什么作用,在开发框架时会用到

/*
 * ServletConfig对象的取得:
 * 	ServletConfig config = this.getServletConfig();
 *  变量名:config
 */
@Override
public void init(ServletConfig config) throws ServletException {
	
	//创建ServletConfig对象的过程
	super.init(config);
}

ServletConfig对象常用方法

(1)获得web.xml中配置的servlet-name
getServletName()

ServletConfig config = this.getServletConfig();
		String sname = config.getServletName();
		System.out.println(sname);//指定的name

(2)根据key获取value
getInitParameter(String key)
配合web.xml中的配置(注意配置在servlet-class的下方)

    <servlet-mapping>
        <servlet-name>myHttpServletservlet-name>
        <url-pattern>/test2url-pattern>
    servlet-mapping>
    <servlet>
        <servlet-name>myHttpServletservlet-name>
        <servlet-class>com.yunhe.servlet.myHttpServletservlet-class>
        
        <init-param>
            <param-name>usernameparam-name>
            <param-value>zhangsanparam-value>
        init-param>
    servlet>
        ServletConfig servletConfig = this.getServletConfig();
        String username = servletConfig.getInitParameter("username");//获取当前servlet指定配置的数据
        System.out.println(username);

你可能感兴趣的:(java,java,idea)