Java Web

Web简介

<a href="index1.html">前台发送请求的三种方式</a><br><br><br>
       <a href="index2.html">后台如何接受前台发出的请求---Servlet创建方式</a><br><br><br>
       <a href="index3.html">前台如何发送带有数据的请求</a><br><br><br>
       <a href="index4.html">后台如何接受前台的数据</a><br><br><br>
       <a href="index5.html">实现用户注册基础版</a><br><br><br>
       <a href="index6.html">实现用户注册进阶版</a><br><br><br>

        <p>web项目是存在缓存问题的:好处就是节省流量节省加载时间。</p>
        <p>web项目是存在缓存问题的:坏处就是无法得到理想的正确的结果。</p>
        <p>Web缓存存在的两个地方 : 1.浏览器内部--更多工具--清除浏览数据</p>
        <p>Web缓存存在的两个地方 : 2.idea项目内部的out目录(加载web项目的缓存目录)</p>

java是一门面向对象的编程语言,主要特点是:垃圾回收机制,可以跨平台运行等。
Java的三大特征分别是:封装,继承,多态。

其中Java分为三大体系结构:
A.JavaSE    :  Java的核心基础版,属于Java的核心,例如基本数据类型,String,线程技术等。
B.JavaEE    :  Java的Web服务版,属于Web项目的核心,主要负责搭建网站。
C.JavaME    :  Java的嵌入式版,属于嵌入式的核心,主要负责电子遥控相关产品。(非重点)
不管是JavaEE还是JavaME都是建立在JavaSE的基础之上。

B/S架构和C/S架构


互联网的产品一般分为两大架构,分别是B/S架构和C/S架构。
1. B/S架构:全称为Browser/Server,即浏览器/服务器结构。
主要是做网页端程序设计,只需要安装浏览器即可使用。(我们的主要学习任务)
2. C/S架构:全称为Client/Server,即客户端/服务器架构。
主要是做应用程序设计,需要下载客户端才可以使用。

不管是什么架构,本质都可以利用Java实现,所以不要看C/S架构比B/S架构普遍,就不想学习B/S架构。
B/S架构也是C/S架构的基础。

总结:未来我们都是使用JavaEE技术来实现B/S架构的项目。

服务器


服务器的本质就是一台电脑。
所有的电脑都可以作为服务器存在。
例如:一个项目在谁的电脑上运行。那么,那台电脑就成了一台服务器。但是那台电脑如果关机了,蓝屏了,
就会导致别的用户无法正常访问那个项目。   就称之为“服务器炸了”。

一般来说:一台好的服务器的配置比一般电脑的配置要高很多很多。


如果想利用JavaWeb制作一个网站供客户使用就必须要服务器的支持。


Tomcat服务器是一种运行在服务器(电脑)上的软件,其主要功能是用来提供Web服务

Tomcat是Apache基金会的一个核心项目。
(和Java属于同一个公司)

目前tomcat9.0是最稳定最常用的版本。

只要你的电脑成功安装了JDK,tomcat即可使用。
tomcat默认端口号为8080。(mysql默认端口号3306)
 

如何利用idea创建一个web项目:


1.创建一个基本的普通项目
2.选中这个项目,右键选择add Framework 然后勾选Web Application 选择默认的版本4.0
(注意:idea的版本不同,步骤会有略微的不同)
3.此时就已经创建好了。新的目录简介如下:

src:放java源代码的地方
web:放前台页面的地方(HTML)  初学者常犯的错误:经常把html页面放在web目录下得WEB-INF目录
WEB-INF: web项目的安全目录(用户无法访问的地方。暂做了解)
web.xml: web项目的起点(并不是意味着从这里启动。)    例如设置网址的欢迎界面  默认是index.html
index.jsp就可以删除了。改成index.html页面即可。


启动tomcat服务器。 (因为刚刚已经将项目部署tomcat服务器中)
所以现在只需要启动tomcat服务器 ,你的项目也随之启动

细节1补充:
访问项目的网址是什么:  默认是:localhost:8080/项目名_war_exploded/
如何修改:
首先必须要保证localhost:8080的存在    :  因为8080是端口号  localhost表示本机的ip地址

由于是在本机运行,所以可以用localhost 但是如果想要别人访问,就只能使用你的ip地址

疑问:为什么别的的网址都是www.baidu.com 因为别人购买了一个域名(别名)

