初识JavaWeb

5 篇文章 0 订阅
2 篇文章 0 订阅

初识JavaWeb

1.Tomcat

Tomcat 技术先进、性能稳定,而且免费,因而深受Java 爱好者的喜爱并得到了部分软件开发商的认可,成为目前比较流行的***Web 应用服务器。***

本地url请求过程

在这里插入图片描述

目录结构

在这里插入图片描述

bin目录下为一些可执行文件等等

webapps为存放网站的文件

网站的基本结构

在这里插入图片描述

2.Maven

Maven提供高级项目管理工具。由于 Maven 的缺省构建规则有较高的可重用性,所以常常用两三行 Maven 构建脚本就可以构建简单的项目。

目录结构

在这里插入图片描述

maven_repo为架包

阿里云镜像的配置

    <mirror>
      <id>alimaven</id>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
      <mirrorOf>central</mirrorOf>        
    </mirror>

3.Tomcat和Maven的下载

官网下载

4.IDEA中的创建Maven与配置Tomcat

5.HelloWorld

pom.xml配置

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>com</artifactId>
  <version>1.0-SNAPSHOT</version>
  <modules>
    <module>com.csn.serverlet</module>
  </modules>
  <packaging>pom</packaging>

  <name>com Maven Webapp</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.7</maven.compiler.source>
    <maven.compiler.target>1.7</maven.compiler.target>
  </properties>

  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>javax.servlet</groupId>
      <artifactId>javax.servlet-api</artifactId>
      <version>3.1.0</version>
    </dependency>

    <dependency>
      <groupId>javax.servlet.jsp</groupId>
      <artifactId>javax.servlet.jsp-api</artifactId>
      <version>2.3.3</version>
    </dependency>
  </dependencies>
</project>

dependencies中放的很多的dependency都是架包,可以在maven官网上搜索导入

在main目录下创建java和resources文件夹

创建helloworld.java

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

public class helloWorld extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<head>");
        out.println("<title>Hello CSN!</title>");
        out.println("</head>");
        out.println("<body>");
        out.println("<h1>Hello CSN!</h1>");
        out.println("</body>");
        out.println("</html>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

注意此时已经jsp和servlet架包已经导入maven

配置web.xml

配置xml实现从web服务器到java文件的映射

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<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"
         metadata-complete="true">

  <display-name>Welcome to Tomcat</display-name>
  <description>
    Welcome to Tomcat
  </description>
  <servlet>
    <servlet-name>CSNTEST</servlet-name>
    <servlet-class>helloWorld</servlet-class>//这里是关键,指向目标java文件
  </servlet>
  <servlet-mapping>
    <servlet-name>CSNTEST</servlet-name>
    <url-pattern>/hellocsn2</url-pattern>//这里是路由地址,即浏览器访问的url地址
  </servlet-mapping>

</web-app>

6.pom.xml的继承

我们可以在根目录下创建一个新的maven项目,此时maven继承于父maven,各种架包无需重复导入,大大提升开发效率

在这里插入图片描述

7.ServletContext

ServletContext官方叫servlet上下文。服务器会为每一个工程创建一个对象,这个对象就是ServletContext对象。这个对象全局唯一,而且工程内部的所有servlet都共享这个对象。所以叫***全局应用程序共享对象。***

在这里插入图片描述

1.共享数据

在一个servlet中保存数据,可以在另一个servlet中获取

存数据

package com.csn.servelet;

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

public class servletDemo04_1 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context=this.getServletContext();
        context.setAttribute("username","小陈");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");

        resp.getWriter().print("<h1>设置字段成功</h1>");
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

取数据

package com.csn.servelet;

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

public class servletDemo04 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context=this.getServletContext();
        String username=(String)context.getAttribute("username");

        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");

        resp.getWriter().print("名字:"+username);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

2.获得初始化参数

在web.xml中定义初始化参数

<?xml version="1.0" encoding="UTF-8"?>
<!--
 Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<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"
         metadata-complete="true">
  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/myhabits</param-value>
  </context-param>


</web-app>

读数据

package com.csn.servelet;

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

public class servletContext extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context=this.getServletContext();
        String url=context.getInitParameter("url");
        resp.setContentType("text/html");
        resp.setCharacterEncoding("utf-8");
        resp.getWriter().print(url);
    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

3.请求转发

不同于重定位

package com.csn.servelet;

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

public class servletDemo03 extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        ServletContext context=this.getServletContext();
        context.getRequestDispatcher("/servletcontext").forward(req,resp);

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

4.读取资源文件

在resource下建立一个db.properties文件,里面写上信息

然后将其读出

package com.csn.servelet;

import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

public class servletDemo05 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream is =this.getServletContext().getResourceAsStream("/WEB-INF/classes/db.properties");
        Properties prop=new Properties();
        prop.load(is);
        String  username=prop.getProperty("username");
        String  pwd=prop.getProperty("pwd");
        resp.getWriter().print(username+":"+pwd);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

在java目录下建立一个db.properties文件,里面写上信息

然后将其读出

需要注意如果直接点生成,java文件夹中的properties的文件会被过滤掉

因此需要在子pom.xml中配置


    <build>
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>true</filtering>
            </resource>
        </resources>
    </build>

此时在执行后就会在tatget的java目录下生成properties文件

然后再通过servlet访问

package com.csn.servelet;

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

public class servletDemo06  extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        InputStream is =this.getServletContext().getResourceAsStream("/WEB-INF/classes/com/csn/servelet/db.properties");
        Properties prop=new Properties();
        prop.load(is);
        String  username=prop.getProperty("username");
        String  pwd=prop.getProperty("pwd");
        resp.getWriter().print(username+":"+pwd);
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req, resp);
    }
}

