day11_web应用构建
day11_web应用构建
1业务程序代码 web应用程序中(javaEE web application)
web项目结构 构建工具 maven web应用中怎么写代码
2专用的web服务器中运行 tomcat(免费 稳定)
tomcat如何部署运行 如何与web应用代码结合 如果与idea集成 方便测试
1web项目结构
1web项目目录结构 与基础java项目不同 多了存放web相关资源的目录
2web项目打包结构 war包 里边有web资源 和 java的classes文件
2项目管理工具 maven
maven有统一的项目目录结构 开发 测试 部署环节有辅助功能
maven通过命令 统一编译 集成junit统一测试 通过命令打包
maven 统一jar包管理
2.1maven配置
配置本地仓库路径
<!-- 配置自己的本地仓库路径 --><localRepository>D:\maven\repository</localRepository>
配置国内镜像地址
<!-- 配置ali远程仓库 --><mirror><id>alimaven</id><mirrorOf>central</mirrorOf><name>aliyun maven</name><url>https://maven.aliyun.com/repository/public</url></mirror>
2.2idea中配置maven
先退回到项目目录 点setting
覆盖配置文件setting.xml
2.3通过maven构建项目
可以使用maven的功能按钮
多了pom.xml项目配置文件
配置maven项目的参数
2.4pom.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"> <!-- maven配置版本 --><modelVersion>4.0.0</modelVersion> <!-- 当前项目的坐标 --><groupId>com.javasm</groupId><artifactId>day11_mavenDemo</artifactId> <!-- 版本号版本号的划分 1.0.1大版本 重大更新小版本 功能改进最后小版本 修复bug 后边带英文的 一版不是特别稳定的版本snapshot 快照版 远程仓库不让传alpha 内测beta 进一步内测GA 生产准备版本 等 --><version>1.0.1</version> <!-- 配置项目依赖 jar包 --><dependencies> <!-- 通过坐标引入jar包https://mvnrepository.com/ 查坐标的网站查到需要用的jar包坐标 在项目中标记 会自动下载 打包时自动打包 scope jar包作用范围 (在坐标网站标记了正确的时 不要随便改)compile 编译运行时都生效runtime 仅运行时生效provided 编译时生效 运行时不生效test 测试时生效 --> <!-- <dependency>--> <!-- <groupId></groupId>--> <!-- <artifactId></artifactId>--> <!-- </dependency>--> <!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.13.4</version><scope>test</scope></dependency> </dependencies> <!-- 打包方式普通java jar (默认值)web项目 war项目聚合 pom --> <packaging>jar</packaging> <!-- 项目配置参数jdk版本字符编码字符集--><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties> </project>
注意:1 如果改了配置文件 一定要刷新配置 才能生效
注意: 2module模块功能 是配合项目聚合使用的 使用了maven之后 不要随意使用
2.5通过maven构建web项目
借助骨架创建
pom.xml配置文件
<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/maven-v4_0_0.xsd"><modelVersion>4.0.0</modelVersion> <!-- 坐标 --><groupId>com.javasm</groupId><artifactId>day11_webproj</artifactId><version>1.0-SNAPSHOT</version> <!-- 打包方式 --><packaging>war</packaging> <!--<!– 当前项目的别名 –>--> <!-- <name>day11_webproj Maven Webapp</name>--> <!--<!– 项目访问地址 –>--> <!-- <url>http://maven.apache.org</url>--> <dependencies><!-- https://mvnrepository.com/artifact/com.mysql/mysql-connector-j --><dependency><groupId>com.mysql</groupId><artifactId>mysql-connector-j</artifactId><version>8.3.0</version></dependency><!-- https://mvnrepository.com/artifact/org.projectlombok/lombok --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>1.18.30</version></dependency> <!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency> <!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.83</version></dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --><dependency><groupId>org.junit.jupiter</groupId><artifactId>junit-jupiter-api</artifactId><version>5.13.4</version><scope>test</scope></dependency> </dependencies> <!--<!– 编译参数 –>--> <!-- <build>--> <!--<!– 打包名字 默认用项目名 –>--> <!-- <finalName>day11_webproj</finalName>--> <!-- </build>--> <!-- 适配jdk版本 --><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties> </project>
3tomcat
3.1tomcat介绍
1tomcat是一个独立的软件 可以独立运行
2tomcat作用是加载web应用项目 运行java语言的web应用程序
web服务器知识:
1tomcat是一种web应用服务器 可以显示静态资源 也可以使用程序代码 tomcat weblogic jetty jboss
web服务器 只可以显示静态资源 不能跑程序代码 apache Nginx
2tomcat 中型 免费 可商用 200个 多服务器做负载均衡
jboss 中大型 免费 可商用
jetty 小型 免费 不能商用 集成到框架中方便测试
weblogic 大型 收费 商用
支持的并发量
3.2与开发工具集成 方便测试和开发
1配置tomcat插件
tomcat会自动配置启动参数
做项目部署配置
注意:通过idea中tomcat插件启动时 没有使用原始tocmat中的配置参数和目录结构 只使用其中的jar包和代码
所以 通过idea启动的tomcat 看不到localhost:8080里的欢迎页面 只能看当前项目的代码
3.3tomcat按钮和功能
改了代码 重新部署
热部署 ---->改完直接自动编译 (容易卡 看情况使用)
功能按钮:
4Servlet
4.1servlet是什么
sun公司提的标准
自己的业务逻辑处理代码 必须符合Servlet的标准 才能在web应用服务器中运行
如果让自己的业务逻辑代码 能通过浏览器地址栏触发运行 需要做
1 继承指定的类对象 public class Login extends HttpServlet2 重写service()方法 service()方法是通过请求地址默认触发的方法 3 配置请求地址与类的对应关系 @WebServlet("/login")
4.2 servlet三种实现方式
* 实现方式1* extends HttpServlet* 直接重写 doGet doPost* service()默认执行 直接继承父类的service()** 实现方式2* extends GenericServlet* 重写 service()** 实现方式3* implements Servlet接口* 实现 service()
4.3servlet 两种请求路径配置方式
1 用注解 @WebServlet("/login") public class Login extends HttpServlet2 配置文件方式<servlet><servlet-name>login2</servlet-name><servlet-class>com.javasm.controller.Login2</servlet-class></servlet><servlet-mapping><servlet-name>login2</servlet-name><url-pattern>/login2</url-pattern></servlet-mapping>
通过java虚拟机读取tomcat中的项目代码是 加载tomcat核心容器 把业务逻辑代码的请求路径 和 类对象 映射到核心容器中
4.4生命周期
1 当请求到指定的servlet代码时 做实例化..... 调用init()... 2 如果已经有实例对象 直接调用service()... 3 后续访问 直接调用service()......(使用单实例的方式) 4 当服务器关闭时 销毁servlet对象 调用 destroy()..... 5 如果配置了 <load-on-startup>1</load-on-startup> 改为服务器启动时自动创建实例对象
4.5 会导致服务器服务器无法正常运行的错误配置
1请求地址重复
名为 [com.javasm.controller.Login]和 [com.javasm.controller.Login3] 的servlet不能映射为一个url模式(url-pattern) [/login]
注意:不同的servlet请求地址不要重复
2请求路径没有带/
java.lang.IllegalArgumentException: servlet映射中的<url pattern>[login3]无效
注意:最终请求路径 /项目名/服务 /day11/login
@WebServlet("login") 这样配置无法正常启动 @WebServlet("/login")
4.6 tomcat与 idea控制台编码格式冲突
tomcatvm中加入参数
-Dfile.encoding=UTF-8
5通过servlet与浏览器交互数据
servlet常用api
1获取请求参数
String name = req.getParameter("name") get/post 都用这个方法 取到的数据类型都是字符串
2设置请求参数编码格式(处理请求乱码)(get不用专门设置 post需要指定)
//需要在第一次解析参数前设置 才能生效 req.setCharacterEncoding("utf-8"); String name = req.getParameter("name")
3设置响应头
//设置 ContentType响应头 返回数据的类型 和 字符编码 //text/html 文本形式的html标签 //application/json json字符串 //不要随意覆盖 //需要在获取输出流之前设置 才能生效 resp.setContentType("text/html;charset=utf-8");
4获得输出流
//PrintWriter 封装后的字符流 可以直接输出字符 PrintWriter writer = resp.getWriter(); writer.print("xxxx页面的文本信息") writer.close()
1.创建maven项目 使用idea中的工具 启动tomcat 测试servlet代码
2.通过注册页面 把数据从前端传到后端 后端返回注册成功
*注册信息插入数据库