首页 > 编程语言 >javaweb

javaweb

时间:2022-11-22 10:01:11浏览次数:45  
标签:javaweb Servlet jakarta 文件夹 import servlet out

Tomcat

1.下载

  • 1.官网
    https://tomcat.apache.org/
    2.左侧download下选择版本
    3.选择下载的格式
    
  • image-20221113134955254

  • 4.直接解压即可
    

2.配置

  • 1.打开环境变量
    2.打开系统变量的path
    3.新建一个环境变量
    4.将Tomcat包下的bin目录的文件路径添加到刚才新建的环境变量,确定即可
    
  • 1.打开环境变量
    2.在系统变量里面新建一个环境变量
    变量名为CATALINA_HOME
    变量值为Tomcat的文件路径
    
  • image-20221113144211396

  • 1.打开环境变量
    2.在系统变量里面新建一个环境变量
    变量名为JAVA_HOME
    变量值为jdk的文件路径
    
  • image-20221113150802554

3.错误

  • 可能会出现500错误
    解决办法: 找到tomcat目录,右键“属性—>安全—>编辑”,找到Users,将“完全控制”选项“允许”打钩
    

4.第一个webapp

  • 每次新建(删除,修改)都需要重新启动Tomcat服务器
  1. 在Tomcat目录下的webapps下新建一个文件夹(APP的名字)[可以配置一个xml文件让Tomcat查找路径,不必新建到webapps文件夹)]

    1. 拷贝项目的路径

    2. 在Tomcat的conf目录中找到Catlina,找到localhost

    3. 在localhost文件夹下创建一个xml文件(文件名可以自定义,建议与项目名称一致)

    4. 在xml文件配置如下信息

      • <!--
        path为web项目的访问路径
        docBase为web项目的目录路径
        -->
        <Context path="/Test" docBase="E:\Javaweb\Test"></Context>
        
  2. 在新建的文件夹下可以新建其他的文件,比如html,css,java等

  3. 启动Tomcat服务器

  4. 在浏览器输入文件的地址即可(超链接的时候可以省略ip地址和端口号)

5.dos窗口乱码问题

  • 1.在Tomcat文件夹下找到conf文件夹
    2.在conf文件夹下找到logging.properties
    3.在文件里面找到java.util.logging.ConsoleHandler.encoding = UTF-8
    4.将UTF-8改为GBK
    

Servlet基础使用

