자바 메 일 시스템 (2) - 로그 인 등록 모듈
마침내 페이지 레이아웃 에 대해 조금 알 게 되 었 습 니 다. 기본 적 인 head, 하나의 sidebar, 하나의 mainbody 의 구조:
/* */
body {font:12px Tahoma;margin:0px;text-align:center;background:#FFF;}
a:link,a:visited {font-size:12px;text-decoration:none;}
a:hover{}
/* */
#container {width:700px;margin:10px auto}
/* */
#header {background:url(../img/logo.gif) no-repeat;height:59px;}
#menu {}
#menu ul {float:right;list-style:none;margin:0px;width:560px;height:16;background:#EAF3FF}
#menu ul li {float:right;display:block;line-height:30px;margin:0 5px}
#menu ul li a:link,#menu ul li a:visited {font-weight:bold;font-size:11px;color:#00A3FF}
#menu ul li a:hover{}
.menuDiv {width:1px;height:28px;background:#CCCCCC;}
/* */
#pagebody {
width:700px; /* */
margin:0px auto; /* */
}
#sidebar {
background:#F5F8FC;
width:320px; /* */
text-align:left; /* */
float:right; /* */
clear:right; /* */
overflow:hidden; /* */
border:1px solid #78A3D3;
height:400px
}
#sidebar ul {float:right;list-style:none;width:320px;height:16;margin:20px;}
#sidebar ul li {font-size:13px;margin:10px;}
#sidebar ul li a:link,#sidebar ul li a:visited {font-size:11px;color:#78A3D3}
#sidebar ul li a:hover{}
.account,.password,.validate {
border:1px solid #78A3D3;
line-height:100px;
width: 120px;
height: 20px;
}
.loginButton {
BORDER-RIGHT: #7b9ebd 1px solid;
PADDING-RIGHT: 2px;
BORDER-TOP: #7b9ebd 1px solid;
PADDING-LEFT: 2px;
FONT-SIZE: 12px;
FILTER: progid:DXImageTransform.Microsoft.Gradient(GradientType=0, StartColorStr=#ffffff, EndColorStr=#cecfde);
BORDER-LEFT: #7b9ebd 1px solid;
CURSOR: hand;
COLOR: black;
PADDING-TOP: 2px;
BORDER-BOTTOM: #7b9ebd 1px solid
}
.note {
font-size: 11px;
color: #868686;
}
.error {
margin:1px 20px;
width:120px;
color:ff0000;
font-size:12;
}
#mainbody {
width:380px;
text-align:left;
float:left; /* */
clear:left; /* */
overflow:hidden;
}
#mainbody ul {float:right;list-style:none;width:320px;height:16;margin:20px;}
#mainbody ul li {font-size:12px;margin:5px;}
/* */
#footer {width:800px;margin:0 auto;height:50px;background:#00FFFF}
그리고 괜 찮 은 등록 css 를 찾 았 습 니 다:
.css
body {
font-family: Arial, Helvetica, sans-serif;
font-size:12px;
color:#666666;
background:#fff;
text-align:center;
}
* {
margin:0;
padding:0;
}
a {
color:#1E7ACE;
text-decoration:none;
}
a:hover {
color:#000;
text-decoration:underline;
}
h3 {
font-size:14px;
font-weight:bold;
}
pre,p {
color:#1E7ACE;
margin:4px;
}
input, select,textarea {
padding:1px;
margin:2px;
font-size:11px;
}
.buttom{
padding:1px 10px;
font-size:12px;
border:1px #1E7ACE solid;
background:#D0F0FF;
}
#formwrapper {
width:510px;
margin:15px auto;
padding:20px;
text-align:left;
border:1px #1E7ACE solid;
}
fieldset {
padding:10px;
margin-top:5px;
border:1px solid #1E7ACE;
background:#fff;
}
fieldset legend {
color:#1E7ACE;
font-weight:bold;
padding:3px 20px 3px 20px;
border:1px solid #1E7ACE;
background:#fff;
}
fieldset label {
float:left;
width:120px;
text-align:right;
padding:4px;
margin:1px;
}
.error {
margin:1px 125px;
width:120px;
color:ff0000;
}
fieldset div {
clear:left;
margin-bottom:2px;
}
.enter{ text-align:center;}
.clear {
clear:both;
}
.jsp
<fieldset>
<legend> </legend>
<div>
<label for="username"> </label>
<input type="text" name="username" id="username" size="20" maxlength="30" onblur="getBackInfo();"/> @ymail.com*<input type="text" id="disCheckResult" size="50" readonly style="border:0;margin:0 80px;font-size=12;color=red"/><br />
<p class="error"><html:errors property="username"/></p>
</div>
</fieldset>
<br />
<fieldset>
<legend> </legend>
<p><strong> , .</strong> .</p>
<div>
<label for="password"> </label>
<input type="password" name="password" size="18"/>
*( 8 )<br /><p class="error"><html:errors property="password"/></p>
</div>
<div>
<label for="password1"> </label>
<input type="password" name="password1" size="18"/>
*<br /><p class="error"><html:errors property="password1"/></p>
</div>
<div>
<label for="question"> </label>
<select name="question" class="text" title=" ">
<option value="" selected="selected"> </option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
<option value=" ?"> ?</option>
</select>
*<br /><p class="error"><html:errors property="question"/></p>
</div>
<div>
<label for="answer"> </label>
<input type="text" name="answer" size="18"/>
*<br /><p class="error"><html:errors property="answer"/></p>
</div>
<div>
<label for="nickName"> </label>
<input type="text" name="nickName" size="18"/>
*<br/><p class="error"><html:errors property="nickName"/></p>
</div>
<div>
<label for="sEmail"> </label>
<input type="text" name="sEmail" value="" size="20" maxlength="150" />
<p class="error"><html:errors property="sEmail"/></p>
</div>
<div>
<label for="agreeToTerms"> </label>
<input type="checkbox" name="agreeToTerms" value="1" />
<a href="#" title=" "> ?</a> * <br/>
<p class="error"><html:errors property="agreeToTerms"/></p></div>
<div class="enter">
<input name="create791" type="submit" class="buttom" value=" " />
<input name="Submit" type="reset" class="buttom" value=" " />
</div>
<p><strong>* , .<br />
* .</strong></p>
</fieldset>
먼저 틀 을 사용 하 는 것 을 말한다.
1. 프로필:
2. 인증 규칙 쓰기
<form name="registerForm">
<field property="username" depends="required">
<msg name="required" key="error.required"/>
<arg0 key="error.username"/>
</field>
<field property="password" depends="required,minlength">
<msg name="required" key="error.required"/>
<arg0 key="error.password"/>
<msg name="minlength" key="error.minlength"/>
<arg0 key="error.password"/>
<arg1 key="${var:minlength}" name="minlength" resource="false"/>
<var>
<var-name>minlength</var-name>
<var-value>8</var-value>
</var>
</field>
<field property="password1" depends="validwhen">
<var>
<var-name>test</var-name>
<var-value>(password==*this*)</var-value>
</var>
<msg name="validwhen" key="error.password1"/>
</field>
<field property="question" depends="required">
<msg name="required" key="error.required"/>
<arg0 key="error.question"/>
</field>
....
</form>
3. properties 파일 쓰기
4. 페이지 에 < html: errors property = "username" / > 를 추가 하 는 것 을 잊 지 마 세 요.
사용자 이름 이 있 는 지 없 는 지 스스로 검증 규칙 을 써 서 판단 할 수 있 었 지만, Ajax 의 무 리 셋 검증 은 더욱 매력 적 으로 보 였 습 니 다. 그래서 Ajax 에 대해 아무것도 모 르 는 저 는 첫 번 째 시 도 를 했 습 니 다. 이해 하기 쉬 운 것 같 습 니 다. 즉, servlet 를 쓰 고 js 로 호출 하여 페이지 에 결 과 를 보 여 주 었 습 니 다.
servlet:
package servlet;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.ymail.dbimpl.UsersImpl;
public class UsernameValidator extends HttpServlet {
/**
*
*/
private static final long serialVersionUID = -9038308848332609445L;
protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
// System.out.print("asdfdsaf");
try{
UsersImpl usersImpl = new UsersImpl();
boolean flag = usersImpl.usernameValidate(username);
String msg = null;
//System.out.print(flag);
response.setContentType("text/html;charset=gb2312");
PrintWriter out = response.getWriter();
if (flag) {
msg = " "+username+" ";
}
else {
msg = " ,"+username+" ";
}
out.println(msg);
//System.out.print(msg);
}catch(Exception ex){
ex.printStackTrace();
}
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// TODO Auto-generated method stub
doPost(request, response);
}
}
js:
<script language="javascript" >
var request;
/**
httpRequest, :
1. XMLHttpRequest() ,
2. , ,
3. , 7.0 XMLHttpRequest()
4. ,
。
*/
function createRequest()
{
try{
request=new XMLHttpRequest();
}catch(trymicrosoft)
{
try{
request=new ActiveXObject("Msxml2.XMLHTTP");
}catch(othermicrosoft)
{
try{
request=new ActiveXObject("Microsoft.XMLHTTP");
}
catch(failed)
{
request=false;
}
}
}
if(!request)
{
alert("err Happend!");
return null;
}
return request;
}
/**
, onblur() ,
:
1. HTML , document.getElementById("") 。
2. URL, URL FORM method get submit
3. , , ,
,
GET,POST POST, , ,
FireFox ,
URL, 。
true, false。true ,
, AJAX A, asynchronous; false,
。
4. , ,
。 Javascript , XMLHttpRequest
。
5. , send() ,
, :
name=value&anothername=othervalue&so=on, , MIME :
httpRequest.setRequestHeader('Content-type','application/x-www-form-urnlencoded');
。
*/
function getBackInfo()
{
request = createRequest();
var username=document.getElementById("username").value;
var url='/ymail/usernameValidate?username='+username;
// var xmlHttp = new ActiveXObject("MSXML2.XMLHTTP");
//alert(" !");
request.open("GET",url,"true");
// ,
//onreadystatechange 5 :
// 0:
// 1:
// 2:
// 3:
// 4:
// onreadystatechange ,
// disResult , 。
request.onreadystatechange=disResult;//
request.send(null);
}
function disResult()
{
/**
1. readystate==4 , readystate==1
, readystate==2,readystate==3,readystate==4 ,
alert("") 。
2. , , ,
:
200:
401:
403:
404:
*/
if(request.readystate==4)
{
if(request.status==200)
{
// OK , Javascript 。
document.getElementById("disCheckResult").value=request.responseText;
//alert(request.responseText);
}
else
{
alert('Something Wrong has Happend!');
}
}
}
</script>
페이지 에 오류 정 보 를 추가 하여 표시 할 위 치 를 기억 하 십시오:
package servlet;
import java.awt.BasicStroke;
import java.awt.Color;
import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.Random;
import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
/**
*
* @author bitiliu
*
*/
public class ValidateCodeServlet extends HttpServlet
{
private static final long serialVersionUID = 1L;
// 。
private int width=30;
// 。
private int height=15;
//
private int codeCount=3;
private int x=0;
//
private int fontHeight;
private int codeY;
char[] codeSequence = { 'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J',
'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W',
'X', 'Y', 'Z', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };
/**
*
*/
public void init() throws ServletException
{
// web.xml
//
String strWidth=this.getInitParameter("width");
//
String strHeight=this.getInitParameter("height");
//
String strCodeCount=this.getInitParameter("codeCount");
//
try
{
if(strWidth!=null && strWidth.length()!=0)
{
width=Integer.parseInt(strWidth);
}
if(strHeight!=null && strHeight.length()!=0)
{
height=Integer.parseInt(strHeight);
}
if(strCodeCount!=null && strCodeCount.length()!=0)
{
codeCount=Integer.parseInt(strCodeCount);
}
}
catch(NumberFormatException e)
{}
x=width/(codeCount+1);
fontHeight=height;
codeY=height-2;
}
protected void service(HttpServletRequest req, HttpServletResponse resp)
throws ServletException, java.io.IOException {
// buffer
BufferedImage buffImg = new BufferedImage(
width, height,BufferedImage.TYPE_INT_RGB);
Graphics2D g = buffImg.createGraphics();
//
Random random = new Random();
//
g.setColor(new Color(230, 243, 255));
g.fillRect(0, 0, width, height);
// , 。
Font font = new Font("Arial", Font.ITALIC, 35);
// 。
g.setFont(font);
// 。
g.setColor(Color.BLACK);
g.drawRect(0, 0, width - 1, height - 1);
// 160 , 。
g.setColor(Color.BLACK);
int red = 0, green = 0, blue = 0;
for(int i = 0; i < 20; i++)
{
int x = random.nextInt(width);
int y = random.nextInt(height);
int xl = random.nextInt(30);
int yl = random.nextInt(30);
red = random.nextInt(255);
green = random.nextInt(255);
blue = random.nextInt(255);
// 。
g.setColor(new Color(red, green, blue));
g.setStroke(new BasicStroke(3.0f));
g.drawArc(x, y, xl, yl,random.nextInt(180),random.nextInt(180));
}
//randomCode , 。
StringBuffer randomCode = new StringBuffer();
// codeCount 。
for (int i = 0; i < codeCount; i++) {
// 。
String strRand = String.valueOf(codeSequence[random.nextInt(36)]);
g.setColor(new Color(red, green, blue));
g.drawString(strRand, (i + 1) * x, codeY);
// 。
randomCode.append(strRand);
}
// Session 。
HttpSession session = req.getSession();
session.setAttribute("validateCode", randomCode.toString());
// 。
resp.setHeader("Pragma", "no-cache");
resp.setHeader("Cache-Control", "no-cache");
resp.setDateHeader("Expires", 0);
resp.setContentType("image/jpeg");
// Servlet 。
ServletOutputStream sos = resp.getOutputStream();
ImageIO.write(buffImg, "jpeg", sos);
sos.close();
}
}
그리고 페이지 를 이 servlet 에 삽입 합 니 다:
<img src="/ymail/validateCodeServlet" onclick="refresh(this);"/>
<script>
function refresh(e){
e.src="validateCodeServlet";
}
</script>
이것 을 언급 하면 단 방향 양 방향 은 진부 한 문제 입 니 다. 여 기 는 양 방향 을 사용 하지 않 기 때문에 서버 측의 검증 만 추 가 했 습 니 다.
1. 키 스토어 를 만 드 는 것 은 간단 합 니 다. JDK 가 자체 적 으로 가지 고 있 는 키 툴 을 이용 하면 완성 할 수 있 습 니 다.명령 은 다음 과 같 습 니 다.
wakan@wakan:~/tomcat2/bin> keytool -genkey -alias tomcat -keyalg RSA
keystore : ************
?
[Unknown]: Wakan.Jiang
?
[Unknown]: ZZNode
?
[Unknown]: ZZNode
?
[Unknown]: BeiJing
?
[Unknown]: BeiJing
[Unknown]: CN
CN=Wakan.Jiang, OU=ZZNode, O=ZZNode, L=BeiJing, ST=BeiJing, C=CN ?
[ ]:
<tomcat>
( keystore , ):
특히 위 에 입력 한 "< tomcat > 의 주 비밀번호" 는 keystore 비밀번호 와 같 아야 합 니 다. 그렇지 않 으 면 TOMCAT 가 일어나 지 않 습 니 다.적어도 몇 번 은 해 봤 는데 안 돼.오 류 는 다음 과 같 습 니 다: 2007 - 3 - 26 17: 07: 01 org. apache. coyote. http 11. Http 11 BaseProtocol init 심각: Error initializing endpointjava. io. IOException: Cannot recover key at org. apache. tomcat. util. net. jsse. JSSE 14 SocketFactory. init (JSSE 14 Socket Factory. java: 125) 2. server. xml 을 TOMCAT / conf / server. xml 에서 SSL 과 관련 된 부분 을 수정 합 니 다. 다음 과 같이 변경 하 겠 습 니 다. keystore Pass 를 지정 합 니 다. 잘못 쓰 면 다음 오류 가 발생 합 니 다. 심각: Error initializing endpointjava. io. IOException: Keystore was tampered with, or password was incorrect at sun. security. provider. JavaKeyStore. engineLoad (JavaKeyStore. java: 768) 3. Tomcat 를 시작 하 는 것 은 비교적 간단 하 므 로 더 이상 말 하지 않 겠 습 니 다.시작 이 완료 되면 브 라 우 저 에: https://localhost:8443 를 입력 하면 TOMCAT 홈 페이지 를 볼 수 있 습 니 다.
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->
<Connector port="8443" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" disableUploadTimeout="true"
acceptCount="100" scheme="https" secure="true" keystorePass="******"
clientAuth="false" sslProtocol="TLS" />
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.