Javaweb-servlet

maven资源配置问题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Gxp47xXz-1669114925848)(C:\Users\MU\Desktop\笔记\maven静态资源配置问题.jpg)]

<!--静态资源导出问题,在bulid中配置resource,来防止我们的资源导出失败的问题    -->
    <build>
        <resources>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>
    </build>

javaweb-Servlet

##serletContext

1.共享数据

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dFMumVCZ-1669114925850)(C:\Users\MU\Desktop\笔记\servletcontext.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lKQ2aptt-1669114925851)(C:\Users\MU\Desktop\笔记\读取servletcontext.jpg)]

2.读取资源文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-280JViTj-1669114925852)(C:\Users\MU\Desktop\笔记\sevletcontext读取资源文件.jpg)]

Properties

  • 在Java目录下新建properties
  • 在resources目录下新建properties
  • 发现:都被打包到了同一个路径下:classes,俗称class path。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aSl8LyFM-1669114925853)(C:\Users\MU\Desktop\笔记\读取资源文件.jpg)]

response下载文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4TTbX81E-1669114925854)(C:\Users\MU\Desktop\笔记\response下载文件.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9H7DDFCO-1669114925855)(C:\Users\MU\Desktop\笔记\respose下载文件.jpg)]

Response验证码的实现

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //每三秒就刷新网页
        resp.setHeader("refresh","3");
        //给内存设置一个图片
        BufferedImage image=new BufferedImage(80,20,BufferedImage.TYPE_INT_RGB);
        //得到图片
        Graphics2D  g=(Graphics2D) image.getGraphics();//画笔
        //设置背景颜色
        g.setColor(Color.white);
        g.fillRect(0,0,80,20);
        //给图片写数据
        g.setColor(Color.black);
        g.setFont(new Font(null,Font.BOLD,20));
        g.drawString(makenum(),0,20);
        //告诉浏览器这个请求用图片打开
        resp.setContentType("image/jpeg");
        //让网站缓存,不让浏览器缓存
        resp.setDateHeader("expires",-1);
        resp.setHeader("Cache-Control ","no-cache");
        //把图片写给浏览器
        boolean wrete= ImageIO.write(image,"jpg",resp.getOutputStream());
    }
    //生成随机数
    private String makenum(){
        Random random=new Random();
        String num=random.nextInt(9999999)+"";
        StringBuffer sb=new StringBuffer();
        for (int i = 0; i <7-num.length() ; i++) {
            sb.append("0");
        }
        num=sb.toString()+num;
        return  num;
    }

Reaponse重定向&转发

重定向:

  • 实现页面跳转,url地址栏会发生变化 resp.sendRedirect(“/response_war/img”); //重定向

转发:

  • 实现页面跳转,url地址栏不会发送变化 req.getRequestDispatcher(“/success.jsp”).forward(req, resp);

与转发的区别

  • 相同点 都会实现页面跳转
  • 不同点 转发url地址栏不会发生变化,重定向会发生变化

Request应用

HttpServletRequest代表客户端的请求,用户通过http协议访问服务器,http请求中的所有信息被封装到httpservletrequest,通过这个HttpServletRequest方法获得客户端的所有信息

1.获取前端数据的方法

  • req.getParameter()
  • req.getParametervalue()

cookie

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MzkuhTid-1669114925855)(C:\Users\MU\Desktop\笔记\cookie.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1aj46TpH-1669114925855)(C:\Users\MU\Desktop\笔记\编码解码(网络编程.jpg)]

Session(重点)

Session:服务器会给每一个用户(浏览器)创建一个Session对象;一个Session独占一个浏览器,只要浏览器没关闭,这个Session就存在。

解决乱码问题

 //解决乱码问题
        req.setCharacterEncoding("UTF-8");
        resp.setCharacterEncoding("UTF-8");
        resp.setContentType("text/html;charset=UTF-8");
        //得到Session
        HttpSession session=req.getSession();
        //给session存东西
        session.setAttribute("name","hello");
        //获取session   id
        String id=session.getId();
        //判断session是否新建
        if(session.isNew()){
            resp.getWriter().write("创建成功,ID为:"+id);
        }else {
            resp.getWriter().write("已经存在,ID为:"+id);
        }
        //获得session存的信息
        System.out.println((String)session.getAttribute("name"));

Session和Cookie的区别:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9kJxxXVx-1669114925856)(C:\Users\MU\Desktop\笔记\session和cookie区别.jpg)]

会话自动过期:在web.xml配置

<session-config>
  <session-timeout>分钟</session-timeout>
  </session-config>

javaweb-jsp

什么是jsp

  1. Java服务器端页面,和servlet一样,用于动态web技术
  2. 本质上就是一个servlet

jsp原理

  1. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UD9d3tNp-1669114925856)(C:\Users\MU\Desktop\笔记\jsp工作流程.jpg)]

  2. 在jsp页面中:只要是Java代码就会原封不动的输出;如果是HTML代码,就会转换为out.write(“\r\n”);这样的样子

jsp基础语法

<%--jsp表达式%>
<%=变量或者表达式%>
jsp脚本片段
<%  写一段Java代码(可嵌套html代码)  %>
<%  for(int i=0;i<5;i++){
    %>
<hr>hello</hr>
<% }  %>


//jsp声明
<%!   %>   如同全局变量

jsp动/静态包含

(静态包含)
<%include file="要包含的文件路径"%>

(动态包含)
<jsp:include page="要包含的资源的路径"><</jsp:include>

jsp内置对象

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RPNersCr-1669114925857)(C:\Users\MU\Desktop\笔记\jsp内置对象.jpg)]

