JAVA EE 复习笔记

写后记:

2017/11/22

最近因为吉趣项目需要做校园网的课表、成绩查询功能,不得不使用模拟请求,去请求uims教务系统的信息。

获取后需要放在一个连有校园网(外网无法查询)的服务器上,然后我们通过ajax请求服务器,服务器返回它在uims查完的信息。

我们用的是wamp安装的apache服务器,然后我就把.py页面放进去了,结果一直获取不到url请求,

直到安装了flask框架。

然后按照配置了 WSGI

之前一直理解不了原理,现在总算是知其所以然了。


感谢  吉林大学 计算机学院 的 姜老师



JAVA EE:标准开发架构,主要用于企业级应用程序的开发

第一部分 Internet 与 Web 应用

一、web开发简介

发展:静态web->动态web

静态web


动态web实现方式:php/jsp/cgi(公共网关接口)

动态web主要特点

1.交互式;2.数据上传、下载、查询、存储;3.信息实时传送

企业开发架构

二、HTML简介

HTML:一种标记语言,通过嵌入代码或标记来表明文本格式

基本框架

<html>

    <head>

        <meta charset="utf-8">

        <title>your title</title>

    </head>

    <body>

             <--your content -->

    </body>

</html>

表单

< form action="xxx.jsp" method="">                  //递交请求的页面

< input type="submit" name="Submit" >           //递交按钮和按钮的索引

< input type="text" name="password">

< input type="text" name="name">

< /form>

post和get的区别

get:拼接在页面url中,限制255个字符

post:不拼接,不限制



三、Tomcat 服务器

路径


四、简单的程序 html+jsp

<%@  page language="java" import="java.util.*" pageEncoding="utf-8">   //按照学校的尿性肯定考试要默这句

<html>

<body> 

<%

out.println("<h1>并不是很有趣的JavaEE</h1>")

%>

</body>

</html>

第二部分 Servlet

一、Servlet:Java对CGI程序的实现、多线程处理。服务器端程序。

//其实就是负责处理http请求的程序,服务器收到请求后,将请求交给servlet类处理。

//servlet 处理完结果之后会交由服务器返回客户端

二、servlet实现



实现HttpServletResponse

客户端每次访问一个支持HTTP的Servlet程序时,

处理请求:

Servlet引擎都将调用Servlet的service方法来进行处理。

service方法接受两个参数,

一个是用于封装HTTP请求消息的对象,其类型为HttpServletRequest,

另一个是代表HTTP响应消息的对象,其类型为HttpServletResponse。

返回响应:

调用HttpServletResponse对象的getWriter方法可以获得一个文本输出流对象,向这个流对象中写入的数据将作为HTTP响应消息的实体内容部分发送给客户端。

三、创建servlet

1.xxxx extends HttpServlet //集成httpservlet类

2.override [doGet],[doPost] //重写httpservlet类的 处理get、post 请求的方法

3.将这个类的文件拷贝到web-inf/classes

web-inf文件夹只允许服务器访问,放入该文件夹的文件,用户无法通过输入url访问(用户端访问)

4.在web.xml 中配置 servlet路径


直接爬老师的课件了 = =

概括//考试时候这样写

import java.io.*

import javax.servlet.*

public class myServlet extends HttpServlet{

    public void doGet( HttpServletRequest req,HttpServletResponse resp )thirows IOException{

        PrintWriter out = resp.getWriter();

        out.println("<h1>hahaha</h1>")

    }

}

配置

<servlet>

< servlet-name >hello</ servlet-name >

< servlet-class> org.lxh.servletdemo.HelloServlet  < servlet-class>

</servlet>

<servlet-mapping>



< servlet-name >hello< /servlet- name  >   // 映射路径,出现下列路径时跳转到servlet

< url-pattern>/hello.asp<   url-pattern >

</servlet-mapping>

将表单的请求交由servlet类处理

表单

<form action=" myServlet " method="GET">                  //递交请求的页面

< input type="submit" name="Submit" >           //递交按钮和按钮的索引

< input type="text" name="password">

< input type="text" name="Name">

< /form>

public class myServlet extents HttpSetvlet{

    public void doGet(HttpServletRequest rq,HttpServletResponse resp) throw IOException{

        string password= rq.getParameter("password");

        string Name= rq.getParameter("Name");

        PrintWriter out =resp.getWriter();

        out.println("<h1>"+ password +"</h1>")

    }

}


四、Servlet生命周期


servlet容器:tomcat等,控制servlet类的生命周期。

什么时候实例化:第一次使用,或者web容器启动的时候(配置);

初始化:init()方法

销毁:destory()方法 //销毁前调用

servlet的部署:

Cookie: 把用户的数据写给用户的浏览器(客户端)