细节2补充:解决控制台乱码
file -- setting --  editor -- console  --改成UTF-8

细节3补充:修改项目启动之后的浏览器。默认是ie  一般都使用谷歌浏览器
回到tomcat服务器的配置页面

细节4补充:启动tomcat 提示什么8080还是1099 什么报错   (表示端口被占用了。之前的tomcat没正常的关闭。)
解决办法:1.重启电脑   2.修改端口号   3.主要解决方式:打开任务管理器,找到进程 用户  找到java.exe关闭即可。

细节5补充:web.xml   web项目项目的起点,可以修改项目运行的起始页面等等。
例如:我的网页只有login.html  和reg.html  只有登录注册
如果没有在web.xml文件中 指明欢迎页面 默认在web目录下 找index页面
如果index都找不到 就出现404错误(404表示资源找不到。思考 路径是不是写错的)

如何设置web.xml的欢迎界面

只需要在web.xml中 添加以下代码

   <welcome-file-list>
        <welcome-file>Xxxx.html</welcome-file>
    </welcome-file-list>

以上重中之重。
疑问:我可以保证我的项目内部存在index.html页面来作为首页,  是不是可以不用掌握上面的这个知识点呢?

答:万万不行    原因:  以下场景:淘宝首页: 项目一启动(访问淘宝首页),就显示很多很多商品
这些商品的数据都是从数据库查询而来把。  想要去数据库查,就肯定需要用到java代码。
流程:项目一启动---访问java---访问数据库---获取到数据将数据还给html页面

一个web项目最基本的package结构:

    com.yyzy.
        entity  :存放数据库表的对应的实体类
        test    :存放测试的
        util    :存放工具类(可以复用的类。比如数据加密,JDBCUtil)
        dao     :存放和数据库交互的代码
        servlet :专门和html交互的java代码


项目的流程:   用户访问html页面  --  用户操作页面    ---   发送给servlet    ---  dao   ---   servlet  ---  html
servlet承担一个桥梁的作用:负责Java和html进行交互。


web项目如何导入jar包
1.在web-inf目录下手动创建一个lib文件夹(存放jar包: 什么是jar包:封装了Java的额外功能的包)
2.将相关的jar包丢进去
3.选中jar包   add as  library
 

前台发送请求的放式

<p>前台发送请求的方式1:通过超链接</p>
    <a href="http://www.baidu.com">指向互联网资源</a>
    <a href="index.html">指向项目内部的页面资源</a>
    <a href="/xxx">指向项目内部的Java资源</a>

    <hr>
    <p>前台发送请求的方式2:通过JS</p>
    <button id="btn">点击按钮发送一个请求</button>

    <hr>
    <p>前台发送请求的方式3:通过表单</p>
    <form action="index.html" method="post">
        账号:<input type="text" name="username"><br>
        <input type="submit" value="提交">
    </form>


    <script>
        document.getElementById("btn").onclick = function (){
            location.href = "index.html";//本质依然是超链接
        }
    </script>

后台如何获取前台发来的请求

<p>后台如何获取前台发来的请求</p>
        <p>答:通过tomcat提供的Servlet类来实现</p>
        <p>什么是Servlet:处理前台请求的一个类</p>
        <p>如何去创建Servlet:</p>
        <p>1.导入jar包---servet-api.jar  在tomcat的lib目录里面</p>
        <p>2.在servlet的包下创建一个Servlet的类</p>
        <p>2.1 Servlet的命名规范: XxxServlet  其中Xxx表示什么功能的Servlet </p>
        <p>3.继承HttpServlet</p>
        <p>4.重写父类的service方法,然后把默认的super删除</p>
        <p>5.在类上添加@WebServlet("/Xxx") 注解。表示前台通过什么请求路径访问该类,一般和类名同名</p>

        <p>测试如下Servlet</p>
        <a href="/TestServlet">通过超链接访问Servlet</a>
        <button id="btn">通过JS访问Servlet</button>

    <script>
        document.getElementById("btn").onclick = function (){
            location.href = "/TestServlet";
        }
    </script>

前台发送携带数据的请求的方式

<p>前台发送携带数据的请求的方式1:通过超链接</p>
<p>语法如下:在URL地址的后面加上?key=value&key=value&key=value的形式即可</p>
<p>注意事项:都是英文状态下的符号,如果含有中文的内容 也无需加引号</p>
<a href="index.html?id=123&name=张三">指向互联网资源</a>