1.第一个Servlet程序

  • 记事本写的
  1. 在webapps文件夹下新建一个文件夹

  2. 在新建的文件夹下新建一个文件夹(WEB-INF),全大写

    • WEB-INF是规定的且必须的
  3. 在WEB-INF文件夹下新建一个文件夹(classes),全小写

    • classes是规定的且必须的
    • 用来存放编译后的文件
  4. 在WEB-INF文件夹下新建一个文件夹(lib),全小写

    • lib用来存放导入的第三方jar包
    • 不是必须的,但是规范
  5. 在WEB-INF文件夹下新建一个文件夹(web.xml),全小写

    • web.xml是规定的必须的

    • web.xml用来存放配置文件

    • 最好从其他的文件夹下拷贝过来(因为是固定的)

    • <?xml version="1.0" encoding="UTF-8"?>
      <web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee
                            https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
        version="5.0"
        metadata-complete="true">
      </web-app>
      
  6. 编写java程序

    1. 实现servlet接口

      • JakartaEE9开始,servlet的接口名变了,变成 了Jakarta.servlet.Servlet;

      • 实现接口的五个方法

      • 不需要编写main方法,service替代了main方法

      • //代码示例
        //导包
        import jakarta.servlet.Servlet;
        import jakarta.servlet.ServletException;
        import jakarta.servlet.ServletRequest;
        import jakarta.servlet.ServletResponse;
        import jakarta.servlet.ServletConfig;
        import jakarta.IO.IOException;
        //类,实现接口
        public class HelloServlet implements Servlet{
            //五个方法
            public void init(ServeletConfig config) throws ServletException{
        
            }
            public void service(ServletRequest request,ServletResponse response)
                    throws  ServletException, IOException{
                System.out.println("My First Servlet,Hello Servlet");
            }
            public void destroy(){
        
            }
            public String getServletInfo(){
                return "";
            }
            public ServletConfig getServletConfig(){
                return null;
            }
        }
        
    2. 编写的java代码不一定就在刚才新建的文件夹下下面,可以在其他地方编写,编写之后的class文件放在classes文件夹下即可

  7. 编译java文件

    • 需要将Tomcat文件夹下的lib目录下的servlet-api.jar包配置到环境变量

      image-20221115105002624

    • 需要在路径前面加上.;(一个点一个分号)

  8. 将编译后的文件拷贝到WEB-INF文件夹下的classes目录下

  9. 配置xml文件信息

    1. <!--serv描述信息-->
      <servlet>
      	<servlet-name>Test</servlet-name>
      	<!--带有包名的全限定类名-->
      	<servlet-class><!--比如package Demo;--></servlet-class>
      </servlet>
      <!--servlet映射信息-->
      <servlet-mappding>
      	<!--名字,要和上面的name一样-->
      	<servlet-name>Test</servlet-name>
      	<!--路径,以/开始-->
      	<url-pattern>/xxx/xxx/xxx</url-pattern>
      </servlet-mappding>
      
    2.   //代码示例
        //导包
        import jakarta.servlet.Servlet;
        import jakarta.servlet.ServletException;
        import jakarta.servlet.ServletRequest;
        import jakarta.servlet.ServletResponse;
        import jakarta.servlet.ServletConfig;
        import jakarta.IO.IOException;
        
        //配置xml
        直接在类中加上@WebServlet("/路径名")即可
        //要以/开头
            
        //类,实现接口
        public class HelloServlet implements Servlet{
            //五个方法
            public void init(ServeletConfig config) throws ServletException{
        
            }
            public void service(ServletRequest request,ServletResponse response)
                    throws  ServletException, IOException{
                System.out.println("My First Servlet,Hello Servlet");
            }
            public void destroy(){
        
            }
            public String getServletInfo(){
                return "";
            }
            public ServletConfig getServletConfig(){
                return null;
            }
        }
      
  10. 启动Tomcat服务器

  11. 启动浏览器,输入地址

    • <!--webapps下的-->
      http://ip地址:端口/webapps下新建的文件夹名/配置的文件信息中的路径名,
      <!--例-->
      http://localhost:8080/crm/Test
      
      <!--conf配置的xml下的-->
      http://ip地址:端口/path的值/要打开的文件名
      <!--例-->
      http://localhost:8080/Test/Demo
      

2.Servlet编写数据库代码

  • 在service方法中编写jdbc代码即可
  • 连接jar包
  • 修改路径名

3.idea开发servlet

  1. 正常新建项目

  2. 正常新建模块

  3. 让模块变成javaEE的模块

    • 右击模块->选择Add Framework Support..
    • javaEE中选择Web Application
    • 默认为4.0版本和创建一个web.xml文件
    • 默认生成一个web目录(就是项目的名字)
  4. 默认有生成一个index.jsp文件,可以删除可以不删除

  5. 编写Servlet

    1. 实现接口
    2. 将Tomcat文件夹下的lib目录下的servlet-api.jar和jsp-api.jar包添加到模块中
      1. 打开project setting->选择模块
      2. 选择要导入的模块->选择dependentcies
      3. 点击+号,将两个包添加进来
      4. 点击应用,点击OK
    3. 重写五个方法
  6. 在servlet当中的service方法编写代码

    1. 再创建一个类(建议以Servlet结尾命名),继承Http.servlet.http.HttpServlet类(HttpServlet)

      • 能够接收http请求
    2. 重写doPost/doGet方法

      • 能够处理用户不同的请求
  7. 将连接数据库的jar包导入模块

    1. 新建一个lib,全小写
    2. 将jar包放入进来
    3. 添加到模块
  8. 在web.xml文件中配置文件

    1.   <?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>TestServlet</servlet-name>
             <servlet-class>Demo.TestServlet</servlet-class>
         </servlet>
         <servlet-mapping>
             <servlet-name>TestServlet</servlet-name>
             <url-pattern>/Demo/TestServlet</url-pattern>
         </servlet-mapping>
          </web-app>
      
    2.   //代码示例
        //导包
        import jakarta.servlet.Servlet;
        import jakarta.servlet.ServletException;
        import jakarta.servlet.ServletRequest;
        import jakarta.servlet.ServletResponse;
        import jakarta.servlet.ServletConfig;
        import jakarta.IO.IOException;
        
        //配置xml
        @WebServlet("/Demo/TestServlet")
        
        //类,实现接口
        public class HelloServlet implements Servlet{
            //五个方法
        }
      
  9. 关联Tomcat服务器

    1. idea工具右上角,绿色小锤子旁边有一个Add Configuration

    2. 点击进去,左上角加号,点击Tomcat Server->local

    3. 配置server信息

      • image-20221115203336509
    4. 部署Deployment

      • 点击+号,选择第一个(aitifact)
      • image-20221115203544156
  10. 编写html代码(新建在web目录外面)

  •  <!DOCTYPE html>
     <html lang="en">
     <head>
         <meta charset="UTF-8">
         <title>Servlet</title>
     </head>
     <body>
     <a href="/TestServlet/Demo/TestServlet">Servlet Test</a>
     </body>
     </html>
    
  1. 启动Tomcat服务器(绿色小虫子)(debug)