jsp作用域

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-bR1OipkG-1669114925857)(C:\Users\MU\Desktop\笔记\jsp作用域.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tQHkEiOj-1669114925858)(C:\Users\MU\Desktop\笔记\jsp作用域2.jpg)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kjRZNsVV-1669114925858)(C:\Users\MU\Desktop\笔记\jsp属性范围特点.jpg)]

jsp标签、jstl标签、EL表达式

 <!-- https://mvnrepository.com/artifact/taglibs/standard -->
    <dependency>
      <groupId>taglibs</groupId>
      <artifactId>standard</artifactId>
      <version>1.1.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/javax.servlet.jsp.jstl/jstl-api -->
    <dependency>
      <groupId>javax.servlet.jsp.jstl</groupId>
      <artifactId>jstl-api</artifactId>
      <version>1.2</version>
    </dependency>

EL表达式 ${ }

需要依赖的包

<%@page isELIgnored=“false” %> 开启EL

作用:

  • 获取数据
  • 执行运算
  • 获取web开发的常用对象

jsp标签

  • <jsp:forward page="文件路径">
         <jsp:param name=""  value="">   </jsp:param>//传递参数</jsp:forward>//请求转发
    //获取参数
    <%= request.getParameter("name")%>
    <%= request.getParameter("value")%>
    

jstl表达式

  • 作用:弥补HTML 标签的不足;自定义了许多标签供我们使用,标签的功能和Java代码一样
  • 核心标签:核心标签是最常用的 JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W71hzD1A-1669114925858)(C:\Users\MU\Desktop\笔记\jstl核心标签.jpg)]

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@page isELIgnored="false" %>
<form action="jstl-1.jsp" method="get">
    <%--
        EL表达式获取表单中的数据
        ${param.参数名}
    --%>
    <input type="text" name="username" value="${param.username}">
    <input type="submit" value="登录">
    <%--判断提交的用户名--%>
        <c:out value="${param.username}"></c:out>
    <c:if test="${param.username == 's'}" var="isme">
        <c:out value="终于等到你"></c:out>
    </c:if>
        <c:out value="${isme}"></c:out>
</form>

javaBean

实体类

JavaBean的特定写法:

  • 必须有一个无参构造
  • 属性必须私有化
  • 必须有对应的get/set方法

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

ORM:对象关系映射

  • 表–>类
  • 字段–>属性
  • 行记录–>对象[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ztpl9pLf-1669114925859)(C:\Users\MU\Desktop\笔记\javabean.jpg)]

MVC三层架构

什么是mvc

Model view Controller 模型视图控制器[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QhhUYkZQ-1669114925859)(C:\Users\MU\Desktop\笔记\mvc三层架构.jpg)]

1、model

  • 业务处理:业务逻辑
  • 数据持久层:CRUD

2、View

  • 展示数据
  • 提供链接发起servlet请求

3、controller(servlet)

  • 接受用户的请求
  • 交给业务层处理对用的代码
  • 控制视图的跳转

过滤器Filter

Filter:用来过滤网站的数据[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UN4fIVY5-1669114925859)(C:\Users\MU\Desktop\笔记\过滤器.jpg)]

编写过滤器

public class encordingfilter implements Filter {
    //初始化,web服务器启动就已经初始化了,随时等待过滤对象
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("初始化");
    }
    /*
    1、过滤中的所有代码在过滤特定请求时都会执行
    2、必须让过滤器继续通行
     */
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
           servletRequest.setCharacterEncoding("UTF-8");
           servletResponse.setCharacterEncoding("UTF-8");
           servletResponse.setContentType("text/html;charset=UTF-8");
        System.out.println("filter执行前");
        filterChain.doFilter(servletRequest,servletResponse);//让我们的请求继续走,若不写程序就会被拦截
        System.out.println("filter执行后");
    }
    //销毁,web服务器关闭就销毁过滤器
    public void destroy() {
        System.out.println("销毁了");
    }

在web.xml中配置filter

  <filter>
    <filter-name>encordingfilter</filter-name>
    <filter-class>com.filter.encordingfilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>encordingfilter</filter-name>
    <url-pattern>/servlet/*</url-pattern>
  </filter-mapping>

Filter实现全线拦截


#JDBC

JDBC

Java操作数据库的规范:俗称JDBC

JDBC所需要的包:

  • java.sql
  • javax.sql
  • mysql-connerctor-java-…(连接驱动)

使用

1.加载驱动

2.连接数据库

3.向数据库发送sql的对象Statement:CRUD

4.编写sql

5.执行sql

6.关闭连接

    public static void main(String[] args) throws SQLException, ClassNotFoundException {
        String url="jdbc:mysql://localhost:3306/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false";
        String username="root";
        String password="123456";
        //1.加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        System.out.println("加载驱动成功!");
        //2.连接数据库
        Connection connection= DriverManager.getConnection(url,username,password);
        //向数据库发送sql的对象Statemant:CRUD
        Statement statement=connection.createStatement();
        //编写sql
        String sql="select * from smbms_user";
        //执行sql,返回查询结果
        ResultSet resultSet = statement.executeQuery(sql);
        while (resultSet.next()){
            System.out.println("id"+resultSet.getObject("id"));
        }
        //关闭连接,释放资源
        resultSet.close();
        statement.close();
        connection.close();

    }

事务

ACID原则:保证数据的安全。

开启事务
事务提交	commit()
事务回滚	rollback()
关闭事务   	

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-y37gTA9l-1669114925860)(C:\Users\MU\Desktop\笔记\JDBC.jpg)]

junit单元测试

	<dependency>
            <groupId>junit</groupId>           <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>

简单使用

@Test注解只有在方法上有效,只要加了这个注解的方法,就可以直接运行

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

smbms项目实战

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值