Tomcat&Javaweb程序结构&Servlet基础

118 阅读3分钟

Tomcat安装

是一个绿色文件,解压就安装好了
启动

javaWeb项目结构

image.png

修改class地址为编译后的默认地址

其中的classes和lib都还不是默认地址,需要进行地址修改
步骤:File --> project Structure --> Modules --> paths --> Use module compile output path --> 将Output path 和Test Output paths 的路径改为Web下的classes地址

javaWeb项目部署

  • 方式一

直接把文件夹放到Tomcat的webapps中(效率不高,需要手动)

  • 方式二

在conf的sever.xml里面进行配置

<Context docBase="项目A的路径" path="A" />
<Context docBase="项目B的路径" path="B" />

书写位置:

image.png

Contest代表上下文配置
docBase代表项目的物理路径
path可以根据它查出相关项目的文件
image.png
  • 方法三:ideal部署

Ideal中搭建Web项目

点击Web位置 --> 右上角Add Configuration... --> "+" --> Tomcat Server --> Local -->(已将TomCat内置到Ideal中,但并没有把项目部署到TomCat中去)

image.png

--> (部署)Deployment --> "+" --> Artifact --> apply --> ok

image.png

server.xml和web.xml

server.xml是对服务器做配置。web.xml是对项目做配置,我们主要以Ideal里的web.html为主,当Ideal里面没有添加任何配置才会使用TOmCat里的web.html

<welcome-file-list>
    <welcome-file>Hello.html(项目名)</welcome-file>
</welcome-file-list>

默认跳到Hello界面,不用再加Hello.html后缀

Servlet基础

(在已经部署好Servlet之后操作)

开发一个Servlet

方法一:配置Servlet

  • 先创建一个web项目
  • 导入Servlet的jar包(已经部署好TOmCat后可以直接导入整个jar包)
  • 新建一个实现类去实现Servlet接口并重写service方法
  • 在web.xml中注册Servlet,将Servlet交给TOmCat容器去管理
//配置Servlet
    <servlet>
<!--        为Servlet起的名字-->
        <servlet-name>taofen</servlet-name>
<!--        Servlet的全限定名-->
        <servlet-class>com.lifei.servlet.Helloservlet</servlet-class>
    </servlet>
//Servlet映射配置
    <servlet-mapping>
<!--        通过Servlet的名字找到地址-->
        <servlet-name>taofen</servlet-name>
<!--        浏览器发起的请求-->
        <url-pattern>/hi</url-pattern>
        <url-pattern>/hi1</url-pattern>
    </servlet-mapping>
  • 匹配请求
  • 可以在浏览器中直接访问

流程:后台启动服务器 --> 通过映射找到HelloServlet类里面,然后进行请求的处理

方法二:注解

把在web.xml里的配置全部换成所在类上方的注解,其余不变

//括号里面的等于浏览器发起的请求后缀
@WebServlet("/hi")

@WebServlet(urlPatterns = {"/hi","/h1"}

Servlet的生命周期

  • servlet使用无参构造创建对象(生命周期开始,是懒加载,程序启动的时候并不会创建对象,开始访问才创建)
  • Servlet调用初始化方法(inti())
  • Servlet调用服务方法(service(),单例,从程序启动到程序结束都是同一个Servlet对象,反复执行的是service方法)
  • destory关闭TOmCat(生命周期结束,正常关闭才执行)

image.png Servlet的实例化和初始化是懒加载,如果同时启动,会造成反应迟钝的感觉,造成不好的体验,可以将实例化和初始化提前到服务器启动的时候,加一条迫切加载

方法一:在Servlet配置里面抒写代码
里面输入大于0的整数,数字越小,启动优先级越高
<load-on-startup>1</load-on-startup>
方法二:在注解

@WebServlet(urlPatterns = {"/hi","/h1"},loadOnStartup = 1)

ServletConfig

方法描述
config.getServletContext拿到的上下文对象
config.getServletName拿到Servletd名字
config.getIniParameter根据名称拿到初始化参数

初始化参数设置:在web里写初始化参数


   <servlet>
<!--        为Servlet起的名字-->
        <servlet-name>taofen</servlet-name>
<!--        Servlet的全限定名,对应哪个class-->
        <servlet-class>com.lifei.servlet.Helloservlet</servlet-class>
<!--        初始化参数设置,用法类似于Key-->
        <init-param>
            <param-name>赵鑫</param-name>
            <param-value>煮稀饭</param-value>
        </init-param>
        <load-on-startup>2</load-on-startup>
    </servlet>

    <servlet-mapping>
<!--        通过Servlet的名字找到地址-->
        <servlet-name>taofen</servlet-name>
<!--        浏览器发起的请求-->
        <url-pattern>/hi</url-pattern>
    </servlet-mapping>

在init里根据名称拿值:

@Override
public void init(ServletConfig servletConfig) throws ServletException {

    System.out.println(servletConfig.getInitParameter("赵鑫"));
    System.out.println("初始化");
}

get请求和post请求

区别

  • get在请求时,请求的参数都会拼接在请求URL地址后面,安全性不高;post的请求参数是放在请求数据包中的实体内容进行传递
  • 地址栏的长度限制为2KB,所以get请求传输的数据量小,post传输的数据大小没有限制,所以一般都用post传输

HttpServletRequest对象

方法描述
voidreq.setCharacterEncoding("UTF-8")能获取post请求的中文参数不乱码,必须放在第一行,在get执行之前执行这一句
String getParameter(String name)根据参数名称获取对应参数的值

HttpServletResponse对象

是Servlet的响应对象,可以设置响应的文件格式和编码格式,还可以获取输出流;

  • 常用方法
//防止乱码
resp.setCharacterEncoding("UTF-8");
//获取字符流
final PrintWriter printWriter = resp.getWriter();
//输出的界面
printWriter.println("<!DOCTYPE html>\n" +
        "<html lang="en">\n" +
        "<head>\n" +
        "    <meta charset="UTF-8">\n" +
        "    <title>登录</title>\n" +
        "</head>\n" +
        "<body>\n" +
        "欢迎使用\n" +
        "</body>\n" +
        "</html>");