4.HTTP协议

超文本传输协议(HTTP,HyperText Transfer Protocol),是互联网应用最为广泛的一种网络协议.

特点

  1. 基于连接通信:当浏览器与服务器进行通信时,会首先建立网络连接,通过网络连接进行通信

    • 短连接:在HTTP1.0中,浏览器向服务器发送请求,建立连接,但是这个连接只作用于浏览器和服务器的一次请求响应,这次请求响应完成之后则断开连接。

      image-20221120224604619

    • 长连接:在HTTPI.1中,浏览器请求与服务器建立连接、进行请求和响应之后,会等待几秒钟,在这几秒内如果浏览器有新的请求,则直接使用之前的这个连接进行请求和数据响应,如果过了几秒钟没有新的请求,则将连接断开。

      image-20221120224656066

  2. 请求与响应模式:首先由浏览器向服务器发送请求,服务器再对请求进行响应,如果没有浏览器的请求服务器是不会主动向浏览器进行响应的

  3. 无状态:服务器不会感知同一个客户端的多次请求(当服务器接收到客户端请求之后,不能识别这个客户端是否请求的是我)

  4. 简单灵活:可以传输不同类型的数据

5.动态响应网页

  1. 创建一个类

    • //包
      package TrendHttp;
      //类
      public class Book {
      //属性
          private String bookId;
          private String bookName;
          private String bookAuthor;
          private String bookPrice;
      //无参有参get和set方法
      }
      
  2. 创建一个实例类(编写实现代码)

    • package TrendHttp;
      
      import jakarta.servlet.ServletException;
      import jakarta.servlet.annotation.WebServlet;
      import jakarta.servlet.http.HttpServlet;
      import jakarta.servlet.http.HttpServletRequest;
      import jakarta.servlet.http.HttpServletResponse;
      import java.io.IOException;
      import java.io.PrintWriter;
      import java.util.HashMap;
      import java.util.Map;
      
      //配置xml
      @WebServlet("/BookServlet")
      //继承HttpServlet类,千万别导错包,是Jakarta开头的,不是java
      public class BookServlet extends HttpServlet {
          //重写doGet和doPost方法
          @Override
          protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
              //实现doPost方法
              System.out.println("doPost");
          }
          @Override
          protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
              //实现doGet方法
              System.out.println("doGet");
              //动态生成HTML
              //1.接收浏览器请求时传递的图书ID
              String bid = request.getParameter("bookId");
              //2.根据接收到的ID查询图书表(假装是从数据库查询的)
              //2.1创建一个集合用来存储图书数据
              Map<String,Book> bookMap = new HashMap<>();
              //2.2存入一些数据到集合中
              bookMap.put("1001",new Book("1001","Java","张三","99.99"));
              bookMap.put("1002",new Book("1002","C++","李四","88.88"));
              bookMap.put("1003",new Book("1003","Python","王五","77.77"));
              //3.根据接收到的id查询集合中的数据
              Book book = bookMap.get(bid);
              //4.将查询到的数据生成网页,将网页响应给浏览器,通过IO流向浏览器响应一个网页数据
              //4.1设置响应头
              //编码
              response.setCharacterEncoding("utf-8");
              //响应格式
              response.setContentType("text/html");
              //4.2将数据以网页形式响应给浏览器
              //out对象就是用于响应浏览器的IO流,通过这个IO流写出什么数据,浏览器就可以接收到什么数据
              PrintWriter out = response.getWriter();
              //返回什么数据
              out.println("<!DOCTYPE html");
              out.println("<html>");
              out.println("<head><meta charset= utf-8><title>Servlet动态响应网页</title></heda>");
              out.println("<body>");
              //以表格的形式显示
              out.println("<table style='border:2px red solid;width:288px;align='center' border='1' cellspacing='0'>");
              out.println("<tr><th>图书编号</th><th>图书名称</th><th>图书作者</th><th>图书价格</th></tr>");
              out.println("<tr>");
              //动态返回数据
              out.println("<td>"+book.getBookId()+"</td>");
              out.println("<td>"+book.getBookName()+"</td>");
              out.println("<td>"+book.getBookAuthor()+"</td>");
              out.println("<td>"+book.getBookPrice()+"</td>");
              out.println("</tr>");
              out.println("</table>");
              out.println("</body>");
              out.println("</html>");
              //关闭out
              out.close();
          }
      }
      
  3. 浏览器请求访问

    • //1.访问路径
      ip地址:端口/文件路径?访问的键值
      //例
      localhost:8080/BookServlet?bookId=1001
      
    • 效果

      image-20221122093906300

  • [ ]