Session: 用户的数据写到用户独占的session中(服务器端);需要客户端的 cookie 协作;会话,生命周期是一段周期(不访问超过一定市场,服务器将其销毁)

Application:这个就不多谈了,不理解

使用:

get / setAttribute 方法存键值对

五、获取初始化 = =我也不知道怎么用,先记着

//写在 myServlet里面

public void init(ServletConfig config) throws ServletException{

    this.initParam=config.getInitParameter("ref") ;//接收初始化参数

}

六、获取其他初始化对象

//写在 myServlet doGet/doPost里面

(HttpServletRequest req,HttpServletResponse resp)throw IOExceotion

{

//Session

HttpSession ses = req.getSession();

ses.getAttribute("username");//从回话去键值

ses.setAttribute("name","朱陈超");//这个就不多谈了

//获取application

ServletContext application = super.getServletContext();

System.out.println (application.getRealPath("/"));

}

七、Servlet跳转

1.客户端跳转

使用HttpServletResponse接口的sendRedirect()方法;

此跳转只能传递session范围的属性,而无法传递request范围的属性;

resp.sendRedirect();

在页面中接收session属性  //ppt中忽然插入这个,猝不及防= =

<%@ page contentType="text/html" pageEncoding="utf-8">//页面配置

<html>

<body>

<h1><%=session.getAttribute("name") %></h1>

</body>

</html>

2.服务器跳转 //记不住,这几分不要了

RequestDispatcher rd = req.getRequestDispatcher("get_info.jsp");

rd.forward(req,resp) ;//服务器跳转

敲代码的时候百度

八、servlet处理文件的操作

1.文件读取