此外需要注意的是以上的servlet都需要在web.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"
         metadata-complete="true">
  <context-param>
    <param-name>url</param-name>
    <param-value>jdbc:mysql://localhost:3306/myhabits</param-value>
  </context-param>

  <servlet>
    <servlet-name>helloworld</servlet-name>
    <servlet-class>com.csn.servelet.helloworld</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>helloworld</servlet-name>
    <url-pattern>/hellocsn</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>servletcontext</servlet-name>
    <servlet-class>com.csn.servelet.servletContext</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servletcontext</servlet-name>
    <url-pattern>/servletcontext</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>servledemp03</servlet-name>
    <servlet-class>com.csn.servelet.servletDemo03</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servledemp03</servlet-name>
    <url-pattern>/servledemp03</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>servledemp041</servlet-name>
    <servlet-class>com.csn.servelet.servletDemo04_1</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servledemp041</servlet-name>
    <url-pattern>/Startservledemp04</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>servledemp04</servlet-name>
    <servlet-class>com.csn.servelet.servletDemo04</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servledemp04</servlet-name>
    <url-pattern>/Runservledemp04</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>servledemp05</servlet-name>
    <servlet-class>com.csn.servelet.servletDemo05</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servledemp05</servlet-name>
    <url-pattern>/servledemp05</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>servledemp06</servlet-name>
    <servlet-class>com.csn.servelet.servletDemo06</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servledemp06</servlet-name>
    <url-pattern>/servledemp06</url-pattern>
  </servlet-mapping>
</web-app>

8.Response

在这里插入图片描述

重定向:url会发生改变

转发:url不会发生改变

9.HttpServletRequest

将前端请求的信息都封装到这个类里面,通过调用类来获得信息

10.Cookie

11.Session

12.JSP

错误页面设置

  <error-page>
      <error-code>500</error-code>
      <location>/common/error.jsp</location>
  </error-page>

导入别的页面

<html>
    <body>
    <h2>Hello World!</h2>
         <%@include file="common/header.jsp"%>
         <jsp:include page="/common/header.jsp"/>/*建议使用*/
    </body>
</html>

13.JSTL

14.JavaBean

必须有无参构造

属性必须私有化

必须有对应的get/set方法

一般用来的和数据库的字段做映射ORM

ORM对象关系映射

表对应类

字段对应属性

表记录对应对象

15.三层架构MVC