标签:javaweb,Servlet,jakarta,文件夹,import,servlet,out
From: https://www.cnblogs.com/Myvlog/p/16914194.html

相关文章

  • 今天在学习javaWeb遇到run正常,debug无法启动问题
    问题:项目run正常,debug无法启动首先看控制台报错ERROR:transporterror202:connectfailed:ConnectionrefusedERROR:JDNPTransportdt_socketfailedtoinitialize......
  • JavaWeb笔记
    1.JavaEE项目的三层架构web层                    com.atguigu.web/servlet/controllerservice层         ......
  • JavaWeb学习(五)学号自增设计起始值、优化链接为按钮
    一、NavicatPremium12设置主键自增、起始值  二、优化链接为按钮 <inputtype="button"value="学生"onclick="location.href='S_Deng_lu.jsp'"/> ......
  • JavaWeb踩坑记录
    org.apache.ibatis.binding.BindingException:Parameter'XXXX'notfound.或Thereisnogetterforpropertynamed‘XXX‘in‘classXXX原因分析(首先这个问题......
  • JavaWeb实战:基础CRUD+批量删除+分页+条件
    技术栈及相关参考资料:MyBatis基础Servlet基础ServletRequest和ServletResponseMVC模式和三层架构AJAX基础+Axios基础Vue前端框架Element目录1、需求2、环境准......
  • JavaWeb-06-Servlet
    6.Servlet6.1Servlet简介Servlet就是sun公司开发动态web的一门技术Sun公司在这些API中提供了一个接口叫作:Servlet,如果要开发一个Servlet程序,只需要完成两个步骤:编......
  • javaweb 4、Servlet
    ServletServlet简介Servlet就是sun公司开发动态web的一门技术sun公司在这些API中提供了一个接口叫做:Servlet,如果你想开发一个Servlet程序,只需要完成两个小步骤:编写一......
  • javaweb 5、HttpServletResponse
    HttpServletResponseweb服务器接收到客户端的http请求,针对这个请求,分别创建一个代表请求的HttpServletRequest对象,代表响应的一个HttpServletResponse如果要获取客户端......
  • javaweb 6、HttpServletRequest
    HttpServletRequest代表客户端的请求,用户通过Http协议访问服务器,HTTP请求中所有信息会被封装到HttpServletRequet,通过这个HttpServletRequest的方法,获得客户端的所有信息......
  • 【Javaweb】六-servlet层
    AdminServlet.jap@WebServlet("/AdminServlet")publicclassAdminServletextendsHttpServlet{@Overrideprotectedvoidservice(HttpServletRequestrequ......