<hr>
<p>前台发送携带数据的请求的方式1:通过JS</p>
<button id="btn">点击按钮发送一个请求</button>

<hr>
<p>前台发送请求的方式3:通过表单</p>
<p>注意事项:内部的表达元素都要加上name来修饰。因为后台都是通过name来获取值</p>
<p>注意事项:单选框:加上若干个相同的name即可,记得补充value</p>
<p>注意事项:多选框:加上若干个相同的name即可,记得补充value</p>
<p>注意事项:下拉框:内部的option的value值可以省略的,但是你要知道,如果省略了以option标签的内部为准。如果没省略就以value为准</p>

<form action="/RegServlet" method="post">
    账号:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    性别:
    <input type="radio" name="sex" value="男" checked >男
    <input type="radio" name="sex" value="女"  >女<br>
    爱好:
    <input type="checkbox" name="likes" value="吃">吃
    <input type="checkbox" name="likes" value="喝">喝
    <input type="checkbox" name="likes" value="玩">玩
    <input type="checkbox" name="likes" value="乐">乐
    <br>
    地址:
    <select name="address">
        <option>湖南</option>
        <option value="123广东~">广东</option>
        <option>云南</option>
    </select> <br>
    自我介绍:
    <textarea name="jieshao">自我介绍:</textarea>
    <br>
    生日:<input type="date" name="birthday"><br>
    <input type="submit" value="提交">
</form>


<script>
    document.getElementById("btn").onclick = function (){
        location.href = "index.html?id=456";//本质依然是超链接
    }
</script>

后台接受数据的方式

<p>后台接受数据的方式:详情见RegServlet</p>

<form action="/RegServlet" method="post">
    账号:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    性别:
    <input type="radio" name="sex" value="男" checked >男
    <input type="radio" name="sex" value="女"  >女<br>
    爱好:
    <input type="checkbox" name="likes" value="吃">吃
    <input type="checkbox" name="likes" value="喝">喝
    <input type="checkbox" name="likes" value="玩">玩
    <input type="checkbox" name="likes" value="乐">乐
    <br>
    地址:
    <select name="address">
        <option>湖南</option>
        <option value="123广东~">广东</option>
        <option>云南</option>
    </select> <br>
    自我介绍:
    <textarea name="jieshao">自我介绍:</textarea>
    <br>
    生日:<input type="date" name="birthday"><br>
    <input type="submit" value="提交">
</form>


<script>

</script>

<form action="/RegServlet" method="post">
    账号:<input type="text" name="username"><br>
    密码:<input type="password" name="password"><br>
    性别:
    <input type="radio" name="sex" value="男" checked >男
    <input type="radio" name="sex" value="女"  >女<br>
    爱好:
    <input type="checkbox" name="likes" value="吃">吃
    <input type="checkbox" name="likes" value="喝">喝
    <input type="checkbox" name="likes" value="玩">玩
    <input type="checkbox" name="likes" value="乐">乐
    <br>
    地址:
    <select name="address">
        <option>湖南</option>
        <option value="123广东~">广东</option>
        <option>云南</option>
    </select> <br>
    自我介绍:
    <textarea name="jieshao">自我介绍:</textarea>
    <br>
    生日:<input type="date" name="birthday"><br>
    <input type="submit" value="提交">
</form>


<script>

</script>

乱码的补充

需要修改的地方:
1. 修改tomcat的conf文件夹的logging.properties文件 将下面这行改成GBK
  #java.util.logging.ConsoleHandler.encoding = GBK  默认是UTF-8

2.File-setting-console编码改成GBK

3.File-setting-FileEncoding 三个地方改成UTF-8

package com.yyzy.dao;

public class UserInfoDao {



    //注册用户
    public   boolean regUserinfo(Userinfo userinfo){
        String sql = "insert into userinfo values(null,?,?,?,?,?,?,?)";
        Connection conn = JDBCUtil.getConn();
        try {
            PreparedStatement pre = conn.prepareStatement(sql);
            pre.setString(1,userinfo.getUsername());
            pre.setString(2,userinfo.getPassword());
            pre.setString(3,userinfo.getSex());
            pre.setString(4,userinfo.getLikes());
            pre.setString(5,userinfo.getAddress());
            pre.setString(6,userinfo.getJieshao());
            pre.setString(7,userinfo.getBirthday());
            int i = pre.executeUpdate();
            if (i == 1) {
                return true;
            }else{
                return false;
            }
        } catch (SQLException e) {
            System.out.println("解析sql语句失败" + e);
            return false;
        }
    }


}

