Java 之 Web前端(一)
1.http
a.定义:超文本传输协议
b.作用:web服务器与web浏览器之间通信
c.步骤:
①客户端与web服务器建立连接(IP地址与端口号)
②客户端发送http请求(请求资源路径)
③服务器接收客户端的http请求,生成http响应回发
④服务端关闭连接;客户端解析回发响应
2.Web容器:
a.常用:Tomcat、Weblogic、jboss
b.作用:用来管理Servlet
3.Servlet:
a.定义:在服务端运行的Java程序
b.作用:在服务端产生动态内容
c.使用:
①创建Servlet类,继承HttpServlet,重写doGet方法
public class MyFirstServlet extends HttpServlet{
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, IOException {
PrintWriter out = resp.getWriter();
out.write("<html>");
out.write("<head>");
out.write("</head>");
out.write("<body>");
out.write("<p style='color:red'>this is p</p>");
out.write("</body>");
out.write("</html>");
}
}
②配置web.xml文件
<servlet>
<servlet-name>myFirst</servlet-name>
<servlet-class>com.servlet.MyFirstServlet</servlet-class>
</servlet>
③Servlet的映射
<servlet-mapping>
<servlet-name>myFirst</servlet-name>
<url-pattern>/myfirst</url-pattern>
</servlet-mapping>
4.Servlet的生命周期
a.创建与初始化 init()
①默认是在Servlet第一次访问时创建和初始化(单例模式)
②注:在<servlet>标签中的最后加<load-on-startup>1</load-on-startup>以在服务器启动时创建和初始化,其中的1表示优先级,0为默认,数字越小优先级越大
b.服务 doGet()与doPost()
①doGet()对应表单method属性中的get;doPost()对应表单method属性中的post
②注:若重写了service()方法,则不调用doGet()或doPost()
c.销毁 destroy()
①在服务器停止时调用destroy()
d.初始化参数的设定
①设置servlet的初始化参数(在<servlet>标签内书写)
<init-param>
<param-name>email</param-name>
<param-value>test@qq.com</param-value>
<init-param>
调用
String email = getServletConfig().getInitParameter("email");
②设置全局上下文的初始化参数(与<servlet>标签平级)
<context-param>
<param-name>name</param-name>
<param-value>zhangsan</param-value>
<context-param>
调用
String name = getServletConfig(). getServletContext().getInitParameter("name");
5.响应
a.错误信息处理
①sendError()方法
response.sendError(500,"服务器内部出现异常");
②配置<error-page>(在<web-app>中书写)
<error-page>
<error-code>404</error-code>
<location>/404Error.html</location>
<error-page>
b.重定向(跳转)
response.sendRedirect("../MyHtml.html");
注:这里实际发送了两次请求
6.请求
a.根据name获取值
String userName = reques.getParameter("userName"); //获取单个元素的value值
String[] favs = reques.getParameterValues("fav"); //获取多个元素的value值(适用于复选框)
b.其他请求的方法
request.getMethod() //获取请求的方法 request.getRequestURI() //获取请求的方法URI request.getRequestURL() //获取请求的URL request.getServletPath() //获取servlet的映射路径 request.getContextPath() //获取servlet中Context的路径 request.getRemoteAddr() //获取请求的IP地址
c.通过url地址传参
<a href="login?userName=zhangsan&userType=1">登陆<a> <!--其中userName和userType都为name的值,zhangsan和1都为value的值-->
d.解决get方式中乱码问题
userName = new String(userName.getBytes("ISO-8859-1"),"utf-8")
e.请求头信息:
Enumeration<String> names = request.getHeadNames();
while(names.hasMoreElements()){
String name = (String)names.nextElement();
String value = request.getHeader(name);
}
7.Enum(枚举)
a.作用:规定一定范围的数据取值范围
b.用法:
//申明
public enum WeeK{
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
} //使用
public static void main(String[] args){
test(Week.Sunday);
} public void test(Week w){
}
8.文件上传
a.注意:
①表单的提交方式只能是post
②表单必须设置为复合类型表单
<form action="UploadServlet" method="post" ectype="multipart/form-data">
<input type="file" name="photo"/>
</form>
③在表单标签中必须要有name属性(<input>中)
b.用法:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException { //处理文件上传操作 //在硬盘中去创建一个FileItem工厂
DiskFileItemFactory factory = new DiskFileItemFactory(); //文件上传处理类
ServletFileUpload fileUpload = new ServletFileUpload(factory); //设置上传文件的大小,以字节为单位
fileUpload.setFileSizeMax(2*1024*1024); try {
List<FileItem> items = fileUpload.parseRequest(request); for(FileItem item : items){ if(!item.isFormField()){
upload(item);
}else{
// item.getString();
} } } catch (FileUploadException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
} private void upload(FileItem item){ //将虚拟路径转换为物理路径
// System.out.println(getServletContext().getRealPath("image"));
String path = getServletContext().getRealPath("img"); File file = new File(path+"/"+new Date().getTime()+item.getName()); try {
item.write(file); } catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} }
9.文件下载
String fileName = request.getParameter("file");
response.setHeader("Content-Disposition", "attachment; filename=" +fileName );
String path = getServletContext().getRealPath("img");
File file = new File(path + "\\"+fileName);
FileInputStream inputStream = new FileInputStream(file);
ServletOutputStream out = response.getOutputStream();
byte[] bytes = new byte[1024];
int b = 0;
while(( b = inputStream.read(bytes))!=-1 ){
out.write(bytes,0,b);
out.flush();
}
out.close();
10.转发
a.语法:
request.getRequestDispatcher("login.html").forward(request,response);
b.与重定向的区别
①转发:整个过程只发送了一次请求;重定向:发送了2次请求
②转发:地址栏不会发生变化;重定向:地址栏会发生变化
c.转发中的request属性
request.setAttribute("msg","hello"); //属性值为Object类型的
String msg = (String) request.getAttribute("msg");
Java 之 Web前端(一)的更多相关文章
- 如何自学编程,零基础适合学习Java或者Web前端吗,非科班的能学java吗?
很多人都会选择自学Java或者前端,相信有在校的大学生,有正在上班想转行的,也有已经在自学的.下面通过几个问题我来给大家分析学习编程的难易程度. 编程是什么? 通俗的理解,编程就是编写程序,哪什么是程 ...
- 从java到web前端再到php,一路走来的小总结
java的学习: 初学者对Java的学习,上来的感觉都是比较难,感觉java的东西很多,如此多的类和接口.有时还弄不懂为啥实例化出一个int空数组为什么数组中默认都是0,实例化一个空字符串数组时(St ...
- Java与Web前端发展前景及薪资对比
Web前端和Java谁的薪资待遇高?关于这个问题,是很多网友都感兴趣的,在各大论坛贴吧上也看到了不少类似的问题. 现在的互联网行业飞速发展,因此有很多小伙伴想要进入IT行业分一杯羹,但是关于学习什么技 ...
- Java 之 Web前端(三)
1.JSP a.全称:Java Server Page b.运行:翻译.编译.类装载.类实例化.(初始化.服务.销毁 (这三点为Servlet的生命周期)) 2.JSP的基本组成 a.HTML模板 注 ...
- Java 之 Web前端(四)
1.EL表达式 a.语法: <%pageContext.setAttribute("page","page") %> ${page} b.适用:pa ...
- Java 之 Web前端(二)
1.Cookie (客户端所拥有) a.含义:服务器给浏览器的甜点 b.语法: //创建Cookie Cookie cookie = new Cookie("name", &quo ...
- 零基础如何学习Java和web前端
今天说一下零基础到底能不能学习Java,为什么有的人说学不了呢,那么接下来我为大家揭晓,零基础到底适合不适合学习Java. 零基础学习Java的途径第一个就是看视频,然后就是看书,或者在线下报个培训班 ...
- Java 之 Web前端(六)
1.AJAX a.定义:异步的 JS 和 XML b.作用:不重新加载页面的情况下,与服务器的数据进行交互,改变网页的部分内容 c.语法: <html> <head> < ...
- Java 之 Web前端(五)
1.过滤器 a.定义:是一个中间组件,用于拦截源数据和目的数据之间的消息,并过滤二者之间传递的数据 b.步骤: ①建class继承Filter实现抽象方法 public class EncodingF ...
随机推荐
- IntelliJ IDEA使用教程 (总目录篇)
注:本文来源于< IntelliJ IDEA使用教程 (总目录篇) > IntelliJ IDEA使用教程 (总目录篇) 硬件要求 IntelliJ IDEA 的硬件要求 安装包云 ...
- Confluence 6 SQL 异常的问题解决
如果你得到了与下面显示内容类似的信息话,那么你最好考虑修改 Confluence 的日志级别输出更多的信息.如果你考虑通过 Atlassian support 获得帮助,那么这些详细的错误信息能够更好 ...
- Confluence 6 用户宏示例 - NoPrint
这个示例演示了如何创建一个用户宏,这个宏包括了在查看页面中显示的内容,但是不被打印. Macro name noprint Visibility Visible to all users in the ...
- Django框架之第三篇模板语法(重要!!!)
一.什么是模板? 只要是在html里面有模板语法就不是html文件了,这样的文件就叫做模板. 二.模板语法分类 一.模板语法之变量:语法为 {{ }}: 在 Django 模板中遍历复杂数据结构的关键 ...
- 【mysql】datetime时间比较
如下,比较的日期用指定格式写出就可以了.不需要日期函数. SELECT * FROM table_a WHERE write_date > "2017-07-17 00:00:00&q ...
- java----Java的栈,堆,代码,静态存储区的存储顺序和位置
转载:https://blog.csdn.net/zhangbaoanhadoop/article/details/82193497
- shell 批量替换内容
一.查找/data/www/vhosts/WOStest2_YiiFramework/console/sh/下所有.sh文件 把/data/www/vhosts/WOS_YiiFramework 替换 ...
- spring cloud Hystrix监控面板Hystrix Dashboard和Turbine
我们提到断路器是根据一段时间窗内的请求情况来判断并操作断路器的打开和关闭状态的.而这些请求情况的指标信息都是HystrixCommand和HystrixObservableCommand实例在执行过程 ...
- MVC开发中的常见错误-01未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或它的某一个依赖项。
错误信息:未能加载文件或程序集“EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”或 ...
- 学习笔记: 反射应用、原理,完成扩展,emit动态代码
using Ruanmou.DB.Interface; using Ruanmou.DB.MySql; using Ruanmou.DB.SqlServer; using Ruanmou.Model; ...