JavaWeb开发入门
1.1准备
web:网页
静态web(HTML):从网页中获取的数据始终不变
动态Web(Jsp,Servelt):可以从服务器动态的获取数据;
在Java中,动态Web资源开发的技术统称为JavaWeb;
1.2Web应用程序
Web应用程序就是提供浏览器服务支持的一些程序
我们需要把自己开发出来的Web程序放在 我们服务器的webAPPS目录下
1.3Web发展史
-
静态web
-
html,htm,服务器会直接读取HTML的数据
-
缺点:
- 网页内容无法更新
- 一些简单的手段可以让他动起来
- JavaScript
- VBSScript
-
动态Web
- 主要特征:可以从服务器端获取数据,Web界面因人而异
- 优点:
- 可以实现真正的用户交互
- 可以从服务器端保证每个用户有自己的空间
- 增强了用户体验性
实现动态Web的手段
- PHP:
- ASP:微软
- JSP/Servelt:Sun解决 b/S架构 Applet
- 性能比较高
- 跨平台
- 不用任何门槛(HTML嵌套Java代码)
有哪些Web服务器
1.IIS(微软)
2.Tomact(性能优良,非常的小,它是符合Web服务器最小的服务器,Apache)
3.weblogic
4.WebShare
搭建tomact环境
思考?为什么要搭建JavaWeb环境
因为不管什么web资源,想要被计算机访问,都必须要与一个与之对应的网络通讯程序
1.下载tomcat:http://tomact.apache.org/
2.下在完成后,解压到任意一个目录下
3.bin目录是存放一些课执行文件,启动或关不
4.conf存放一些Tomact配置文件
5.lib存放服务器需要的Jar包
6.logs日志文件
7.temp:临时文件
8.webapps:存放网站和web项目的地方
9.work:Tomcat的工作目录
注意:不能关闭Tomact的DOS窗口,否则Tomact就停止了
访问Tomact服务器
通过localhost:8080访问
Tomact启动常见问题
1.启动乱码问题(不影响操作)
conf/logging.properties中增加了一句java.util.logging.ConsoleHandler.encoding = UTF-8,导致在有些windows系统中出现中文乱码。修改方法:
2,JAVA_HOME配置是否成功,必须要这个名字
3,闪退问题
- 打开bin目录下的catalina.bat,增加一个jdk和一个jre目录
- set JAVA_HOME=jdk 安装目录
- set JRE_HOME=jre 安装目录
Tomact服务器
1.8080端口问题
在cof/server.xml配合文件配置了我么服务器相关一些服务,我们可以修改其内容,改tomact运行端口号
如何发布一个项目
发布到:tomact-9.0
项目中必须要有一个Web-INF目录,其中必定有一个web.xml
网络请求的终极步骤讲解
使用IDEA搭建WEB开发环境
1.打开IDEA
2.新创一个Web项目
3.配置Tomcat服务器
4.配置好之后需要导包
HTTP协议
HTTP:超文本传输协议
请求:
请求方式
请求参数
请求内容
响应:
常用值
200:ok
302:重定向
404:请求的文件不存在,路径写错了
500:服务器代码写错了,你的Java程序写错了
Servlet
简介
- Servlet是sun公司提供的一门用于开发动态web资源的技术
- Sun公司在API中提供了servlet接口,用户若想开发一个动态web资源,需要
- 编写一个Java类,实现Servlet接口
- 把开发的Java类部署到web服务器中
- 按照一种约定俗称的习惯,我们把实现了servlet接口的java程序,称之为Servlet
Servlet实现类
1.创建Servlet的两种方式
方式一:创建一个java文件,继承HttpServlet,重写里面的方法
public class Servlet3 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doGet(req, resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
super.doPost(req, resp);
}
}
方式二:直接在idea里面创建一个servlet
public class Servlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
}
}
2.配置web.web中的Servlet的映射mapping url;
<?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>ServletTest01</servlet-name>
<servlet-class>com.wang.demo.ServletTest01</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletTest01</servlet-name>
<url-pattern>/test</url-pattern>
</servlet-mapping>
</web-app>
注意:
<servlet-mapping>
<servlet-name>ServletTest01</servlet-name>
<url-pattern>/test</url-pattern>//这里记得一定要加“/",否则服务器会报错
</servlet-mapping>
3.启动tomact服务器
Servlet映射路径问题
1.一般情况下,我们都会指向指定的一个URL,一个URL对应一个请求
2.通配问题
/*:不报错
/之后可以随便输,都能跳转到指定的页面
/*.do:会报错,不需要/
<servlet-mapping>
<servlet-name>ServletTest01</servlet-name>
<url-pattern>*.do</url-pattern>
</servlet-mapping>
</web-app>
do前面可以随便输,都可以跳转到指定的页面
重定向
将这个请求,转到另一个地址
比如我们需要跳转到百度,只需:response.sendRedirect(“https://www.baidu.com/”);
package com.wang.demo;
import java.io.IOException;
import java.io.PrintWriter;
public class ServletTest01 extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request,response);
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
response.sendRedirect("https://www.baidu.com/");
System.out.println("你好");
}
}
ServletContext
1.通过ServletContext实现数据共享
就是这一个Servlet可以获得另一个Servlet的信息
第一个Servlet需要:this.getServletContext();
context.setAttribute(“name”,name);
第二个需要:
String name = (String) context.getAttribute(“name”);
String name = (String) context.getAttribute(“name”);
package com.wang.servlet;
import javax.servlet.ServletContext;
import java.io.IOException;
@javax.servlet.annotation.WebServlet(name = "Servlet")
public class Servlet extends javax.servlet.http.HttpServlet {
protected void doPost(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
doGet(request,response);
}
protected void doGet(javax.servlet.http.HttpServletRequest request, javax.servlet.http.HttpServletResponse response) throws javax.servlet.ServletException, IOException {
response.setCharacterEncoding("utf-8");
ServletContext context = this.getServletContext();
String name="佩奇";
context.setAttribute("name",name);
response.getWriter().print("信息录入成功"+name);
}
}
package com.wang.servlet;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
@WebServlet(name = "Servlet2")
public class Servlet2 extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
ServletContext context = this.getServletContext();
String name = (String) context.getAttribute("name");
response.setCharacterEncoding("utf-8");
response.getWriter().print("我收到的消息是"+name);
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request,response);
}
}
注意:我们要防止乱码问题的产生,就要在Servlet中设置编码问题
通过ServletContext读取网站配置文件
1.新建一个.properties文件
driver=com.mysql.jdbc.Driver
username=root
password=123456
url=jdbc:mysql://localhost:3306/smbms
2.编写一个servlet类
package com.kuang.servlet;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Properties;
//读取properties配置文件
public class ServletDemo03 extends HttpServlet {
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//读取配置文件
//1.获得配置文件的路径
String realPath = this.getServletContext().getRealPath("/WEB-INF/classes/resources/database.properties");
System.out.println("取得的路径为:"+realPath);
Properties properties = new Properties();
FileInputStream is = new FileInputStream(realPath);
properties.load(is);//把文件流加载到配置文件的对象中;
String driver = properties.getProperty("driver");
String username = properties.getProperty("username");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
//响应到网页
resp.getWriter().println(driver);
resp.getWriter().println(username);
resp.getWriter().println(password);
resp.getWriter().println(url);
//=======================================
System.out.println(driver);
System.out.println(username);
System.out.println(password);
System.out.println(url);
}
}
//响应到网页
resp.getWriter().println(driver);
resp.getWriter().println(username);
resp.getWriter().println(password);
resp.getWriter().println(url);
//=======================================
System.out.println(driver);
System.out.println(username);
System.out.println(password);
System.out.println(url);
}
}