package com.yyzy.entity;

public class Userinfo {
    private Integer id;
    private String username;
    private String password;
    private String sex;
    private String likes;
    private String address;
    private String jieshao;
    private String birthday;

    public Userinfo() {
    }

    public Userinfo(Integer id, String username, String password, String sex, String likes, String address, String jieshao, String birthday) {
        this.id = id;
        this.username = username;
        this.password = password;
        this.sex = sex;
        this.likes = likes;
        this.address = address;
        this.jieshao = jieshao;
        this.birthday = birthday;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public String getSex() {
        return sex;
    }

    public void setSex(String sex) {
        this.sex = sex;
    }

    public String getLikes() {
        return likes;
    }

    public void setLikes(String likes) {
        this.likes = likes;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getJieshao() {
        return jieshao;
    }

    public void setJieshao(String jieshao) {
        this.jieshao = jieshao;
    }

    public String getBirthday() {
        return birthday;
    }

    public void setBirthday(String birthday) {
        this.birthday = birthday;
    }

    @Override
    public String toString() {
        return "Userinfo{" +
                "id=" + id +
                ", username='" + username + '\'' +
                ", password='" + password + '\'' +
                ", sex='" + sex + '\'' +
                ", likes='" + likes + '\'' +
                ", address='" + address + '\'' +
                ", jieshao='" + jieshao + '\'' +
                ", birthday='" + birthday + '\'' +
                '}';
    }
}

package com.yyzy.servlet;

RegServlet

@WebServlet("/RegServlet")
public class RegServlet extends HttpServlet {
    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //接受数据的流程:
        //1.设置编码
        req.setCharacterEncoding("utf-8");

        //收集单独独立的数据,例如账号密码性别年龄生日自我介绍等等
        //xxx表示前台的参数名是什么  接受返回值全是String  需要自行转换
//        String xxx = req.getParameter("xxx");

        //收集多个数据:例如爱好  需要遍历 来一一取值
//        String[] xxx = req.getParameterValues("xxx");

        String username = req.getParameter("username");
        System.out.println("账号为" + username);
        String password = req.getParameter("password");
        System.out.println("密码为" + password);

        String sex = req.getParameter("sex");
        System.out.println("sex为" + sex);
        String[] likes = req.getParameterValues("likes");
        String l = "";
        for (int i = 0;i<likes.length;i++){
            if(i==likes.length-1){
                l = l + likes[i] ;
            }else{
                l = l + likes[i] + ",";
            }
        }

        String birthday = req.getParameter("birthday");
        System.out.println("birthday为" + birthday);

        String address = req.getParameter("address");
        System.out.println("address为" + address);
        String jieshao = req.getParameter("jieshao");
        System.out.println("jieshao为" + jieshao);

        UserInfoDao ud = new UserInfoDao();
        Userinfo userinfo = new Userinfo(null,username,password,sex , l ,address,jieshao,birthday);

        boolean b = ud.regUserinfo(userinfo);
        System.out.println(b);
    }
}

TestServlet

@WebServlet("/TestServlet")
public class TestServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        System.out.println("访问成功");
    }
}

package com.yyzy.test;

public class Test {


    public static void main(String[] args) {
//        Connection conn = JDBCUtil.getConn();
//        System.out.println(conn);
        UserInfoDao ud = new UserInfoDao();
        Userinfo userinfo = new Userinfo(null,"张三","1234","男" , "吃,玩","广东","我是牛吗","19999-1-1");

        boolean b = ud.regUserinfo(userinfo);
        System.out.println(b);

    }
}

package com.yyzy.util;

//工具类。生成Connetion链接供dao包下的类使用
public class JDBCUtil {

    /*
        1.静态化加载驱动
        2.声明一个可以返回COnnetion链接静态方法供dao去使用
    */

    static {
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("加载mysql驱动失败" + e);
        }
    }

    public static Connection getConn(){
        try {
            Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db1", "root", "root");
            return connection;
        } catch (SQLException e) {
            System.out.println("获取链接失败" + e);
            return  null;
        }

    }



}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值