B/S与C/S
B/S:Browser/Server浏览器/服务器模式
用户只需要一个浏览器即可访问服务器
C/S: Clint/Server 客户端/服务器模式
用户需要下载客户端才能访问服务器
Javaweb就是B/S模式下的软件开发
Servlet
编写Servlet步骤
1.导入Servlet相关依赖
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>4.0.1</version>
<scope>provided</scope>
</dependency>
2.创建子类并继承HttpServlet,重写doGet和doPost方法
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 FirstServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
//执行的代码内容
}
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
doPost(req,resp);
}
}
3.在web.xml中设置请求servlet的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>
<!--设置servlet名称-->
<servlet-name>firstServlet</servlet-name>
<!--servlet类所在的完整路径-->
<servlet-class>com.hqyj.servlet.FirstServlet</servlet-class>
</servlet>
<!--设置访问某个servlet的URL地址(设置servlet映射)-->
<servlet-mapping>
<!-- 选择哪个Servlet进行映射 -->
<servlet-name>firstServlet</servlet-name>
<!--设置请求的URL地址,必须以/开头-->
<url-pattern>/first</url-pattern>
</servlet-mapping>
</web-app>
4.访问servlet
重启tomcat,访问"项目上下文地址/first",就表示访问FirstServlet
三层构架
在软件开发中,并不是将所有功能都交给一个类去实现,而是要将其进行分层,从而达到”高内聚、低耦合"的目的。
低耦合是指降低各个模块之间的关联程度,这样便于开发和维护,每个模块各司其职。
高内聚是指每个模块内的功能不可再分。
三层构架包括
数据访问层:用于连接数据库,对数据做增删改查的操作
业务逻辑层:用于处理业务逻辑,在适当的情况下调用数据访问层中的方法
视图表现层:用于展示数据和提供用户输入数据的渠道,在适当的情况下调用业务逻辑层中的方法
访问服务器的某个URL
在浏览器的地址栏中输入对应的url,属于GET提交
使用a标签,在href中输入对应的URL,属于GET提交
使用form表单,在action中输入对应的URL,通过method修改提交方式为GET或者POST
页面向服务端提交数据的方式
使用表单form的name属性显示提交,get提交的数据会暴露在浏览器的地址栏中
<form acti on= "http://localhost:8080/day1/hero" method="get">
<input type= "text”name= "username">
<input type="submit" value="提交">
</form>
使用form表单的name属性隐式提交,post提交的数据不会暴露在浏览器地址栏中
<form acti on= "http://localhost:8080/day1/hero" method="post">
<input type= "text”name= "username">
<input type="submit" value="提交">
</form>
通过"?参数名=值"的方式提交,如果有多个参数使用&拼接
<a href="https://www.baidu.com/s?wd=he11o&a=1&b=2">访问</a>
服务器端获取页面传递的数据
上述的提交方式提交到服务器的数据,都可以使用String str = request.getParameter("name参数名或?后的参数名");获取
class TestServlet exetends HttpServlet{
doGet(HttpServletRequest req, HttpServletResponse resp){
String username = req.getParamter("表单中某个表单元素的name值");
}
doPost(HttpServletRequest req, HttpServletResponse resp){
doGet(req,resp);
}
}
解决请求和响应的乱码
response.setContentType("text/html;charset=utf-8");//解决响应乱码
request.setCharacterEncoding("utf-8");//解决请求乱码
表单提交数据注意事项
表单通过action设置提交的路径,如果要残敌参数,只能使用post提交
如果使用get提交,需要使用隐藏域
<!--post提交-->
<form action="xxxxx?参数=值" method="post"></form>
<!--get提交-->
<form action="xxxxx?参数=值" method="get">
<!--隐藏域-->
<input type="hidden" name= "参数名” value="参数值">
</form>
Servle的生命周期
1.执行构造方法一次
2.初始化执行一次:自动调用init()
3.服务执行多次:调用service()方法,之后每次访问都会调用该方法。有该方法时,doGet和doPost失效。如果没有该方法,会根据请求方式试图调用doGet或doPost, 如果没有相应的方法,会出现405, 表示请求方式不允许
4.销毁执行一次:在当前servlet所在项目从tomcat中停止时, 销毁一次,调用destory()方法
使用注解开发servlet
/*使用注解开发Servlet
注解: @特定单词 如@0verride
定义且配置Servlet的注解: @WebServlet ("/请求映射")
*/
@WebServlet("/sysAdmin")
public class SysAdminServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest req, HttpServletResponse resp){
System.out.println("执行servlet方法");
}
}
//@webServ1et ("/sysAdmin")相当于在web.xm1中进行配置serv1et映射
JSP
使用Java开发,运行在服务器上的页面,jsp文件的后缀名是".jsp"
JSP的组成
HTML
Java代码(脚本)
<%java代码;%>
表达式:用于在页面中嵌入一个具体的变量值
<%=变量%>
指令
page指令:用于设置当前页面的属性
include指令:用于引入其他页面
taglib指令:用于引入其他标签库
<%@ 指令名 属性="值" %>
注释:无法在浏览器中查看jsp注释,可以查看html的注释
<%-- jsp注释 --%>
<!-- html注释 -->
声明
<%! 定义方法 %>