动态网页
1.什么是动态网页?
动态网页是指在服务器端运行的使用程序语言设计的交互式网页,他们会根据某种条件的变化,返回不同的网页内容。
2.动态网页的优势
-
交互性:网也会根据用户的要求和选择而动态改变和显示内容
-
自动更新:无需改变页面代码,便会自动生成新的网页内容
-
随机性:不同的时间,不同的人访问同一网址时会产生不同的页面效果
动态网页是静态网页的替代品吗?
二者各有特点,网站采用静态网页还是动态网页主要取决于网站的功能需求和网站内容的多少,网站功能较简单,内容更新量不大,采用静态网页,反之则为动态网页。
3.如何实现动态网页
动态网页需使用服务器端的脚本语言
B/S架构技术
1.什么是B/S架构?
B/S(Browser/server,浏览器/服务器),应用程序放在应用服务器上,并通过应用服务器同数据库服务器进行通信,系统界面通过浏览器展现
2.工作原理
请求分为:
-
请求地址:例,www.baidu.com
-
请求方法:
get:得到的数据会生成字符串,追加在地址栏后,参数长度受限,幂等(用户对于同一操作发起的一次请求或者多次请求的结果是一致 的,不会因为多次点击而产生了副作用)
post:请求结果会包含在方法体里,安全性更高,参数长度不受限
-
请求参数
响应分为:
-
响应状态(状态码)
-
响应类型
-
响应内容
3.好处
可以让更广泛范围内的用户访问应用系统,又可以更方便的进行升级和维护
B/S和C/S的区别
-
B/S是C/S的一种变化或改进
-
C/S的每一个客户端都必须安装和配置客户端软件,如果系统发生变化,则需要对每一个客户端进行升级维护;
B/S的完全放在服务器端实现,所有的客户端只是浏览器,不需要任何的维护,只需关注服务器的维护升级
-
B/S的界面没有C/S友好,是请求/响应的交互模式,数据变化只能刷新页面,适合公开信息发布
-
C/S面向相对固定的用户群适合机密的信息系统
URL(统一资源定位符)
组成
http://localhost:8080/news/index.jsp
协议(http超文本传输协议)+服务器域名(localhost)或IP(127.0.0.1)+端口号(8080)+路径(news/index.jsp)
http分为: tcp/ip
tcp:确保资源完整,分成一个一个包,转化成二进制
ip:保证资源送到
二、tomcat
web服务器,处理响应,只适合做静态的
web容器:里面有多个servlet,用来处理动态的事情
主要作用:1. 掌管servlet的生命周期 2.servlet与web服务器的通讯 3.多线程
tomcat既是web服务器,又是web容器。
部署
-
官网下载Apache Tomcat® - Welcome!,8版本
-
解压文件
-
配置环境变量CATALINA_HOME(tomcat的具体路径),path里添加%CATALINA_HOME%\bin
-
window---preferences----server----runtime environments
访问
-
打开服务:找到tomcat下的bin目录——>startup.bat
-
打开浏览器,输入网址(http://localhost:8080)测试是否打开tomcat,http://localhost:8080/hello,会直接找到index.html,或者写上详细的资源信息。
三、Servlet
servlet是一个符合特定规范的java程序,是一个基于java技术的web组件,servlet运行在服务器端,由servlet容器所管理,用于处理客户端请求并做出响应
Servlet的生命周期
-
init()方法,初始化servlet
-
请求方法 doGet()/doPost()
-
销毁servlet
配置servlet
1.通过‘.xml’文件配置
//找到项目的.xml文件,添加配置信息 <web-app> //上下文参数,整个应用只有一个servletContext(全局) <context-param> <param-name>contextName</param-name> <param-value>contextValue</param-value> </context-param> <servlet> <servlet-name>hello</servlet-name> <servlet-class>cn.bdqn.servlet.HelloServlet</servlet-class> //初始化参数,一个servlet对应一个servletConfig <init-param> <param-name>initParam</param-name> <param-value>Hello Servlet</param-value> </init-param> <init-param> <param-name>initParam</param-name> <param-value>Hello Servlet</param-value> </init-param> </servlet> //映射 <servlet-mapping> <servlet-name>hello</servlet-name> <url-pattern>/hello<url-pattern> </servlet-mapping> </web-app>
package cn.bdqn.servlet; import java.io.IOException; import java.io.PrintWriter; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloServlet extends HttpServlet{ //继承HttpServlet类 //重写初始化方法 @Override public void init() throws ServletException { //System.out.println("初始化servlet"); } //重写提交方法 @Override protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //System.out.println("get方法提交"); //获取初始化参数 String initParam=getInitParameter("initParam"); //获取上下文参数 String contextParam=getServletContext().getInitParameter("contextName"); //响应,把日期以html的格式返回给浏览器 Date date=new Date(); //格式化日期 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM--dd"); String dateTime=sdf.format(dateTime); //设置响应类型 resp.setContentType("text/html"); PrintWriter out=resp.getWriter(); out.print("<html>"); out.print("<head>"); out.print("</head>"); out.print("<body>"); out.print(dateTime); out.print("</body>"); out.print("</html>"); } @Override protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { //System.out.println("post方法提交"); } //摧毁Servlet @Override public void destroy() { //System.out.println("已摧毁"); } }
2.通过注解的方式配置
@WebServlet(name="user",urlPatterns={"/addStudent","/deleteStudent","/updateStudent"},initParams= {@WebInitParam(name="phone",value="1111111"),@WebInitParam(name="address",value="1111111")})
3.两种配置的优缺
编辑xml文件(优先级更高):
优点:如果有多个servlet在同一个工程下,便于管理与修改
缺点:手工配置文件,容易导致错误,重复度太高,可读性差
注解部署:
优点:快速简洁,IDE会自动创建注解
缺点:如果有很多servlet文件,不好控制单独的servlet
四、JSP
JSP基础
-
jsp注释:<%-- --%>,用户看不到源码
html注释:<!-- -->,用户可以看见源码
小脚本内的注释同java一样
-
jsp小脚本:<% %>,内部声明变量或方法为局部的
-
jsp声明:<%! %>,内部声明的变量或方法是全局的
-
jsp表达式:<%= java变量或表达式 %>
-
jsp指令:<%@ page language="java" import="java.util.*,java.text.*" contentType="text/html;charset=UTF-8" %>
JSP执行过程
jsp请求提交到服务器,翻译阶段(jsp转换为.java源代码)---------编译阶段(.java编译成.class文件)---------执行阶段(返回客户端)
二次请求:检测jsp有无改动,无改动则直接进入编译,执行,有改动则重新翻译,编译,执行
JSP内置对象
out
request
常用方法:
<form action="rq.jsp" method="post"> 用户名:<input type="text" name="userName"> 性别:<input type="radio" name="gender" value="男">男<input type="radio" name="gender" value="女">女<br> 爱好:<input type="checkbox" name="hobby" value="打游戏">打游戏 <input type="checkbox" name="hobby" value="看电视">看电视 <input type="submit"> </form> //获取表单的值 String userName = request.getParameter("userName");//获取用户名 String gender = request.getParameter("gender");//获取单选按钮的值 String hobbys = request.getParameterValues("hobby");//获取复选框的值
解决乱码问题
response
常见方法
-
response.addCookie( Cookie cookie):向客户端添加Cookie
-
response.setContentType("text/html"):设置http响应的类型
-
response.setCharacterEncoding("utf8"):设置字符集编码类型
-
response.sendRedirect("index.jsp"):将请求重新定位到一个新的url
转发与重定向
//转发,参数会直接传递 request.getRequestDispatcher("index.jsp").forword(request,response); //重定向,参数会丢失,需要通过?的方式传参,如果是中文需要设置格式 response.sendRedirect("index.jsp?userName="+URLEncoder.encode(userName,"utf8"));
区别
-
转发:一次请求,参数不会丢失
-
重定向:至少提交两次请求,参数信息会丢失,
区别 | 转发forward() | 重定向sendRedirect() |
---|---|---|
请求次数 | 一次 | 至少两次 |
地址栏 | 不会发生变化 | 会发生变化 |
哪里跳转 | 服务器端进行的跳转 | 浏览器端进行的跳转 |
请求域中数据 | 不会丢失 | 会丢失 |
跳转限制 | 转发只能跳转本站点资源 | 可以跳转到任意URL |