doGet(HttpServletRequest req,HttpServletResponse resp){

resp.setContentType("text/html");

resp.setCharacterEncoding("utf-8");

PrintWriter out = resp.getWriter();

String filename = "afile.txt";

String realPath = req.getRealPath(filename);

File file = new File(realPath);

if(file.exists()){

    FileReader reader = new FileReader(file);

    BufferedReader br = new  BufferedReader(reader);

    String line = null;

    while(line=br.readline()!=null){

        out.print("<h3>"+line+"</h3>");

    }

}else{

    //文件不存在

}

2.文件写

doGet(HttpServletRequest req,HttpServletResponse resp){

resp.setContentType("text/html");

resp.setCharacterEncoding("utf-8");

PrintWriter out = resp.getWriter();

String filename = "afile.txt";

String realPath = req.getRealPath(filename);

File file = new File(realPath);

FileWriter writer = new FileWriter (file);

BufferedWriter bfw=new BufferedWriter( writer );

bfw,write(" l write");

bfw.flush();

bfw.close();

writer.close


}

3.文件上传 // 真复杂

//表单

<form method="post" action="FileUpload" ENCTYPE="multipart/form-data">

文件:<input type="file" name="file">

<input type="submit" value="上传" name="submit">

</form>


//servlet-doPost

//import java.io.*

//import javax.servlet.*

//import org.apache.commons.fileupload.*

public  void doPost(HttpServletRequest req,HttpServletResponse resp){

boolen isMultipart = ServletFileUpload.isMultipartContent(request);//请求是不是上传文件

if( isMultipart ){

    FileItemFactory factory = new DiskFileItemFactory();

    ServletFileUpload upload = new ServletFileUpload(factory);

    lterator items;

    try{

        items = upload.parseRequest(request).iterator();//用迭代器解析request请求中的信息

        while(item.hashNext()){

            FileItem item=(Fileltem)items.next();

            if(!item.isFormFiels){

            //取出上传文件的文件名

            String name = item.getName();

            String fileName = name.substring(name.lastIndexOf("\\")+1,name.length());

            String path=request.getRealPath("file")+File.separatorChar+fileName;

            //上传

            File uploadFile = new File(Path)

            item.write(uploadedFile);

            }

        }

    }

}

}

第三部分 JSP

JSP:动态网站技术标准,它是在传统的HTML网页文档中加入能够生成动态内容的可执行Java程序片段和JSP标记所构成的代码

!浏览器请求jsp文件时候,先由服务器执行文件的程序段,执行完毕后再发送给浏览器。

一、例子

<%@ page contentType="text/html" ; charset="Utf-8" %>//配置页面

<%@ page language="java" %>

<%! String s1,s2,s3,s4>//定义<%! xxxxx %>

<html>

    <body>

        <h1>JSP<h2>

        <% s1="1";s2="2";s3="3";out.println(s1+s2+s3) %>

    </body>

</html>

二、应用方式

JSP+Servlet+JDBC+JavaBeans

<%

    String name="zhucc"//requset.getParameter("Name");

    if(name! = null)

    {

%>

    //这里面可以些html标签与<%=name%>的赋值、<%%>操作

<%

    }else{

%>

    //这里面可以些html标签与<%=name%>的赋值、<%%>操作

<%

    }

%>

注释

<-- content --> //用户端可以看到(html注释)

<%-- content --%>//用户端看不到(jsp注释)

三、<jsp : forward>

强制调转请求到另外的文件如JSP、Servlet或者是静态页面来处理并将当前页面的执行停止。

1.写法

//不传递参数

<jsp:forward page=" {文件路径}  ">

//传递参数

<jsp:forward page=" {文件路径}  ">

    <jsp:param name="KEY" value="VALUR" />

    ...//多个参数

</jsp:forward>

2.和response.sendRedirect的区别

<jsp : forward>

1.服务器内部转换

2.使用同一个请求//就是说两个页面可以从request.getParameter获取同样的参数

3.跳转后不再执行后面的语句

4.速度快

response.sendRedirect

1.需要在客户端往返

2.不同的请求

3.继续执行后面的语句

4.速度慢

四、包含操作 include

1.<%@include> 静态包含

在JSP中动态地包含入一个静态或动态的页面资源,当JSP执行时,将所包含的资源进行处理,并将这些页面如同在同一个JSP中一样地运行、显示、输出。

<html>

<body>

<h1>Title</h1>

<%@include file="xxxx.jsp"   %>

</body>

</html>

2.<jsp:include> 动态包含

动态包含语句,可以自动区分被包含的页面是静态还是动态。

//先分别处理被包含的页面(jsp 动态页面),再将结果包含进来

不传递参数

<jsp:include page=" { 文件路径 } " flush=“true|fasle”>

传递参数

< jsp:include page=" { 文件路径 } " flush=“true|fasle”>

    <jsp:param name="KEY" value="VALUE">

</jsp:include

五、<jsp:plugin>

在客户端显示和执行Java,Applet或JavaBean,该动作可以自动检测客户端浏览器的类型,当一个plugin不能被加载时该动作还可以自动下载和安装该plugin,并使用动作将文本插入到页面中。该动作还支持很多属性

//不写这个了,暂时没体会到有啥用,需要的时候再查

六、JAVABeam

1.操作

<jsp:params>:为Java applet 或JavaBean 定义一组参数

<jsp:useBean>:定义一个在JSP中使用的JavaBean

<jsp:getProperty>:从指定的JavaBea中获取一个属性值

<jsp:setProperty>:设定一个JavaBean实例的某个属性值

2.示例

<jsp:useBean id = "  formMail " class = " util.formMail " >

    <jsp:setProperty name="formMail" property="*" />

</jsp:useBean>

七、操作错误页面

<%@page errorPage="error.jsp" %> //程序一单出现错误则跳转到该页面

error.jsp

<%@page languag="java" contentType="text/html" pageEncoding="utf-8"  %>

<%@page isErrorPage="true" %>

<h1>程序出现了错误</h1>

八、JSP内置对象的四种属性范围

pageContext: 只在一个页面中保存属性,跳转后无效

request: 只在一次请求中保存,服务器跳转后依然有效

session: 在一次会话范围中无论如何跳转都有效,但是新开浏览器无效

application: 在整个服务器上保存,所有的用户都可以使用

1.操作

public void setAttribute(String keyName,Object keyValue);//添加

public Object getAttribute(String name);//获取

Date aDay=(Date)pageContext.getAttribute("birthday");

public void removeAttribute(String name);//删除

pageContext 使用<jsp:forward page="">是不好使的,因为只能当前页面使用

//不是很理解,那用变量不是都可以解决嘛,有啥作用?????

至于request和session和application,很好理解,就不多谈了。

(href 跳转 属于客户端调准, request 不是同一个)

2.表单传参,request获取

<form action = "xxx.jsp" method = "post">

<input type="text" name="uname">

<input type="submit" value="递交">

</form>

//我的xxx.jsp

<%

request.setCharacterEncoding("utf-8");

var name =request.getParameter("name");

%>

<h1><%=name%></h1>

九、response常用方法

1.设置响应头

response.setHeader("KEY","VALUE");

2.跳转

response.sendRedirect(""hello.html);

3.操作Cookie


//创建cookie

<%

Cookie c1 = new Cookie("Name","ZCC");//创建cookie

c1.setMaxAge(60);//设置cookie保存60秒;

response.addCookie(c1);//向客户端增加cookie

%>

//获取cookie

<%

Cookie c[]=request.getCookie()://获取全部cookie

c[0].getName();

c[0].getValue();

%>

十、Session常用方法

当一个用户连接到服务器之后,服务器会自动为此session自动分配一个不会重复的Session Id,服务器依靠这些不同的Session Id来区分每一个不同的用户。

1.获取session id

string id = session.getId();

2.是否是新的session (新用户)

boolean isNew = session.isNew();

3...取得用户创建时间什么的

就不多谈了,用到baidu

十一、servlet与jsp 的开发模式 // 究极盗图

1.Model 1


2.Model 2



第四部分JDBC

一、JDBC的任务

1.同一个数据库建立连接

2.向数据库发送SQL语句

3.处理数据库返还的结果

二、JDBC的驱动管理器

驱动管理器是【DriverManage类】,它在数据库和用户驱动器间工作,在数据库和适合的驱动器间建立联系。真正进行数据库连接的是【Driver】类中的【connect()】方法。

三、用SQL指令操作数据库

1.载入JDBC驱动程序

Class.forName("com.mysql.jdbc.Driver");//所选定驱动程序的名称

2.连接到DBMS

getConnection();

getConnection(String url);

getConnection(String url,Properties info);

getConnection(String url,String user,String password);

String url="jdbc:mysql:// localhost:3306/graduation_design"

3.创建并执行语句

通过Statement对象发送SQL语句,返回查询结果。

Statement对象用于执行简单的SQL语句,也就是没有参数的SQL语句;

PreparedStatement对象用于执行需要重复执行的预编译过的SQL语句;

CallableStatement对象用于执行一个数据库的存储过程。

//创建Statement

Statement stmt = connect.createStatment();

//

executeQuery( String sql );//执行给定的SQL查询语句,返回ResultSet对象。

executeUpdate( String sql );//执行给定的SQL更新语句,返回INSERT、UPDATE或DELETE语句的行计数,或者返回0表示不返回任何内容。

execute( String sql ); //执行给定的SQL查询语句,该语句可能返回多个结果。

//关闭

stmt.close();

4.处理DBMS返回的数据

JDBC接收查询结果是通过ResultSet对象实现的//结果集

用户可以通过get方法来访问

//元数据:数据信息

DatabaseMetaData dbmd=connection.getMetaData();

5.终止与DBMS的连接

connection.close();

6.DEMO

String diver="com.mysql.jdbc.Driver";

String url="jdbc:mysql://localhost:3306/graduation_design"

String user="root";

String password="";

//第一步:载入JDBC驱动程序

Class.forName(driver);

//第二步:连接到数据库

Connection connect=DriverManage.getConnection(url,user,password);

//第三部:创建Statement对象

Statement stmt = connect.createStatement();

//获取查询结果

String query = “SELECT * FROM namelist”;

ResultSet result =stmt.executeQuery(query);

ResultSetMetaData md=result.getMetaData();

StringBuffer s =new StringBuffer();

for(int i=1;i<=md.getColumnCount;i++){

s.append(md.getColumnName(i));

}

//关闭连接

result.close();

stmt.close();

connect.close();

第五部分 JavaBean概述

javaBean:简单地说JavaBean就是普通的Java类,在遵循JavaBean特定规范下对功能进行封装

一、demo

public class SimpleBean(){

private string name;

public void setName(String name){this.name=name}

public String getName(){return this.name}

}

//每一个属性都要有public 的 setter和getter


web开发标准目录结构

javaBean保存着 classes文件夹里面

二、jsp使用javaBean

1.import

<%@page import="cn.mldn.*" %>

<%

SimpleBean simple = new SimpleBean() ;

simple.setName("李兴华") ;

%>

<%=simple.getName()%>

2.使用<jsp:useBean>

<jsp:useBean id="实例化对象名称" scope="保存范围" class="包.类名" />

<jsp:useBean id="simple" scope="page" class="cn.mldn.lxh.demo.SimpleBean" />

<%

simple.setName("ZCC");

%>

三、javaBean与表单

1.表单

<form action="input_bean.jsp" method="post">

    <input type="text" name="name">

    <input type="submit" value="递交">

</form>

2.jsp接收表单内容

<%@page import="cn.mldx.lxh.demo.*" pageEncoding="utf-8" %>

<% request.setCharacterEncoding("utf-8")%>

<%

SimpleBean simple=new SimpleBean();

simple.setName(request.getParameter("name"));

%>

3.设置属性的参数

<jsp:useBean id="simple" scope="page" class="cn.mldn.lxh.demo.SimpleBean"/>

<jsp:setProperty name="simple" property="name" param="name"/>

4.取得属性

<h1>姓名: < jsp:getProperty name="simple" property="age"/> <h1>

5.删除javaBean

1)删除page范围

pageContext.removeAttribute(JAVABEAN的名称);

2)删除request、session、application范围

request.removeAttribute(JAVABEAN的名称);

session .removeAttribute(JAVABEAN的名称);

application .removeAttribute(JAVABEAN的名称);

—— END ——

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容