Model:

业务处理:业务层

数据持久层CURD

View

展示数据

提供发起servlet请求

Controller

接受用户请求

交给业务层处理对应代码

控制视图跳转

早期:

在这里插入图片描述
用户直接访问控制器,控制器直接访问数据库

架构:没有什么是加一层是解决不了的

MVC
在这里插入图片描述

16.Fliter

过滤器:过滤网站的数据:

  • 解决乱码
  • 登陆验证

在这里插入图片描述

其实和servlet一样

1.导包不要导错

package com.csn.Fliter;

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

public class EncodingFliter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {

    }

    @Override
    public void destroy() {

    }
}

2.编辑过滤层

package com.csn.Fliter;

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

public class EncodingFliter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("EncodingFliter启动");
    }

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        response.setCharacterEncoding("utf-8");
        request.setCharacterEncoding("utf-8");

        chain.doFilter(request,response);//必须得要加的东西
    }

    @Override
    public void destroy() {
        System.out.println("EncodingFliter关闭");
    }
}

3.设置mapping

  <servlet>
    <servlet-name>testFilter</servlet-name>
    <servlet-class>com.csn.servelet.TestFilter</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>testFilter</servlet-name>
    <url-pattern>/show</url-pattern>
  </servlet-mapping>

  <servlet>
    <servlet-name>testFilter2</servlet-name>
    <servlet-class>com.csn.servelet.TestFilter</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>testFilter2</servlet-name>
    <url-pattern>/Filter/show</url-pattern>
  </servlet-mapping>

  <filter>
    <filter-name>filter</filter-name>
    <filter-class>com.csn.Fliter.EncodingFliter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>filter</filter-name>
    <url-pattern>/Filter/*</url-pattern>
  </filter-mapping>

17.基于Filter的权限管理

1.用户登记之后,向session中向放入用户的数据

package com.csn.Fliter;

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

public class LoginServelt extends HttpServlet {
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String username=req.getParameter("username");
        if(username.equals("admin")){
            req.getSession().setAttribute("USER_SESSION",req.getSession().getId());
            resp.sendRedirect("/sys/success.jsp");
        }else {
            resp.sendRedirect("/error.jsp");
        }

    }

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }
}

2.利用Filter过滤器实现进主页的时候要判断用户是否已经登陆

package com.csn.Fliter;

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

public class sysFilter  implements  Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {

    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request=(HttpServletRequest)req;
        HttpServletResponse response=(HttpServletResponse)resp;

        if(request.getSession().getAttribute("USER_SESSION")==null){
            response.sendRedirect("/error.jsp");
        }
        chain.doFilter(request,response);
    }

    @Override
    public void destroy() {

    }
}

配置mapping

  <filter>
    <filter-name>sysfilter</filter-name>
    <filter-class>com.csn.Fliter.sysFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sysfilter</filter-name>
    <url-pattern>/sys/*</url-pattern>
  </filter-mapping>

18.JDBC

1.加载驱动

2.连接数据库

3.向数据库发送SQL的对象statement:CURD

4.编写sql语言

5.执行SQL语言

6.关闭连接

开启事务:

connection.setAutoCommit(false

很重要!!!

19.单元测试

配置

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>

使用

package com.csn.jdbc;

import org.junit.Test;

public class test {
    @Test
    public void test(){
        System.out.println("hello");
    }
}

est,response);
}

@Override
public void destroy() {

}

}


配置mapping

```java
  <filter>
    <filter-name>sysfilter</filter-name>
    <filter-class>com.csn.Fliter.sysFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>sysfilter</filter-name>
    <url-pattern>/sys/*</url-pattern>
  </filter-mapping>

18.JDBC

1.加载驱动

2.连接数据库

3.向数据库发送SQL的对象statement:CURD

4.编写sql语言

5.执行SQL语言

6.关闭连接

开启事务:

connection.setAutoCommit(false

很重要!!!

19.单元测试

配置

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>

使用

package com.csn.jdbc;

import org.junit.Test;

public class test {
    @Test
    public void test(){
        System.out.println("hello");
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值