linus下tomcat安装与使用:新建项目

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

硬件服务器=大的计算机:有操作系统

web项目:在当前服务器上部署:其他客户端通过网络传输可以访问:达到实现资源共享的目的


一、tomcat是什么?

       Tomcat是一种开源的Web服务器和Servlet容器,它是Apache软件基金会的一个子项目。Tomcat可以作为Java Servlet和JavaServer Pages(JSP)技术的运行环境,用于开发和部署Java Web应用程序。它能够将静态页面、JSP、Servlet、以及一些Java应用程序如Struts、SpringMVC和JSF等转化为动态网页输出。Tomcat常用于开发和部署Java Web应用程序,它免费且跨平台。

二、安装步骤及使用过程出现的问题

2.1.安装tomcat

安装tomcat不要在中文路径下!比如:下载

2.2.了解tomcat: 目录结构

2.3.找到接口-浏览器打开判断是否成功启动

2.3.1.sh startup.sh 启动tomcat

        jps

2.3.2. 查找到接口为8080:打开浏览器输入网址:ip+端口,再在终端输入jps得到Bootstrap

#netstat -anlp | grep java

       

        jps出现了Bookstrap:指浏览器成功打开了tomcat

2.3.3.关闭Bookstrap的两种方式

        1.kill -9 24245(数字串)   2.ls 后 sh shutdown.sh

2.4.发布容器;IDEA里的tomcat

开发工具:

idea develop tooler otherversion

2.5.找不到jdk:自身原因:有两个jdk地址,但只有一个用作配置环境:

2.5.1.step1:一开始新建文件选择的jdk路径和新建文件后file|setting|runner :jre:Use Project JDK(路径统一)和Project Structure路径统一

2.5.2.step2:能够打开Run控制台但报错显示.....catalina/localhost:权限不够(图文不符,忘截图了)

 

 2.5.3.step3:conf/Catalina 也要修改权限,下图为运行成功

2.5.4.成功运行并自动打开网页:但网址显示的是子站

修改:给出的url是默认的 可以改为主页

Server

Deployment :的application context要保留根目录

2.5.5.直接在tomcat8.5/webapps/ROOT 删掉ROOT 将其他子站文件名改为ROOT

 6.端口占用问题:在IDEA中改为8081,1098;看目录结构:在confi/servlet.xml中修改

          

三.Servlet的实现

        

3.1.IDEA2022创建项目(与2019不同)

先新建普通项目:新建module和包再新建web:在ServletDemo module右键-add Frameworks Support添加框架支持

出现web包

加入configration

 运行一下,再在项目下新建testservlet

继承HttpsServlet后无法导包:在web/WEB-INF/下新建lib,复制servlt-qpi.jar(在文件夹中搜索)进去,再右键选择add as directory

 是HttpServlet不是httpsServer

3.2.IDEA2022<url-parten>

通过注解起名@WebServlet(“网址”);

相当于原始配置方式:

 四、Servlet的生命周期

     

   :结果是init只打印即运行一次,service可以多次打印,关闭网页时控制台才会出现destroy()

 五、HttpServletRequest对象

5.1.获取请求参数

 

地址栏带参数输入时,从浏览器传递:控制台打印 :?xxx&xxx&xxx

        String uname = req.getParameter("uname");//获取特定的参数
        System.out.println("指定的uname:"+uname);
        String pwd = req.getParameter("pwd");
        System.out.println("指定的pws:"+ pwd);
        String[] hobbies = req.getParameterValues("hobby");//多个相同参数名的参数,数组
        System.out.println("hobbies:"+ Arrays.toString(hobbies));

 5.2.请求中文乱码问题:情景输入姓名

//在getParameter前面固定编码格式
req.setCharacterEncoding("UTF-8");
String uname = req.getParameter("uname");

//特定内容转变
//中文乱码解决方式:
String uname = new String(req.getParameter("uname").getBytes("ISO-8859-1"), "UTF-8");
System.out.println("login传入的Name:"+uname);

似乎低版本的tomcat方式一   只适用于 POST方法,GET不行?

 5.3请求转发

req.getRequestDispatcher("xxx").forward(req,resp);

      请求响应后,地址不变,服务器端行为,浏览器感知不到页面内容的跳转;

      req.getRequestDispatcher("xxx").forward(req,resp);  xxx只能是服务器内的,比如不能跨域访问百度

 例子:

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<form action="s04" method="get">
<%--    action的地址没有“/”是因为默认web与src是在同一个目录下的--%>
    username:<input type="text" name="uname">
    password:<input type="password" name="pwd">
    <input type="submit" value="login">
</form>
</body>
</html>
package testservlet;

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("/s04")
public class Servlet04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uname = req.getParameter("uname");
        System.out.println("s04-name:"+uname);
        //请求转发:jsp也可以
        req.getRequestDispatcher("s041").forward(req,resp);
//        req.getRequestDispatcher("login.jsp").forward(req,resp);
        System.out.println("---back to s04");
    }
}

package testservlet;

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("/s041")
public class Servlet041 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String uname = req.getParameter("uname");
        System.out.println("s041-uname:"+uname);

    }
}

 5.4HttpServletRequest对象的使用

        域对象的共享方法  .set/getParameter();

//s041:获取域对象中的数据
String age = (String) req.getParameter("age");
System.out.println("s041-age"+age);
//s04:域对象数据的共享
req.setAttribute("age","18");
String age=(String)req.getParameter("age");
System.out.println("s04--ag2:"+age);

6.HttpServletResponse对象

                

6.1响应数据

字符流/字节流

 //响应数据:
        //字符输出流的两种方式
        resp.getWriter().write("hi..");//只能写文本,不能响应对象
        resp.getWriter().print("hello");//写文本和对象都可以

        //字节输出流,不与字符输出流共存,要转换  (少用)
//        resp.getOutputStream().write("hi".getBytes());

设置响应头

6.2响应乱码问题

      

 原因:

解决办法:

@WebServlet("/sr02")
public class Response02 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //设置传输过程中编码格式
        resp.setCharacterEncoding("UTF-8");
        //告诉浏览器编码时候的 编码格式
        resp.setHeader("content-type","text/html;charset=UTF-8");
        //响应中文字符给浏览器
        resp.getWriter().print("你好");
    }
}

总结:以后要想请求和响应都没有乱码问题,写Servlet上来就加入三句代码

//设置请求信息的编码格式
req.setCharacterEncoding("UTF-8");
//设置响应信息的编码格式
resp.setCharacterEncoding("UTF-8");
//设置浏览器的编码格式
resp.setContentType("text/html;charset=UTF-8");

6.3重定向

6.3.1.概念

resp.sendRedirect("xxx");//重定向

 6.3.2.例子

@WebServlet("/rd01")
public class ResponseRedirect03 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //获取前台传过来的参数 请求req
        String uname = req.getParameter("uname");
        System.out.println("uname:"+uname);
        //重定向
        resp.sendRedirect("rd02");
        System.out.println("重定向后打印");
    }
}
@WebServlet("/rd02")
public class ResponseRedirect04 extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //是否接受到重定向的数据
        String uname = req.getParameter("uname");
        System.out.println("重定向:"+uname);
    }
}

 地址栏输入:会跳转到rd2,返回的状态码是302和200;uname并不能传递到rd02

       控制台:

 

 6.3.3.原理:

 

 6.3.4.服务器可以访问外部:比如sendRedict("https://baidu.com"),是成功的:是服务器引导,客户端执行,所以客户端可以响应rd2

6.4请求转发与重定向的区别

 

 

        

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了Servlet的使用

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值